2013-01-08 5 views
5

Ho un formato XML personalizzato che si collega alle risorse Java. Per semplicità supponiamo che il mio file XML sarà simile a questa:Rendi IntelliJ consapevole dei collegamenti agli elementi Java nei file XML

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

Alla fine i miei riferimenti sarà un po 'più complicato. Non conterrà direttamente il nome classe completo e avrò bisogno di una logica per risolvere la classe corretta, ma voglio mantenere l'esempio il più semplice possibile qui.

Ora voglio che sia possibile a Strg + Fare clic sul testo dell'elemento e voglio che IntelliJ mi porti nel file .java, proprio come è possibile nei file Spring-XML. Nel numero IDEA Plugin Development FAQ c'è un collegamento chiamato "How do I add custom references to Java elements in XML files?" che suona così esattamente come quello che mi serve. Sfortunatamente si collega a una discussione in cui qualcuno ha più o meno fatto implementare qualcosa di simile, avendo alcuni problemi minori. Tuttavia ho capito che probabilmente ho bisogno di scrivere un'implementazione dell'interfaccia com.intellij.psi.PsiReference. Googling per "PsiReference" e "IntelliJ" o "IDEA" sfortunatamente non ha portato alcun tutorial su come usarlo, ma ho trovato la classe XmlValueReference che sembra utile. Ancora una volta googling per "XmlValueReference" non ha rivelato nulla di utile su come utilizzare la classe. Almeno il PSI Cookbook mi dice che posso trovare la classe Java usando JavaPsiFacade.findClass(). Sarei grato per qualsiasi tutorial, suggerimento e simili, che dica l'uso corretto.

La discussione sopra citata menziona che devo chiamare registry.registerReferenceProvider(XmlTag.class, provider) per registrare il mio provider una volta che sono riuscito a implementarlo, ma di quale tipo è "registro" e da dove lo prendo?

risposta

4

Prima di tutto, ecco una nice tutorial che è venuto fino a pochi giorni fa, che spiega i principi fondamentali di sviluppo plug IntelliJ (si dovrebbe dare un'occhiata alla sezione Reference Contributor).

È probabile che sia necessario definire il proprio PsiReferenceContributor, che sarà fatto riferimento nel vostro plugin.xml come questo:

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

Nel vostro collaboratore di riferimento, c'è un metodo registerReferenceProviders(PsiReferenceRegistrar) dove sarà in grado di chiamare registry.registerReferenceProvider(XmlTag.class, provider).

Infine, l'istanza di PsiReferenceProvider, si dovrà verificare il nome del tag per filtrare i tag che non contengono riferimenti alle classi, quindi trovare the right Java class utilizzando JavaPsiFacade.findClass().

Dalla mia esperienza, il posto migliore per ottenere aiuto per quanto riguarda lo sviluppo plugin di IntelliJ è JetBrains' forums.

Problemi correlati