1 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 ; 16 import java.lang.reflect.InvocationHandler ; 17 import java.lang.reflect.Method ; 18 import java.lang.reflect.Proxy ; 19 import java.util.ArrayList ; 20 import java.util.Collection ; 21 import java.util.HashSet ; 22 import java.util.List ; 23 import java.util.Set ; 24 25 public class ParserTst extends TestCase { 26 27 private class Collector implements InvocationHandler { 28 private Class clazz = null; 29 private Collection collection; 30 31 public Collector(Class clazz) { 32 this(clazz, new HashSet ()); 33 } 34 35 public Collector(Class clazz, Collection coll) { 36 this.clazz = clazz; 37 this.collection = coll; 38 } 39 40 public Collection getCollection() { 41 return collection; 42 } 43 44 public Object invoke(Object proxy, Method method, Object params[]) throws Throwable { 45 if (method.getName().equals("visit")) { 46 if (clazz.isInstance(params[0])) { 47 collection.add(params[0]); 48 } 49 } 50 51 Method childrenAccept = params[0].getClass().getMethod("childrenAccept", new Class []{JavaParserVisitor.class, Object .class}); 52 childrenAccept.invoke(params[0], new Object []{proxy, null}); 53 return null; 54 } 55 } 56 57 public Set getNodes(Class clazz, String javaCode) throws Throwable { 58 return getNodes(new TargetJDK1_4(), clazz, javaCode); 59 } 60 61 public Set getNodes(TargetJDKVersion jdk, Class clazz, String javaCode) throws Throwable { 62 Collector coll = new Collector(clazz); 63 JavaParser parser = jdk.createParser(new StringReader (javaCode)); 64 ASTCompilationUnit cu = parser.CompilationUnit(); 65 JavaParserVisitor jpv = (JavaParserVisitor) Proxy.newProxyInstance(JavaParserVisitor.class.getClassLoader(), new Class []{JavaParserVisitor.class}, coll); 66 jpv.visit(cu, null); 67 return (Set ) coll.getCollection(); 68 } 69 70 public List getOrderedNodes(Class clazz, String javaCode) throws Throwable { 71 Collector coll = new Collector(clazz, new ArrayList ()); 72 JavaParser parser = (new TargetJDK1_4()).createParser(new StringReader (javaCode)); 73 ASTCompilationUnit cu = parser.CompilationUnit(); 74 JavaParserVisitor jpv = (JavaParserVisitor) Proxy.newProxyInstance(JavaParserVisitor.class.getClassLoader(), new Class []{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 ) coll.getCollection(); 81 } 82 83 public ASTCompilationUnit buildDFA(String javaCode) throws Throwable { 84 JavaParser parser = (new TargetJDK1_4()).createParser(new StringReader (javaCode)); 85 ASTCompilationUnit cu = parser.CompilationUnit(); 86 JavaParserVisitor jpv = (JavaParserVisitor) Proxy.newProxyInstance(JavaParserVisitor.class.getClassLoader(), new Class []{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 |