KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > incava > java > FieldUtil


1 package org.incava.java;
2
3 import java.util.*;
4 import net.sourceforge.pmd.ast.*;
5
6
7 /**
8  * Miscellaneous routines for fields.
9  */

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     /**
25      * Returns a string in the form "a, b, c", for the variables declared in
26      * this field.
27      */

28     public static String JavaDoc getNames(ASTFieldDeclaration fld)
29     {
30         ASTVariableDeclarator[] avds = getVariableDeclarators(fld);
31         StringBuffer JavaDoc buf = new StringBuffer JavaDoc();
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