gpt4 book ai didi

java - 编译单元访问者 - Java 编译器树 api

转载 作者:行者123 更新时间:2023-11-30 04:50:07 26 4
gpt4 key购买 nike

我正在使用编译器 Tree api 将我的代码解析为 AST,但从未调用访问编译单元方法,尽管调用了访问类方法,我做错了什么?

第二个问题:有没有办法告诉编译器截断编译后的代码(我只对 AST 感兴趣,对类文件不感兴趣)。

谢谢。

@SupportedSourceVersion(value=SourceVersion.RELEASE_7)
@SupportedAnnotationTypes("*")
public class Parser extends AbstractProcessor {
.
.
.
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnvironment) {
for (Element e : roundEnvironment.getRootElements()) {
System.out.println(e + "***");
TreePath tp = trees.getPath(e);
// invoke the scanner
rootVisitor.scan(tp, trees);
}
return true;
}
}



public class OdpaVisitor extends TreePathScanner<Object, Trees> {

protected RepositoryIface repository;

private String pckg;

public OdpaVisitor(RepositoryIface repository) {
this.repository = repository;
}

@Override
public Object visitCompilationUnit(CompilationUnitTree node, Trees p) {
repository.savePackage(node.getPackageName().toString());
this.pckg = node.getPackageName().toString();
return super.visitCompilationUnit(node, p);
}

@Override
public Object visitClass(ClassTree node, Trees p) {
repository.saveClass(node.getSimpleName().toString(), pckg);
return super.visitClass(node, p);
}
}

最佳答案

您可能引用了 ClassTree使用getTree method .

你需要

  1. 获取 TreePath 的引用使用getPath method - 使用您之前发现的 ClassTree 作为参数 e。
  2. 获取 CompilationUnitTree 的引用使用getCompilationUnit method .

关于java - 编译单元访问者 - Java 编译器树 api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10030043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com