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