@Override @NotNull protected UsageInfo[] findUsages() { List<UsageInfo> usages = Collections.synchronizedList(new ArrayList<UsageInfo>()); for (PsiElement element : myElements) { boolean handled = false; for (SafeDeleteProcessorDelegate delegate : Extensions.getExtensions(SafeDeleteProcessorDelegate.EP_NAME)) { if (delegate.handlesElement(element)) { final NonCodeUsageSearchInfo filter = delegate.findUsages(element, myElements, usages); if (filter != null) { for (PsiElement nonCodeUsageElement : filter.getElementsToSearch()) { addNonCodeUsages( nonCodeUsageElement, usages, filter.getInsideDeletedCondition(), mySearchNonJava, mySearchInCommentsAndStrings); } } handled = true; break; } } if (!handled && element instanceof PsiNamedElement) { findGenericElementUsages(element, usages, myElements); addNonCodeUsages( element, usages, getDefaultInsideDeletedCondition(myElements), mySearchNonJava, mySearchInCommentsAndStrings); } } final UsageInfo[] result = usages.toArray(new UsageInfo[usages.size()]); return UsageViewUtil.removeDuplicatedUsages(result); }