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 }