Java编译器树api : NPE

标签 java visitor-pattern java-compiler-api

我试图用另一个treepathscanner访问方法体,但我不知道要传递哪个参数,因为我总是在TreePath构造函数中得到一个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> {...}

异常(exception):

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)
    ...

感谢您的帮助。

最佳答案

如果有人需要它,正确的调用方法是:

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

关于Java编译器树api : NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10281918/

相关文章:

java - weblogic 12c 中 WebAppModule 的 Weblogic 未解析的 Webapp 库引用

java - 如何在java中添加带有空格的int输入?

php - 如何根据该 IP 每秒或每分钟的连接数拒绝对该 IP 的服务?

java - Java 的访问者模式

java 执行之间的 Java 字符 IO

eclipse - 如何以编程方式使用 JDT 编译器?

java - Jersey:无法从 String 中反序列化 ArrayList 的实例

java - 将默认字符集更改为 UTF-8

java - 访客设计模式-电子商务

java - 最好的选择?编译前编辑字节码(asm)或编辑java文件