2013-01-08 19 views
5

Java kaynaklarına bağlanan özel bir XML biçimim var. Basitlik açısından benim XML dosyası şu şekilde görünecektir varsayalım: XML dosyalarında Java öğelerinin bağlantılarının farkında olmasını sağlayın.

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

Sonunda benim referanslar biraz daha karmaşık olacaktır. Tam olarak sınıf adını tam olarak içermeyecek ve doğru sınıfı çözmek için bir mantığa ihtiyacım olacak, ancak buradaki örneği mümkün olduğunca basit tutmak istiyorum.

Şimdi Strg + 'nin elemanın metnine tıklayın ve IntelliJet'in beni Spring-XML dosyalarında olduğu gibi .java dosyasına taşımasını istiyorum. IDEA Plugin Development FAQ'da "How do I add custom references to Java elements in XML files?" adlı bir bağlantı var ve bu tam olarak neye ihtiyacım var gibi geliyor. Ne yazık ki, birisinin az ya da çok küçük bir sorunla başa çıkabildiği, böyle bir şeyi hayata geçirdiği bir tartışmaya bağlanmaktadır. Yine de, muhtemelen com.intellij.psi.PsiReference arayüzünün bir uygulamasını yazmam gerektiğini anladım. "PsiReference" ve "IntelliJ" veya "IDEA" için maalesef, nasıl kullanılacağı konusunda herhangi bir öğretici getirmediler, ancak yararlı olan XmlValueReference sınıfını buldum. Yine de "XmlValueReference" için tekrar arama yapmak, sınıfı nasıl kullanacağına dair yararlı bir şey ortaya atmadı. En azından PSI Cookbook bana JavaPsiFacade.findClass() kullanarak Java sınıfını bulabileceğimi söylüyor. Doğru kullanımı söyleyen herhangi bir öğretici, ipucu ve benzeri için teşekkür ederim.

Yukarıda bahsettiğim konu, en sonunda uygulamayı gerçekleştirdiğimde sağlayıcımı kaydetmek için registry.registerReferenceProvider(XmlTag.class, provider) numaralı telefonu aramam gerektiğini, bunun hangi türden "kayıt" olduğunu ve nereden alacağımı bildirdiğinden bahseder?

cevap

4

Öncelikle, birkaç gün önce IntelliJ eklenti geliştirmesinin temellerini açıklayan bir nice tutorial olan (Reference Contributor bölümüne bakın).

Büyük olasılıkla böyle senin plugin.xml başvurulan edilecektir, PsiReferenceContributor kendi tanımlamak gerekir: Referans katılımcı olarak

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

, sen registry.registerReferenceProvider(XmlTag.class, provider) aramak mümkün olacak bir yöntem registerReferenceProviders(PsiReferenceRegistrar) var.

Son olarak, PsiReferenceProvider örneğinizde, sınıf referanslarını içermeyen etiketleri filtrelemek için etiket adını test etmeniz, ardından JavaPsiFacade.findClass() kullanarak the right Java class kodunu bulmanız gerekir.

Benim deneyimime göre, IntelliJ eklentisi geliştirme konusunda yardım almak için en iyi yer JetBrains' forums.

İlgili konular