package com.cfsoft.ofbiz.reference; import com.cfsoft.ofbiz.dom.controller.api.*; import com.cfsoft.ofbiz.dom.screen.api.Screen; import com.cfsoft.ofbiz.reference.controller.EventInvokeReference; import com.cfsoft.ofbiz.reference.controller.ResponseValueReference; import com.cfsoft.ofbiz.reference.controller.ViewMapReference; 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 ScreenReferenceContributor extends PsiReferenceContributor { @Override public void registerReferenceProviders(PsiReferenceRegistrar registrar) { registerScreenXmlTags(registrar); } /* PsiReferenceProvider responseReferenceProvider = new PsiReferenceProvider() { @NotNull @Override public PsiReference[] getReferencesByElement(@NotNull PsiElement psiElement, @NotNull ProcessingContext processingContext) { return new PsiReference[]{new ResponseValueReference((XmlAttribute) psiElement)}; } }; PsiReferenceProvider eventReferenceProvider = new PsiReferenceProvider() { @NotNull @Override public PsiReference[] getReferencesByElement(@NotNull PsiElement psiElement, @NotNull ProcessingContext processingContext) { return new PsiReference[]{new EventInvokeReference((XmlAttribute) psiElement)}; } }; PsiReferenceProvider includeLocationReferenceProvider = new PsiReferenceProvider() { @NotNull @Override public PsiReference[] getReferencesByElement(@NotNull PsiElement psiElement, @NotNull ProcessingContext processingContext) { return new PsiReference[]{new ComponentUrlReference((XmlAttribute) psiElement)}; } }; PsiReferenceProvider viewMapPageReferenceProvider = new PsiReferenceProvider() { @NotNull @Override public PsiReference[] getReferencesByElement(@NotNull PsiElement psiElement, @NotNull ProcessingContext processingContext) { return new PsiReference[]{new ViewMapReference((XmlAttribute) psiElement)}; } };*/ private void registerScreenXmlTags(final PsiReferenceRegistrar registrar) { /* registrar.registerReferenceProvider(xmlAttribute().withLocalName("value"). withSuperParent(1, withDom(domElement(Response.class))), responseReferenceProvider); registrar.registerReferenceProvider(xmlAttribute().withLocalName("invoke"). withSuperParent(1, withDom(domElement(Event.class))), eventReferenceProvider); registrar.registerReferenceProvider(xmlAttribute().withLocalName("page"). withSuperParent(1, withDom(domElement(ViewMap.class))), viewMapPageReferenceProvider);*/ registrar.registerReferenceProvider(xmlAttribute().withLocalName("location"). inside(withDom(domElement(Screen.class))), new PsiReferenceProvider() { @NotNull @Override public PsiReference[] getReferencesByElement(@NotNull PsiElement psiElement, @NotNull ProcessingContext processingContext) { return new PsiReference[]{new ComponentUrlReference((XmlAttribute) psiElement, null)}; } }); } }