2013-04-04 54 views
2

我正在爲使用來自JDT的IType和IMethod接口的插件編寫單元測試。要編寫單元測試,我需要實例化這些接口。回答 this question顯示如何創建AST模型,但我不知道如何將其轉換爲Java模型?如何將AST轉換爲JDT Java模型

我的代碼如下所示:

String source = 

    "package com.test\n" + 
    "\n" + 
    "import com.test.something;" + 
    "\n" + 
    "public class Class{\n" + 
    "int sum(int a, int b)\n" + 
    "}\n"; 

ASTParser parser = ASTParser.newParser(AST.JLS4); 
parser.setSource(source.toCharArray()); 
CompilationUnit unit = (CompilationUnit) parser.createAST(null); 

所以我有CompilationUnit一個實例,但我需要ICompilationUInit的一個實例,這樣我就可以得到IMethodIType對象的訪問。

回答

2

這不太可能。 ICompilationUnit s是java模型的一部分,這意味着它是某個Java項目的一部分,並且有一個完整的類路徑,一個包,一個包根等等。您所做的只是創建一些不是文本的解析樹連接到任何Java項目。

如果您可以更具體地瞭解您的目標是什麼,那麼您可能確實不需要任何IType和IMethod實例。或者,如果您真的需要這些類型的實例,那麼您將需要生成IProject s,爲其添加Java特性,然後用文件填充它。您最好的選擇是瞭解JDT測試基礎架構的工作原理。

看看這個文件:https://github.com/eclipse/eclipse.jdt.core/blob/master/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/TestingEnvironment.java

以及它是如何在整個測試框架中。

+0

鏈接相當有幫助 – 2013-04-09 08:47:56

1

相反歌廳的ICompilationUnit一個實例可以使用AST遊客模式訪問方法聲明節點& 類型聲明節點,並得到IMethodIType對象如下:

compilationUnit.accept(new ASTVisitor() { 

    public boolean visit(MethodDeclaration node) {             
     IMethod iMethod = (IMethod) node.resolveBinding().getJavaElement();            
     return true; 
    } 

    public boolean visit(TypeDeclaration node) {             
     IType iType = (IType) node.resolveBinding().getJavaElement();             
     return true; 
    } 
}); 
+0

正如安德魯在上面指出的那樣,爲了解決綁定問題,Java類必須是Java項目的一部分,否則綁定將返回爲null。 – 2013-04-09 08:49:29