2010-01-06 13 views
5

मैं एक प्लगइन विकसित कर रहा हूं जो कुछ इंटरफ़ेस (आईडीओएमएन) को लागू करता है जो कोड (एएसटी का उपयोग करके) को लागू करता है, एनम पर कुछ संशोधन करता है और इसे एनोटेशन के साथ संसाधित करता है (@ IDomainInfo)।अजीब जावाकोर आईटइप कैश समस्या

उदाहरण के लिए, यह इस तरह someting लेता है:

public 
enum SomeEnum implements IDomain { 
    // ... 
} 

और कुछ इस तरह उत्पन्न करता है:

public @IDomainInfo(domainId = 1) 
enum SomeEnum implements IDomain { 
    // Some changes here... 
} 

@IDomainInfo के पीछे विचार यह है कि टिप्पण लिखित enums अब और संसाधित करने के लिए नहीं है प्लगइन द्वारा।

मूल रूप से मैं क्या कार्य को पूरा करने के लिए क्या सब enums IDomain (आसान काम) को लागू करने को खोजने के लिए JavaSearch एपीआई के साथ एक खोज बनाने के लिए है, और परिणाम के रूप में मैं IJavaElements (जो IType के तथ्य मामलों में कर रहे हैं) की एक सूची प्राप्त । फिर मैं एक विधि को कॉल करता हूं जो परिणामस्वरूप सूची के माध्यम से पुनरावृत्त करता है और सभी आईटइप उदाहरणों की एक नई सूची बनाता है जो @IDomainInfo के साथ एनोटेटेड नहीं हैं और फिर परिणामी सूची को संसाधित करते हैं: प्रत्येक गैर-एनोटेटेड आईटी टाइप के लिए कुछ काम करते हैं, आईटी टाइप को @ IDomainInfo एनोटेशन (एएसटी का उपयोग करके) और फिर परिणामों को फ़ाइल में वापस सहेजें (IFile का उपयोग करके, इसलिए मैं ताज़ा किए बिना परिवर्तन देख सकता हूं, और वास्तव में, अगर मेरे पास संपादक में enum खुला है, तो मुझे तुरंत ताज़ा दिखाई देता है :-)

यह सब ठीक काम करता है, लेकिन अगर मैं @IDomainInfo एनोटेटेड एनम (केवल परीक्षण के लिए) खोलता हूं तो @IDomainInfo को हटाएं, फ़ाइल को सहेजें (मुझे यकीन है) और उसके बाद उस क्रिया को कॉल करें जो मैंने जो काम किया है इससे पहले, जब मैं उस भाग में जाता हूं जो एनोटेटेड आईटी टाइप को गैर-एनोटेटेड से फ़िल्टर करता है, तो कोड कुछ ऐसा होता है:

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... 
    } 

ठीक है, यह परिणाम देता है कि फ़ाइल के लिए मैंने अभी बचाया है आईटी टाइप एनोटेशन का पता लगाता है जिसे मैंने अभी हटा दिया है जैसे कि यह अभी भी है। अगर मैं ग्रहण को बंद और दोबारा खोलता हूं तो सभी सामान्य रूप से काम करते हैं।

अब, मैंने अभी जांच की है और मेरे कोड को तीन बार चेक किया है, इसलिए मुझे यकीन है कि मैं एनोटेशन संस्करण के साथ अभी भी पुराने आईटी टाइप की पुरानी प्रतिलिपि नहीं रख रहा हूं (मेरा सभी आईटीपी ताजा जावा से आया है प्रत्येक बार जब मैं कार्रवाई चलाता हूं तो खोज कॉल)।

तो सवाल यह है कि, मैं गलत क्या कर सकता हूं? मेरा मतलब है, मैंने जावाकॉर एपीआई को कई बार जांचने के लिए पढ़ा है कि क्या मैं इसे गलत इस्तेमाल कर रहा हूं या अगर मेरे पास कुछ वैचारिक दोष है लेकिन वास्तव में मेरे पास कोई सुराग नहीं है, तो यह जैसा है यदि ग्रहण परिवर्तन को अनदेखा कर रहा है मैं सिर्फ संपादक में बनाया है: -/

किसी भी एक एक विचार मैं इसे एक बहुत :-)

+0

मुझे यह ब्लॉग पोस्ट मिला है। शायद आप कोशिश कर सकते हैं। 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 अलविदा, –

उत्तर

0

जब या कैसे अपने प्लगइन कहा जाता है की सराहना करेंगे है? क्या आपने संसाधन श्रोता पंजीकृत किया है या यह एक प्रोजेक्ट बिल्डर है या कुछ और? यदि इसे संसाधन श्रोता द्वारा बुलाया जाता है, तो आपकी प्लगइन आपके आईटीइप के लिए 'प्राथमिक प्रतिलिपि' पढ़ रही है, जिसे अभी तक सहेजा नहीं गया है। इसलिए आपके परिवर्तन अभी भी कार्य प्रतिलिपि में हैं।

संबंधित मुद्दे