簡體   English   中英

獨立 Java 應用程序上的 Eclipse AST 變量綁定

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM