1 package net.sourceforge.pmd.rules.imports;
2
3 import net.sourceforge.pmd.AbstractRule;
4 import net.sourceforge.pmd.ast.ASTImportDeclaration;
5 import net.sourceforge.pmd.ast.SimpleNode;
6
7 import java.util.Arrays;
8 import java.util.HashSet;
9 import java.util.Set;
10
11 public class DontImportJavaLang extends AbstractRule {
12
13 private Set<Package> skipPackages = new HashSet<Package>(Arrays.asList(new Package[] { Package.getPackage("java.lang.ref"), Package.getPackage("java.lang.reflect"), Package.getPackage("java.lang.annotation"),
14 Package.getPackage("java.lang.instrument"), Package.getPackage("java.lang.management"), Package.getPackage("java.lang.Thread") }));
15
16 private Package javaLangPackage = Package.getPackage("java.lang");
17
18 public Object visit(ASTImportDeclaration node, Object data) {
19
20 if (node.isStatic()) {
21 return data;
22 }
23
24 if (node.getPackage() != null) {
25 if(node.getPackage().equals(javaLangPackage) && !skipPackages.contains(node.getPackage())){
26 addViolation(data, node);
27 }
28 } else {
29 String img = ((SimpleNode) node.jjtGetChild(0)).getImage();
30 if (img.startsWith("java.lang")) {
31 if (img.startsWith("java.lang.ref")
32 || img.startsWith("java.lang.reflect")
33 || img.startsWith("java.lang.annotation")
34 || img.startsWith("java.lang.instrument")
35 || img.startsWith("java.lang.management")
36 || img.startsWith("java.lang.Thread.")) {
37 return data;
38 }
39 addViolation(data, node);
40 }
41 }
42 return data;
43 }
44 }