package com.cfsoft.ofbiz.reference; import com.cfsoft.ofbiz.dom.service.api.Service; import com.cfsoft.ofbiz.reference.service.ServiceInvokeReference; import com.cfsoft.ofbiz.reference.service.ServiceLocationReference; import com.cfsoft.ofbiz.reference.service.ServiceReference; import com.intellij.psi.*; import com.intellij.psi.xml.XmlAttribute; import com.intellij.util.ProcessingContext; import org.jetbrains.annotations.NotNull; import static com.intellij.patterns.DomPatterns.domElement; import static com.intellij.patterns.DomPatterns.withDom; import static com.intellij.patterns.XmlPatterns.xmlAttribute; public class ServiceReferenceContributor extends PsiReferenceContributor { @Override public void registerReferenceProviders(PsiReferenceRegistrar registrar) { registerControllerXmlTags(registrar); } PsiReferenceProvider serviceInvokeReferenceProvider = new PsiReferenceProvider() { @NotNull @Override public PsiReference[] getReferencesByElement(@NotNull PsiElement psiElement, @NotNull ProcessingContext processingContext) { return new PsiReference[]{new ServiceInvokeReference((XmlAttribute) psiElement)}; } }; PsiReferenceProvider serviceLocationReferenceProvider = new PsiReferenceProvider() { @NotNull @Override public PsiReference[] getReferencesByElement(@NotNull PsiElement psiElement, @NotNull ProcessingContext processingContext) { return new PsiReference[]{new ServiceLocationReference((XmlAttribute) psiElement)}; } }; private void registerControllerXmlTags(final PsiReferenceRegistrar registrar) { /* registrar.registerReferenceProvider(xmlAttribute().withLocalName("invoke"). withSuperParent(1, withDom(domElement(Service.class))), serviceInvokeReferenceProvider); registrar.registerReferenceProvider(xmlAttribute().withLocalName("location"). withSuperParent(1, withDom(domElement(Service.class))), serviceLocationReferenceProvider);*/ registrar.registerReferenceProvider(xmlAttribute(). withSuperParent(1, withDom(domElement(Service.class))), new PsiReferenceProvider() { @NotNull @Override public PsiReference[] getReferencesByElement(@NotNull PsiElement psiElement, @NotNull ProcessingContext processingContext) { return new PsiReference[]{new ServiceReference((XmlAttribute) psiElement)}; } }); } }