package com.cfsoft.ofbiz.reference.service;
import com.cfsoft.ofbiz.OfbizUtils;
import com.cfsoft.ofbiz.dom.controller.api.Event;
import com.cfsoft.ofbiz.dom.service.api.Service;
import com.cfsoft.ofbiz.facet.OfbizFacet;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReferenceBase;
import com.intellij.psi.xml.XmlAttribute;
import com.intellij.util.xml.DomUtil;
import org.jetbrains.annotations.NotNull;
import java.util.Set;
public class ServiceInvokeReference extends PsiReferenceBase<XmlAttribute> {
public ServiceInvokeReference(@NotNull final XmlAttribute xmlTag) {
super(xmlTag, false);
}
@SuppressWarnings({"unchecked"})
public PsiElement resolve() {
if (OfbizFacet.getInstance(myElement) == null) {
return myElement;
}
final Service service = (Service) DomUtil.getDomElement(myElement.getParent());
PsiElement psiEle = OfbizUtils.getServiceMethod(service);
if (psiEle == null) {
psiEle = OfbizUtils.getServiceSimpleMethodElememnt(service);
}
return psiEle == null ? null : psiEle;
}
@NotNull
@SuppressWarnings({"unchecked"})
public Object[] getVariants() {
if (OfbizFacet.getInstance(myElement) == null) {
return new Object[0];
}
Service service = (Service) DomUtil.getDomElement(myElement.getParent());
Set<String> set = OfbizUtils.getServiceCompleteMethodNames(service);
return set.size() == 0 ? OfbizUtils.getServiceCompleteSimpleMethodNames(service).toArray() : set.toArray();
}
}