void (final XmlTag tag, final PsiReferenceProcessor processor, final PsiPlainTextFile file, final String className) { final XmlAttribute valueAttribute = tag.getAttribute(UIFormXmlConstants.ATTRIBUTE_VALUE, null); if (valueAttribute != null) { PsiReference reference = ReadAction.compute(() -> { final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(file.getProject()); GlobalSearchScope scope = file.getResolveScope(); PsiClass psiClass = psiFacade.findClass(className, scope); if (psiClass != null) { PsiMethod getter = PropertyUtilBase.findPropertyGetter(psiClass, tag.getName(), false, true); if (getter != null) { final PsiType returnType = getter.getReturnType(); if (returnType instanceof PsiClassType propClassType) { PsiClass propClass = propClassType.resolve(); if (propClass != null) { if (propClass.isEnum()) { return new FormEnumConstantReference(file, getValueRange(valueAttribute), propClassType); } PsiClass iconClass = psiFacade.findClass("javax.swing.Icon", scope); if (iconClass != null && InheritanceUtil.isInheritorOrSelf(propClass, iconClass, true)) { return new ResourceFileReference(file, getValueRange(valueAttribute)); } } } } } return null; }); if (reference != null) { if (reference instanceof ResourceFileReference) { processPackageReferences(file, processor, valueAttribute); } processor.execute(reference); } } }