2013-01-08 10 views
5

मेरे पास एक कस्टम एक्सएमएल प्रारूप है जो जावा संसाधनों से जुड़ा हुआ है। सरलता के लिए चलो मेरे एक्सएमएल फ़ाइल इस प्रकार दिखाई देगा मान:इंटेलिजे को एक्सएमएल फाइलों में जावा तत्वों के लिंक के बारे में पता है

<root> 
    <java-class>my.fully.qualified.class.name</java-class> 
</root> 

आखिरकार मेरी संदर्भ कुछ और अधिक जटिल हो जाएगा। इसमें सीधे पूरी तरह से योग्य वर्ग का नाम नहीं होगा और मुझे सही कक्षा को हल करने के लिए कुछ तर्क की आवश्यकता होगी, लेकिन मैं उदाहरण को यथासंभव सरल रखना चाहता हूं।

अब मैं स्ट्रिंग + तत्व के पाठ पर क्लिक करना चाहता हूं और इंटेलिजे को मुझे .java फ़ाइल में ले जाना चाहता हूं, जैसे स्प्रिंग-एक्सएमएल फाइलों में यह संभव है। IDEA Plugin Development FAQ में "How do I add custom references to Java elements in XML files?" नामक एक लिंक है जो मुझे बिल्कुल वैसे ही लगता है जो मुझे चाहिए। दुर्भाग्यवश यह एक चर्चा से जुड़ा हुआ है जहां किसी को कुछ मामूली समस्याएं होने के कारण इस तरह कुछ लागू करने में कम या ज्यादा किया जाता है। फिर भी मुझे समझ में आया कि मुझे शायद इंटरफ़ेस com.intellij.psi.PsiReference के कार्यान्वयन को लिखने की आवश्यकता है। दुर्भाग्य से "PsiReference" और "IntelliJ" या "IDEA" के लिए गुगलिंग ने इसका उपयोग करने के तरीके पर कोई ट्यूटोरियल नहीं लाया, लेकिन मुझे कक्षा XmlValueReference मिली जो उपयोगी लगता है। फिर भी "XmlValueReference" के लिए googling कक्षा का उपयोग करने के तरीके पर कुछ भी उपयोगी नहीं किया। कम से कम PSI Cookbook मुझे बताता है कि मैं JavaPsiFacade.findClass() का उपयोग कर जावा क्लास पा सकता हूं। मैं किसी भी ट्यूटोरियल, संकेत और पसंद के लिए आभारी हूं, जो सही उपयोग को बताता है।

ऊपर लिंक चर्चा का उल्लेख है कि मैं आदेश मेरा प्रदाता रजिस्टर करने के लिए एक बार मैं अंत में इसे लागू करने में कामयाब में registry.registerReferenceProvider(XmlTag.class, provider) कॉल करने की आवश्यकता है, लेकिन जो के प्रकार के "रजिस्ट्री" है और जहां मैं इसे से मिलता है?

उत्तर

4

सबसे पहले, यहाँ एक nice tutorial कि आया था कुछ दिन पहले, जो इंटेलीजे प्लगइन विकास की मूल बातें बताते हैं (आप अनुभाग Reference Contributor पर एक नज़र रखना चाहिए) है।

संभवत: आपको अपने स्वयं के PsiReferenceContributor, जो इस तरह अपने plugin.xml में संदर्भित किया जाएगा परिभाषित करना होगा:

<psi.referenceContributor implementation="com.yourplugin.YourReferenceContributor"/> 

आपके संदर्भ के योगदान में, वहाँ एक विधि registerReferenceProviders(PsiReferenceRegistrar) जहां registry.registerReferenceProvider(XmlTag.class, provider) कॉल करने के लिए सक्षम हो जाएगा है।

अंत में, PsiReferenceProvider के अपने उदाहरण में, आप टैग जो श्रेणी संदर्भ शामिल नहीं है बाहर फिल्टर करने के लिए टैग नाम का परीक्षण करना होगा, तो the right Java classJavaPsiFacade.findClass() का उपयोग कर सकते हैं।

मेरे अनुभव से, IntelliJ प्लगइन विकास के बारे में सहायता प्राप्त करने के लिए सबसे अच्छी जगह JetBrains' forums.

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