2013-01-08 11 views
5

Mam niestandardowy format XML, który łączy się z zasobami Java. Dla uproszczenia załóżmy, że mój plik XML będzie wyglądać następująco:Uczyń z IntelliJ łącza do elementów Java w plikach XML

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

Ostatecznie moje referencje będzie nieco bardziej skomplikowana. Nie będzie zawierał w pełni kwalifikowanej nazwy klasy i potrzebuję trochę logiki, aby rozwiązać właściwą klasę, ale chcę, aby przykład był tak prosty jak to tylko możliwe.

Teraz chcę, żeby było możliwe Strg + Kliknij na tekst elementu i poproś IntelliJ o przeniesienie mnie do pliku .java, tak jak to jest możliwe w plikach Spring-XML. W numerze IDEA Plugin Development FAQ znajduje się łącze o nazwie "How do I add custom references to Java elements in XML files?", które brzmi tak, jak dokładnie to, czego potrzebuję. Niestety łączy się to z dyskusją, w której ktoś jest mniej lub bardziej zaangażowany w realizację czegoś podobnego, mając pewne drobne problemy. Niemniej jednak zrozumiałem, że prawdopodobnie muszę napisać implementację interfejsu com.intellij.psi.PsiReference. Googling dla "PsiReference" i "IntelliJ" lub "IDEA" niestety nie przyniósł żadnych tutoriali, jak go używać, ale znalazłem klasę XmlValueReference, która wydaje się przydatna. Jeszcze raz użycie go w "XmlValueReference" nie przyniosło pożytku z używania klasy. Przynajmniej PSI Cookbook mówi mi, że mogę znaleźć klasy Java przy użyciu JavaPsiFacade.findClass(). Byłbym wdzięczny za wszelkie tutoriale, wskazówki i tym podobne, które mówią poprawne użycie.

Powyższa połączona dyskusja wspomina, że ​​muszę zadzwonić pod numer registry.registerReferenceProvider(XmlTag.class, provider), aby zarejestrować dostawcę, gdy w końcu zdołałem go wdrożyć, ale którego typu to "rejestr" i skąd go pobrać?

Odpowiedz

4

Przede wszystkim jest tutaj nice tutorial, który pojawił się kilka dni temu, co wyjaśnia podstawy rozwoju wtyczki IntelliJ (powinieneś zajrzeć do sekcji Reference Contributor).

Najprawdopodobniej trzeba zdefiniować własne PsiReferenceContributor, który zostanie wymieniony w swojej plugin.xml tak:

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

w twojej specjalista odniesienia, istnieje metoda registerReferenceProviders(PsiReferenceRegistrar) gdzie będzie można zadzwonić registry.registerReferenceProvider(XmlTag.class, provider).

Wreszcie w swoim wystąpieniu PsiReferenceProvider, trzeba będzie przetestować nazwę znacznika odfiltrować znaczniki, które nie zawierają odniesień klasowych, a następnie znaleźć the right Java class użyciu JavaPsiFacade.findClass().

Z mojego doświadczenia wynika, że ​​najlepszym miejscem, aby uzyskać pomoc dotyczącą rozwoju wtyczki IntelliJ jest JetBrains' forums.

Powiązane problemy