void (@NotNull Project project, PsiElement @NotNull [] refs, ReferenceData @NotNull [] referenceData) { PsiManager manager = PsiManager.getInstance(project); ArrayList<Object> array = new ArrayList<>(); Object[] refObjects = new Object[refs.length]; for (int i = 0; i < referenceData.length; i++) { PsiElement ref = refs[i]; if (ref != null) { LOG.assertTrue(ref.isValid()); ReferenceData data = referenceData[i]; PsiClass refClass = JavaPsiFacade.getInstance(manager.getProject()).findClass(data.qClassName, ref.getResolveScope()); if (refClass == null) continue; Object refObject = refClass; if (data.staticMemberName != null) { //Show static members as Strings refObject = refClass.getQualifiedName() + "." + data.staticMemberName; } refObjects[i] = refObject; if (!array.contains(refObject)) { array.add(refObject); } } } if (array.isEmpty()) return; Object[] selectedObjects = ArrayUtil.toObjectArray(array); Arrays.sort(selectedObjects, (o1, o2) -> getFQName(o1).compareToIgnoreCase(getFQName(o2))); RestoreReferencesDialog dialog = new RestoreReferencesDialog(project, selectedObjects); dialog.show(); selectedObjects = dialog.getSelectedElements(); for (int i = 0; i < referenceData.length; i++) { PsiElement ref = refs[i]; if (ref != null) { PsiUtilCore.ensureValid(ref); Object refObject = refObjects[i]; boolean found = false; for (Object selected : selectedObjects) { if (Comparing.equal(refObject, selected)) { found = true; break; } } if (!found) { refs[i] = null; } } } }