2012-04-23 9 views
2

Я пытаюсь посетить тело метода с помощью другого treepathscanner, но я не знаю, какой параметр передать, потому что я всегда получаю NPE в конструкторе TreePath.Java-компилятор tree api: NPE

@Override 
public Object visitMethod(MethodTree node, Trees p) { 
    ... 
    node.getBody().accept(new MethodVisitor(m, repository), node.getBody()); 
    ... 
} 


public class MethodVisitor extends TreePathScanner<Object, BlockTree> {...} 

Исключение:

An annotation processor threw an uncaught exception. 
Consult the following stack trace for details. 
java.lang.NullPointerException 
    at com.sun.source.util.TreePath.<init>(TreePath.java:94) 
    at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:65) 
    at com.sun.source.util.TreeScanner.scan(TreeScanner.java:90) 
    at com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:158) 
    at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:764) 
    at cz.cvut.kbss.odpa.parser.visitor.OdpaVisitor.visitMethod(OdpaVisitor.java:93) 
    at cz.cvut.kbss.odpa.parser.visitor.OdpaVisitor.visitMethod(OdpaVisitor.java:29) 
    at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:676) 
    at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:67) 
    ... 

Спасибо за любую помощь.

ответ

2

В случае, если кто-то нуждается в этом, правильный способ назвать это:

new MethodVisitor(m, repository).scan(p.getPath(compilationUnitTree, node), node.getBody());