[英]Eclipse AST variable binding on standalone java application
我正在嘗試使用 Eclipse ASTParser 進行分析,並在可能的情況下向某些類添加一些代碼。 我需要綁定的信息之一,但因為這是一個獨立的項目(最終目標是一個命令行工具,獨立於 eclipse)我不能擁有它們( requireBinding()
返回null
)。
在閱讀了很多帖子后,我可以使用這個示例來使用FileASTRequestor
但這不是要走的路,因為在我看來,我們必須在生成 AST 樹之前提供要綁定的 KEY。
我發現我們可以在某個地方使用ASTParser.setEnvironment方法來在獨立的 Java 應用程序中使用綁定,但我認為我做得不對。 下面的代碼有什么問題?
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 模型,但這個模型為我提供了所有可用的綁定。
這里是關於這個問題的討論,對於那些好奇的人: https : //bugs.eclipse.org/bugs/show_bug.cgi? id =206391
編輯:我不知道這是否是最好的解決方案,如果您有任何建議,請告訴我
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.