Ich habe ein benutzerdefiniertes XML-Format, das auf Java-Ressourcen verweist. Der Einfachheit halber nehmen wir an, dass meine XML-Datei wie folgt aussehen würde:Machen Sie IntelliJ auf Links zu Java-Elementen in XML-Dateien aufmerksam.
<root>
<java-class>my.fully.qualified.class.name</java-class>
</root>
Schließlich werden meine Referenzen etwas komplizierter sein. Es wird den voll qualifizierten Klassennamen nicht direkt enthalten und ich werde Logik brauchen, um die richtige Klasse aufzulösen, aber ich möchte das Beispiel hier so einfach wie möglich halten.
Jetzt möchte ich es möglich sein, Strg + Klicken Sie auf den Text des Elements und möchte IntelliJ mich in die .java-Datei zu tragen, genau wie es in Spring-XML-Dateien möglich ist. In der IDEA Plugin Development FAQ gibt es einen Link namens "How do I add custom references to Java elements in XML files?", der so viel wie genau das klingt, was ich brauche. Leider verlinkt es auf eine Diskussion, bei der jemand mehr oder weniger damit beschäftigt ist, etwas ähnliches zu implementieren und kleinere Probleme zu haben. Trotzdem habe ich verstanden, dass ich wahrscheinlich eine Implementierung der Schnittstelle com.intellij.psi.PsiReference schreiben muss. Googling für "PsiReference" und "IntelliJ" oder "IDEA" brachte leider keine Tutorials zur Benutzung, aber ich fand die Klasse XmlValueReference, die sich nützlich anhört. Das erneute Durchsuchen nach "XmlValueReference" ergab nichts Nützliches zur Verwendung der Klasse. Zumindest die PSI Cookbook sagt mir, dass ich die Java-Klasse mit JavaPsiFacade.findClass()
finden kann. Ich wäre dankbar für Tutorials, Hinweise und ähnliches, die die korrekte Verwendung erklären.
Die oben verlinkte Diskussion erwähnt, dass ich registry.registerReferenceProvider(XmlTag.class, provider)
aufrufen muss, um meinen Anbieter zu registrieren, sobald ich es schließlich implementieren konnte, aber welcher Typ ist "Registrierung" und woher bekomme ich es?