safe delete: do not insert additional extends item if already present (IDEA-106144)

This commit is contained in:
anna
2013-04-24 20:52:41 +02:00
parent 2925825f9c
commit b7eff52b83
4 changed files with 16 additions and 1 deletions
@@ -18,6 +18,7 @@ package com.intellij.refactoring.safeDelete.usageInfo;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.psi.*;
import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.util.ArrayUtilRt;
import com.intellij.util.IncorrectOperationException;
/**
@@ -50,15 +51,19 @@ public class SafeDeleteExtendsClassUsageInfo extends SafeDeleteReferenceUsageInf
if (extendsList != null) {
final PsiClassType[] referenceTypes = extendsList.getReferencedTypes();
final PsiReferenceList listToAddExtends = refClass.isInterface() == myExtendingClass.isInterface() ? myExtendingClass.getExtendsList() : extendingImplementsList;
final PsiClassType[] existingRefTypes = listToAddExtends.getReferencedTypes();
for (PsiClassType referenceType : referenceTypes) {
if (ArrayUtilRt.find(existingRefTypes, referenceType) > -1) continue;
listToAddExtends.add(elementFactory.createReferenceElementByType((PsiClassType)mySubstitutor.substitute(referenceType)));
}
}
final PsiReferenceList implementsList = refClass.getImplementsList();
if (implementsList != null) {
final PsiClassType[] referenceTypes = implementsList.getReferencedTypes();
final PsiClassType[] existingRefTypes = extendingImplementsList.getReferencedTypes();
PsiClassType[] referenceTypes = implementsList.getReferencedTypes();
for (PsiClassType referenceType : referenceTypes) {
if (ArrayUtilRt.find(existingRefTypes, referenceType) > -1) continue;
extendingImplementsList.add(elementFactory.createReferenceElementByType((PsiClassType)mySubstitutor.substitute(referenceType)));
}
}