1 package org.incava.java; 2 3 import java.util.*; 4 import net.sourceforge.pmd.ast.*; 5 6 7 10 public class FieldUtil extends SimpleNodeUtil 11 { 12 public static Token getName(ASTVariableDeclarator vd) 13 { 14 ASTVariableDeclaratorId vid = (ASTVariableDeclaratorId)findChild(vd, ASTVariableDeclaratorId.class); 15 Token nameTk = vid.getFirstToken(); 16 return nameTk; 17 } 18 19 public static ASTVariableDeclarator[] getVariableDeclarators(ASTFieldDeclaration fld) 20 { 21 return (ASTVariableDeclarator[])findChildren(fld, ASTVariableDeclarator.class); 22 } 23 24 28 public static String getNames(ASTFieldDeclaration fld) 29 { 30 ASTVariableDeclarator[] avds = getVariableDeclarators(fld); 31 StringBuffer buf = new StringBuffer (); 32 for (int ai = 0; ai < avds.length; ++ai) { 33 ASTVariableDeclarator avd = avds[ai]; 34 if (ai > 0) { 35 buf.append(", "); 36 } 37 buf.append(VariableUtil.getName(avd).image); 38 } 39 return buf.toString(); 40 } 41 42 public static double getMatchScore(ASTFieldDeclaration a, ASTFieldDeclaration b) 43 { 44 ASTVariableDeclarator[] avds = getVariableDeclarators(a); 45 ASTVariableDeclarator[] bvds = getVariableDeclarators(b); 46 47 Token[] aNames = VariableUtil.getVariableNames(avds); 48 Token[] bNames = VariableUtil.getVariableNames(bvds); 49 50 int matched = 0; 51 int i = 0; 52 while (i < aNames.length && i < bNames.length) { 53 if (aNames[i].image.equals(bNames[i].image)) { 54 ++matched; 55 } 56 ++i; 57 } 58 59 int count = Math.max(aNames.length, bNames.length); 60 61 double score = 0.5 * matched / count; 62 63 ASTType aType = (ASTType)findChild(a, ASTType.class); 64 ASTType bType = (ASTType)findChild(b, ASTType.class); 65 66 if (toString(aType).equals(toString(bType))) { 67 score += 0.5; 68 } 69 70 return score; 71 } 72 73 } 74
| Popular Tags
|