1 package net.sourceforge.pmd.lang.java.rule.imports;
2
3 import net.sourceforge.pmd.lang.java.ast.ASTImportDeclaration;
4 import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule;
5
6 public class DontImportJavaLangRule extends AbstractJavaRule {
7
8 private static final Package JAVA_LANG_PACKAGE = Package.getPackage("java.lang");
9
10 @Override
11 public Object visit(ASTImportDeclaration node, Object data) {
12
13 if (node.isStatic()) {
14 return data;
15 }
16
17 if (node.getPackage() != null) {
18 if (node.getPackage().equals(JAVA_LANG_PACKAGE)) {
19 addViolation(data, node);
20 }
21 } else {
22 String img = node.jjtGetChild(0).getImage();
23 if (img.startsWith("java.lang")) {
24 if (img.startsWith("java.lang.ref") || img.startsWith("java.lang.reflect")
25 || img.startsWith("java.lang.annotation") || img.startsWith("java.lang.instrument")
26 || img.startsWith("java.lang.management") || img.startsWith("java.lang.Thread.")
27 || img.startsWith("java.lang.ProcessBuilder.")) {
28 return data;
29 }
30 addViolation(data, node);
31 }
32 }
33 return data;
34 }
35 }