2013-01-08 26 views
5

Tôi có định dạng XML tùy chỉnh liên kết với các tài nguyên Java. Để đơn giản, hãy giả sử tệp XML của tôi sẽ trông như sau:Làm cho IntelliJ nhận biết được các liên kết đến các phần tử Java trong các tệp XML

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

Cuối cùng, tham chiếu của tôi sẽ phức tạp hơn một chút. Nó sẽ không chứa tên lớp đầy đủ trực tiếp và tôi sẽ cần một số logic để giải quyết lớp đúng, nhưng tôi muốn giữ ví dụ đơn giản nhất có thể tại đây.

Bây giờ tôi muốn có thể Strg + Nhấp vào văn bản của phần tử và muốn IntelliJ mang tôi đến tệp .java, giống như có thể trong tệp Spring-XML. Trong số IDEA Plugin Development FAQ, có một liên kết có tên "How do I add custom references to Java elements in XML files?" có rất nhiều âm thanh giống như chính xác những gì tôi cần. Thật không may nó liên kết đến một cuộc thảo luận, nơi một người nào đó là nhiều hơn hoặc ít hơn thực hiện thực hiện một cái gì đó như thế này, có một số vấn đề nhỏ. Tuy nhiên tôi hiểu rằng tôi có thể cần phải viết một thực hiện của giao diện com.intellij.psi.PsiReference. Googling cho "PsiReference" và "IntelliJ" hoặc "IDEA" không may không đưa ra bất kỳ hướng dẫn về cách sử dụng nó, nhưng tôi tìm thấy các lớp học XmlValueReference mà âm thanh hữu ích. Tuy nhiên, một lần nữa googling cho "XmlValueReference" đã không bật lên bất cứ điều gì hữu ích về cách sử dụng lớp. Ít nhất là PSI Cookbook cho tôi biết rằng tôi có thể tìm thấy lớp Java bằng cách sử dụng JavaPsiFacade.findClass(). Tôi muốn biết ơn đối với bất kỳ hướng dẫn, gợi ý và những điều tương tự, cho biết cách sử dụng chính xác.

Cuộc thảo luận được liên kết ở trên đề cập đến việc tôi cần gọi registry.registerReferenceProvider(XmlTag.class, provider) để đăng ký nhà cung cấp của mình sau khi tôi đã thực hiện nó, nhưng loại nào là "đăng ký" và tôi lấy nó ở đâu?

Trả lời

4

Trước hết, đây là số nice tutorial đã xuất hiện cách đây vài ngày, giải thích các khái niệm cơ bản về phát triển plugin IntelliJ (bạn nên xem phần Reference Contributor).

Bạn có thể sẽ phải xác định riêng bạn PsiReferenceContributor, mà sẽ được tham chiếu trong plugin.xml của bạn như thế này:

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

Trong đóng góp tài liệu tham khảo của bạn, có một phương pháp registerReferenceProviders(PsiReferenceRegistrar) nơi bạn sẽ có thể gọi registry.registerReferenceProvider(XmlTag.class, provider).

Cuối cùng, trong trường hợp PsiReferenceProvider, bạn sẽ phải kiểm tra tên thẻ để lọc ra các thẻ không chứa tham chiếu lớp học, sau đó tìm the right Java class sử dụng JavaPsiFacade.findClass().

Từ kinh nghiệm của tôi, nơi tốt nhất để nhận trợ giúp về phát triển plugin IntelliJ là JetBrains' forums.

Các vấn đề liên quan