我需要得到對於我的源代碼中的所有變量,IField或IJavaElement引用。我使用的插件,獲取從中我能用來讀取所有頂級對象ICompilationUnit:所有變量的IFields來自CompilationUnit
爲(IJavaElement我:unit.getTypes()[0] .getChildren())
或
爲(IJavaElement我:unit.getAllTypes())
如何訪問局部變量?我試圖解析ICompilationUnit CompilationUnit,其中我可以得到每個字段的ASTNode,但然後我無法將其轉換信息IField。有任何想法嗎?
//編輯: 例如: 對於一類:
公共類測試{
INT GLOBAL1; int global2; void a() {global} = 4; int local1; int local2 = 5; }
}
我打電話
爲(ITYPE類型:unit.getTypes()){ 的System.out.println( 「ITYPE」 +型);對於(IField iField:type.getFields()){ System.out.println(「iField」+ iField); }}
,輸出是:
ITYPE類測試[在[工作副本] Test.java [在[src中[在 testowy]]]] INT GLOBAL1 INT global2無效a()iField int global1 [in Test [in [工作副本] Test.java [in [in src [in testowy]]]]] iField int global2 [in Test [in [Working copy] Test .java [in [in src [in testowy]]]]]
因此,沒有局部變量被發現......
//添加 - 還在掙扎: 其實這不是我所期待的行爲。
for(IMethod i:unit.getAllTypes()[0].getMethods())
{
System.out.println("index to h:"+h+" type "+i.getSource()+" name: "+i.getElementName());
h++;
int o =0;
for(IJavaElement j: i.getChildren())
{
System.out.println("index to o: "+o+j+" type "+j.getElementType()+" name: "+j.getElementName());
o++;
}
}
此代碼我希望能夠找到的所有方法(的作品),並從方法的所有局部變量(即不工作)。它永遠不會進入字段循環。它正確打印函數聲明,所以我確信它可以看到所有變量...
至於使用INode,我可以訪問所有節點,但我怎麼能改變從節點到我需要的IField/IJavaElement類型?
謝謝:)
感謝您的提示:)。不幸的是它不起作用。它仍然只訪問全局變量。我在我的問題中添加了更多細節。 – 2011-05-14 10:13:54
這是預期的行爲,那些不是'IField'的。也爲答案添加了其他信息。 – wjans 2011-05-14 11:22:21