2013-06-03 132 views
0

我一直試圖通過在IType中定義錯誤的類型字段來產生編譯錯誤,但是,當搜索包含IType代表的類文件的項目中的問題時,錯誤。Eclipse IType類忽略編譯錯誤

我不知道如何理解這樣的結果,是否應該發生? IType是否可以包含與未定義的類一起使用的方法或字段?

我的目標是檢測這些錯誤是簡單地忽略還是根本沒有發生。

如下問,這是我希望能夠產生錯誤的代碼:

String source = "private Asdf a;"; 
itype.createField(source, null, true, null);   
String jmethod = "\tpublic void foo() {\n\t\tint b = a.getB();\n\t}\n"; 
itype.createMethod(jmethod, null, true, null); 

哪裏是從未定義ASDF。

+0

請包含代碼片段。你如何添加該領域?這是一個二進制或源類型? –

+0

我使用IType API創建字段和方法: createField(); createMethod(); –

+0

你如何檢查是否有錯誤? –

回答

0

問題在於您的電話findMarkers沒有等待足夠長的時間,並且構建尚未完成,或者createField的調用根本沒有觸發構建。

只有在編譯或協調後才能發現問題。在編譯後有很多內部方法可以訪問問題,但如果您想保持API兼容,那麼最好的方法是創建一個編譯參與者。請參閱類org.eclipse.jdt.core.compiler.CompilationParticipant和相關的擴展點,稱爲org.eclipse.jdt.core.compilationParticipant。實現其中的一個將確保您的代碼在發生強制計算問題的操作時被觸發。

+0

感謝安德魯, 看來,CompilationParticipant擴展ReconcileContext的需求,我無法找到如何獲得。你知道我怎麼得到它? –

+0

該類是jdt.core項目的一部分。它是'org.eclipse.jdt.core.compiler.ReconcileContext'。 –

+0

我仍然試圖找到ReconcileContext的實例。它似乎沒有任何關於它的信息。 我想我錯過了關於如何處理CompilationParticipant的問題。 –