1 /***
2 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3 */
4 package net.sourceforge.pmd.rules;
5
6 import net.sourceforge.pmd.AbstractRule;
7 import net.sourceforge.pmd.Rule;
8 import net.sourceforge.pmd.ast.ASTClassOrInterfaceDeclaration;
9 import net.sourceforge.pmd.symboltable.MethodNameDeclaration;
10
11 import java.util.HashSet;
12 import java.util.Iterator;
13 import java.util.Map;
14 import java.util.Set;
15
16 public class SymbolTableTestRule extends AbstractRule implements Rule {
17
18 public Object visit(ASTClassOrInterfaceDeclaration node, Object data) {
19 Map methods = node.getScope().getEnclosingClassScope().getMethodDeclarations();
20 Set suffixes = new HashSet();
21 for (Iterator i = methods.keySet().iterator(); i.hasNext();) {
22 MethodNameDeclaration mnd = (MethodNameDeclaration) i.next();
23 String suffix = findSuffix(mnd);
24 if (suffix != null) {
25 if (suffixes.contains(suffix)) {
26 addViolation(data, mnd.getNode(), suffix);
27 }
28 suffixes.add(suffix);
29 }
30 }
31 return data;
32 }
33
34 private String findSuffix(MethodNameDeclaration mnd) {
35 String end = null;
36 if (mnd.getImage().startsWith("is")) {
37 end = mnd.getImage().substring(2);
38 } else if (mnd.getImage().startsWith("get")) {
39 end = mnd.getImage().substring(3);
40 }
41 return end;
42 }
43
44 }