gpt4 book ai didi

java - 独立 Java 应用程序上的 Eclipse AST 变量绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 05:23:40 25 4
gpt4 key购买 nike

我正在尝试使用 Eclipse ASTParser 来分析并在可能的情况下向某些类添加一些代码。我需要的信息之一需要绑定(bind),但因为这是一个独立的项目(最终目标是一个命令行工具,独立于 eclipse)我不能拥有它们( requireBinding() 返回 null )。

在阅读了很多帖子之后,我能走的远是使用this examples为了使用 FileASTRequestor但这不是要走的路,因为在我看来,我们必须在生成 AST 树之前提供绑定(bind)的 KEY。

我找到了可以使用 ASTParser.setEnvironment 的地方方法以便在独立的 java 应用程序中使用绑定(bind),但我认为我做的不正确。下面的代码有什么问题?

private static final String rootDir = "D:\\workspace\\stateless\\";
private static final String[] classpath = java.lang.System.getProperty( "java.class.path" ).split(";");

private static final String source =
"package de.siemens.tools.stateless.test.examples; " +
"public class ClassWithFinalMemberVariables {" +
"private final int _memberIntVariable = 0;" +
"public void method() {" +
"int localVariable = 0;" +
"System.out.println(_memberIntVariable + localVariable);" +
"}" +
"}";

public static void main(String[] args) throws CoreException {

Document document = new Document(source);
ASTParser parser = ASTParser.newParser(AST.JLS4);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setEnvironment(classpath, new String[] { rootDir },
new String[] { "UTF8" }, true);
parser.setSource(document.get().toCharArray());
parser.setResolveBindings(true);
parser.setBindingsRecovery(true);
CompilationUnit unit = (CompilationUnit)parser.createAST(null);

unit.recordModifications();

unit.accept(new ASTVisitor() {

@Override
public void endVisit(VariableDeclarationFragment node) {

IVariableBinding bind = node.resolveBinding();

if(bind == null)
System.out.println("ERROR: bind is null");

super.endVisit(node);
}

输出始终为“ ERROR: bind is null”。

最佳答案

我已经解决了,代码在这里:
http://pasteit.com/19433

尽管我更喜欢 ASTVisitor 模型,但这个模型为我提供了所有可用的绑定(bind)。

对于那些好奇的人,这里是关于这个问题的讨论:https://bugs.eclipse.org/bugs/show_bug.cgi?id=206391

编辑:我不知道这是否是最好的解决方案,如果您有任何建议,请告诉我

关于java - 独立 Java 应用程序上的 Eclipse AST 变量绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13453811/

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