void (@NotNull PsiReferenceRegistrar registrar) { UastReferenceRegistrar.registerUastReferenceProvider( registrar, UastPatterns.injectionHostUExpression() .sourcePsiFilter(psi -> PsiUtil.isPluginProject(psi.getProject())) .annotationParam(Presentation.class.getName(), "icon"), UastReferenceRegistrar.uastInjectionHostReferenceProvider((uElement, referencePsiElement) -> new PsiReference[]{ new IconPsiReferenceBase(referencePsiElement) { @Override public PsiElement resolve() { String value = UastUtils.evaluateString(uElement); return resolveIconPath(value, referencePsiElement); } @Override public PsiElement handleElementRename(@NotNull String newElementName) throws IncorrectOperationException { PsiElement field = resolve(); PsiElement result = handleElement(field, newElementName); if (result != null) { return result; } return super.handleElementRename(newElementName); } private @Nullable PsiElement handleElement(PsiElement element, @Nullable String newElementName) { if (element instanceof PsiField) { PsiClass containingClass = ((PsiField)element).getContainingClass(); if (containingClass != null) { String classQualifiedName = containingClass.getQualifiedName(); if (classQualifiedName != null) { if (newElementName == null) { newElementName = ((PsiField)element).getName(); } if (classQualifiedName.startsWith(COM_INTELLIJ_ICONS_PREFIX)) { return replace(newElementName, classQualifiedName, COM_INTELLIJ_ICONS_PREFIX); } if (classQualifiedName.startsWith(ICONS_PACKAGE_PREFIX)) { return replace(newElementName, classQualifiedName, ICONS_PACKAGE_PREFIX); } return ElementManipulators.handleContentChange(myElement, classQualifiedName + "." + newElementName); } } } return null; } private PsiElement replace(@NonNls String newElementName, @NonNls String fqn, @NonNls String packageName) { String newValue = fqn.substring(packageName.length()) + "." + newElementName; return ElementManipulators.handleContentChange(getElement(), newValue); } } }), PsiReferenceRegistrar.HIGHER_PRIORITY); }