1
2
3
4 package net.sourceforge.pmd.lang.java.typeresolution.rules;
5
6 import net.sourceforge.pmd.lang.ast.Node;
7 import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceType;
8 import net.sourceforge.pmd.lang.java.ast.ASTFieldDeclaration;
9 import net.sourceforge.pmd.lang.java.ast.ASTFormalParameter;
10 import net.sourceforge.pmd.lang.java.ast.ASTResultType;
11 import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule;
12 import net.sourceforge.pmd.util.CollectionUtil;
13
14
15
16
17 public class LooseCoupling extends AbstractJavaRule {
18
19 @Override
20 public Object visit(ASTClassOrInterfaceType node, Object data) {
21 Node parent = node.getNthParent(3);
22 Class<?> clazzType = node.getType();
23 boolean isType = CollectionUtil.isCollectionType(clazzType, false);
24 if (isType
25 && (parent instanceof ASTFieldDeclaration || parent instanceof ASTFormalParameter || parent instanceof ASTResultType)) {
26 addViolation(data, node, node.getImage());
27 }
28 return data;
29 }
30 }