KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > net > sourceforge > pmd > testframework > ParserTst


1 /**
2  * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3  */

4 package test.net.sourceforge.pmd.testframework;
5
6 import junit.framework.TestCase;
7 import net.sourceforge.pmd.TargetJDK1_4;
8 import net.sourceforge.pmd.TargetJDKVersion;
9 import net.sourceforge.pmd.ast.ASTCompilationUnit;
10 import net.sourceforge.pmd.ast.JavaParser;
11 import net.sourceforge.pmd.ast.JavaParserVisitor;
12 import net.sourceforge.pmd.dfa.DataFlowFacade;
13 import net.sourceforge.pmd.symboltable.SymbolFacade;
14
15 import java.io.StringReader JavaDoc;
16 import java.lang.reflect.InvocationHandler JavaDoc;
17 import java.lang.reflect.Method JavaDoc;
18 import java.lang.reflect.Proxy JavaDoc;
19 import java.util.ArrayList JavaDoc;
20 import java.util.Collection JavaDoc;
21 import java.util.HashSet JavaDoc;
22 import java.util.List JavaDoc;
23 import java.util.Set JavaDoc;
24
25 public class ParserTst extends TestCase {
26
27     private class Collector implements InvocationHandler JavaDoc {
28         private Class JavaDoc clazz = null;
29         private Collection JavaDoc collection;
30
31         public Collector(Class JavaDoc clazz) {
32             this(clazz, new HashSet JavaDoc());
33         }
34
35         public Collector(Class JavaDoc clazz, Collection JavaDoc coll) {
36             this.clazz = clazz;
37             this.collection = coll;
38         }
39
40         public Collection JavaDoc getCollection() {
41             return collection;
42         }
43
44         public Object JavaDoc invoke(Object JavaDoc proxy, Method JavaDoc method, Object JavaDoc params[]) throws Throwable JavaDoc {
45             if (method.getName().equals("visit")) {
46                 if (clazz.isInstance(params[0])) {
47                     collection.add(params[0]);
48                 }
49             }
50
51             Method JavaDoc childrenAccept = params[0].getClass().getMethod("childrenAccept", new Class JavaDoc[]{JavaParserVisitor.class, Object JavaDoc.class});
52             childrenAccept.invoke(params[0], new Object JavaDoc[]{proxy, null});
53             return null;
54         }
55     }
56
57     public Set JavaDoc getNodes(Class JavaDoc clazz, String JavaDoc javaCode) throws Throwable JavaDoc {
58         return getNodes(new TargetJDK1_4(), clazz, javaCode);
59     }
60
61     public Set JavaDoc getNodes(TargetJDKVersion jdk, Class JavaDoc clazz, String JavaDoc javaCode) throws Throwable JavaDoc {
62         Collector coll = new Collector(clazz);
63         JavaParser parser = jdk.createParser(new StringReader JavaDoc(javaCode));
64         ASTCompilationUnit cu = parser.CompilationUnit();
65         JavaParserVisitor jpv = (JavaParserVisitor) Proxy.newProxyInstance(JavaParserVisitor.class.getClassLoader(), new Class JavaDoc[]{JavaParserVisitor.class}, coll);
66         jpv.visit(cu, null);
67         return (Set JavaDoc) coll.getCollection();
68     }
69
70     public List JavaDoc getOrderedNodes(Class JavaDoc clazz, String JavaDoc javaCode) throws Throwable JavaDoc {
71         Collector coll = new Collector(clazz, new ArrayList JavaDoc());
72         JavaParser parser = (new TargetJDK1_4()).createParser(new StringReader JavaDoc(javaCode));
73         ASTCompilationUnit cu = parser.CompilationUnit();
74         JavaParserVisitor jpv = (JavaParserVisitor) Proxy.newProxyInstance(JavaParserVisitor.class.getClassLoader(), new Class JavaDoc[]{JavaParserVisitor.class}, coll);
75         jpv.visit(cu, null);
76         SymbolFacade sf = new SymbolFacade();
77         sf.initializeWith(cu);
78         DataFlowFacade dff = new DataFlowFacade();
79         dff.initializeWith(cu);
80         return (List JavaDoc) coll.getCollection();
81     }
82
83     public ASTCompilationUnit buildDFA(String JavaDoc javaCode) throws Throwable JavaDoc {
84         JavaParser parser = (new TargetJDK1_4()).createParser(new StringReader JavaDoc(javaCode));
85         ASTCompilationUnit cu = parser.CompilationUnit();
86         JavaParserVisitor jpv = (JavaParserVisitor) Proxy.newProxyInstance(JavaParserVisitor.class.getClassLoader(), new Class JavaDoc[]{JavaParserVisitor.class}, new Collector(ASTCompilationUnit.class));
87         jpv.visit(cu, null);
88         new SymbolFacade().initializeWith(cu);
89         new DataFlowFacade().initializeWith(cu);
90         return cu;
91     }
92 }
93
Popular Tags