我正在開發一個插件,它採用實現某個接口(IDomain)的工作空間中的所有枚舉,解析代碼(使用AST)對枚舉做一些修改並將其標記爲使用註釋處理(@ IDomainInfo)。奇怪的JavaCore IType緩存問題
例如,它需要像成才這樣:
public
enum SomeEnum implements IDomain {
// ...
}
,併產生這樣的:
public @IDomainInfo(domainId = 1)
enum SomeEnum implements IDomain {
// Some changes here...
}
的@IDomainInfo背後的想法是,註釋的枚舉沒有再被處理由插件。
基本上,我所要完成的任務是使用JavaSearch API進行搜索以查找實現IDomain(簡單任務)的所有枚舉,並且因此得到IJavaElements的列表(實際上是IType的實例) 。然後我調用一個遍歷結果列表的方法,並創建所有未使用@IDomainInfo註釋的IType實例的新列表,然後處理結果列表:對於每個未註釋的IType執行一些工作,使用@註釋IType, IDomainInfo註解(使用AST),然後將結果保存到文件中(使用IFile,所以我可以在不刷新的情況下看到更改,事實上,如果我在編輯器中打開enum,我會立即刷新它:-)
所有這些工作正常,但如果我打開@IDomainInfo註釋枚舉(僅用於測試),然後刪除@IDomainInfo,保存該文件(我敢肯定),然後調用完成我所描述的所有工作的操作之前,當我到達從未註釋的部分過濾帶註釋的IType的部分時,代碼如下所示:
for (IType type : typeList) {
IAnnotation annotation = type.getAnnotation(「IDomainInfo」);
if (!annotation.exists()) {
// The annotation does not exist, so add the type to the
// list of elements to update and go on...
ret.add(type);
continue;
}
// Something else here...
}
好吧,結果是對於我剛剛保存的文件,IType檢測到我剛刪除的註釋,好像它仍然存在。如果我關閉並重新開啓eclipse,一切正常。
現在,我剛剛檢查和三重檢查了我的代碼,所以我確定我沒有保留舊版IType的舊版本,但仍然帶有註釋版本(我所有的IType都來自新鮮的java搜索調用每次我運行該操作)。
所以問題是,我可能會做錯什麼?我的意思是,我剛剛閱讀了JavaCore API多次,以檢查如果我可能使用它錯誤,或者如果我有一些概念上的缺陷,但我真的沒有線索,它就像如果日食會緩存IType忽略更改我剛剛在編輯器中提出: -/
如果任何人有一個想法,我想明白了很多:-)
我找到了這篇博文。也許你可以試試。 http://samindaw.wordpress.com/2008/11/11/eclipse-plugin-giving-errors-due-to-noclassdeffound-eventhough-class-is-in-the-library-or-issued-fixed-not-反映在跑步類/這(我認爲這是一個「解決方案):http://www.eclipsezone.com/eclipse/forums/t61566.html再見, – 2012-03-06 10:24:30