1 package net.sourceforge.pmd.rules;
2
3 import net.sourceforge.pmd.AbstractRule;
4 import net.sourceforge.pmd.RuleContext;
5 import net.sourceforge.pmd.ast.ASTCompilationUnit;
6 import net.sourceforge.pmd.ast.ASTImportDeclaration;
7 import net.sourceforge.pmd.ast.ASTName;
8 import net.sourceforge.pmd.ast.ASTPackageDeclaration;
9
10 public class ImportFromSamePackageRule extends AbstractRule {
11
12 private String packageName;
13
14 public Object visit(ASTCompilationUnit node, Object data) {
15 packageName = null;
16 return super.visit(node, data);
17 }
18
19 public Object visit(ASTPackageDeclaration node, Object data) {
20 packageName = ((ASTName) node.jjtGetChild(0)).getImage();
21 return data;
22 }
23
24 public Object visit(ASTImportDeclaration node, Object data) {
25 ASTName nameNode = node.getImportedNameNode();
26 RuleContext ctx = (RuleContext) data;
27 <b>if (packageName != null && !node.isImportOnDemand() && packageName.equals(getPackageName(nameNode.getImage()))) {
28 addViolation(ctx, node);
29 }
30
31 // special case
32 <b>if (packageName == null && getPackageName(nameNode.getImage()).equals("")) {
33 addViolation(ctx, node);
34 }
35 return data;
36 }
37
38 private void addViolation(RuleContext ctx, ASTImportDeclaration node) {
39 ctx.getReport().addRuleViolation(createRuleViolation(ctx, node.getBeginLine()));
40 }
41
42 private String getPackageName(String importName) {
43 if (importName.indexOf('.') == -1) {
44 return "";
45 }
46 int lastDot = importName.lastIndexOf('.');
47 return importName.substring(0, lastDot);
48 }
49
50 }
This page was automatically generated by Maven