1 package net.sourceforge.pmd.rules.design;
2
3 import net.sourceforge.pmd.AbstractRule;
4 import net.sourceforge.pmd.RuleContext;
5 import net.sourceforge.pmd.ast.ASTFieldDeclaration;
6 import net.sourceforge.pmd.ast.ASTFormalParameter;
7 import net.sourceforge.pmd.ast.ASTName;
8 import net.sourceforge.pmd.ast.ASTResultType;
9 import net.sourceforge.pmd.ast.Node;
10
11 import java.text.MessageFormat;
12 import java.util.HashSet;
13 import java.util.Set;
14
15 public class LooseCouplingRule extends AbstractRule {
16
17 private Set implClassNames = new HashSet();
18
19 public LooseCouplingRule() {
20 super();
21 implClassNames.add("HashSet");
22 implClassNames.add("HashMap");
23 implClassNames.add("ArrayList");
24 implClassNames.add("LinkedHashMap");
25 implClassNames.add("LinkedHashSet");
26 implClassNames.add("TreeSet");
27 implClassNames.add("TreeMap");
28 implClassNames.add("Vector");
29 implClassNames.add("java.util.HashSet");
30 implClassNames.add("java.util.HashMap");
31 implClassNames.add("java.util.ArrayList");
32 implClassNames.add("java.util.LinkedHashMap");
33 implClassNames.add("java.util.LinkedHashSet");
34 implClassNames.add("java.util.TreeSet");
35 implClassNames.add("java.util.TreeMap");
36 implClassNames.add("java.util.Vector");
37 }
38
39 public Object visit(ASTName node, Object data) {
40 Node parent = node.jjtGetParent().jjtGetParent();
41 if (implClassNames.contains(node.getImage()) && (parent instanceof ASTFieldDeclaration || parent instanceof ASTFormalParameter || parent instanceof ASTResultType)) {
42 RuleContext ctx = (RuleContext) data;
43 ctx.getReport().addRuleViolation(createRuleViolation(ctx, node.getBeginLine(), MessageFormat.format(getMessage(), new Object[]{node.getImage()})));
44 }
45 return data;
46 }
47 }
This page was automatically generated by Maven