void (final XmlTag tag, final PsiReference classReference, final PsiPlainTextFile file, final PsiReferenceProcessor processor) { final XmlAttribute clsAttribute = tag.getAttribute(UIFormXmlConstants.ATTRIBUTE_CLASS, null); final String classNameStr = clsAttribute != null? clsAttribute.getValue().replace('$','.') : null; // field { final XmlAttribute bindingAttribute = tag.getAttribute(UIFormXmlConstants.ATTRIBUTE_BINDING, null); if (bindingAttribute != null && classReference != null) { final XmlAttribute customCreateAttribute = tag.getAttribute(UIFormXmlConstants.ATTRIBUTE_CUSTOM_CREATE, null); boolean customCreate = (customCreateAttribute != null && Boolean.parseBoolean(customCreateAttribute.getValue())); final TextRange nameRange = clsAttribute != null ? getValueRange(clsAttribute) : null; processor.execute(new FieldFormReference(file, classReference, getValueRange(bindingAttribute), classNameStr, nameRange, customCreate)); } final XmlAttribute titleBundleAttribute = tag.getAttribute(UIFormXmlConstants.ATTRIBUTE_TITLE_RESOURCE_BUNDLE, null); final XmlAttribute titleKeyAttribute = tag.getAttribute(UIFormXmlConstants.ATTRIBUTE_TITLE_KEY, null); if (titleBundleAttribute != null && titleKeyAttribute != null) { processResourceBundleFileReferences(file, processor, titleBundleAttribute); processor.execute(new ResourceBundleKeyReference(file, titleBundleAttribute.getValue(), getValueRange(titleKeyAttribute))); } final XmlAttribute bundleAttribute = tag.getAttribute(UIFormXmlConstants.ATTRIBUTE_RESOURCE_BUNDLE, null); final XmlAttribute keyAttribute = tag.getAttribute(UIFormXmlConstants.ATTRIBUTE_KEY, null); if (bundleAttribute != null && keyAttribute != null) { processResourceBundleFileReferences(file, processor, bundleAttribute); processor.execute(new ResourceBundleKeyReference(file, bundleAttribute.getValue(), getValueRange(keyAttribute))); } processNestedFormReference(tag, processor, file); processButtonGroupReference(tag, processor, file, classReference); } // component class { if (clsAttribute != null) { final JavaClassReferenceProvider provider = new JavaClassReferenceProvider(); final PsiReference[] referencesByString = provider.getReferencesByString(classNameStr, file, clsAttribute.getValueElement().getTextRange().getStartOffset() + 1); if(referencesByString.length < 1){ // There are no references there return; } for (PsiReference aReferencesByString : referencesByString) { processor.execute(aReferencesByString); } } } // property references XmlTag parentTag = tag.getParentTag(); if (parentTag != null && parentTag.getName().equals(UIFormXmlConstants.ELEMENT_PROPERTIES)) { XmlTag componentTag = parentTag.getParentTag(); if (componentTag != null) { String className = componentTag.getAttributeValue(UIFormXmlConstants.ATTRIBUTE_CLASS, Utils.FORM_NAMESPACE); if (className != null) { processPropertyReference(tag, processor, file, className.replace('$', '.')); } } } final XmlTag[] subtags = tag.getSubTags(); for (XmlTag subtag : subtags) { processReferences(subtag, classReference, file, processor); } }