diff --git a/java/java-impl/src/com/intellij/refactoring/safeDelete/usageInfo/SafeDeleteExtendsClassUsageInfo.java b/java/java-impl/src/com/intellij/refactoring/safeDelete/usageInfo/SafeDeleteExtendsClassUsageInfo.java index d11352fed71d..6d7f6c586875 100644 --- a/java/java-impl/src/com/intellij/refactoring/safeDelete/usageInfo/SafeDeleteExtendsClassUsageInfo.java +++ b/java/java-impl/src/com/intellij/refactoring/safeDelete/usageInfo/SafeDeleteExtendsClassUsageInfo.java @@ -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))); } } diff --git a/java/java-tests/testData/refactoring/safeDelete/UsageInExtendsList.java b/java/java-tests/testData/refactoring/safeDelete/UsageInExtendsList.java new file mode 100644 index 000000000000..04c1fba3bdf7 --- /dev/null +++ b/java/java-tests/testData/refactoring/safeDelete/UsageInExtendsList.java @@ -0,0 +1,3 @@ +nterface Foo {} +interface Bar extends Foo {} +class FooBarImpl implements Foo, Bar {} diff --git a/java/java-tests/testData/refactoring/safeDelete/UsageInExtendsList_after.java b/java/java-tests/testData/refactoring/safeDelete/UsageInExtendsList_after.java new file mode 100644 index 000000000000..c1c4f899abe5 --- /dev/null +++ b/java/java-tests/testData/refactoring/safeDelete/UsageInExtendsList_after.java @@ -0,0 +1,3 @@ +nterface Foo {} + +class FooBarImpl implements Foo {} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/SafeDeleteTest.java b/java/java-tests/testSrc/com/intellij/refactoring/SafeDeleteTest.java index 9c1cf4915312..27d78094281e 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/SafeDeleteTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/SafeDeleteTest.java @@ -65,6 +65,10 @@ public class SafeDeleteTest extends MultiFileTestCase { doTest("IFoo"); } + public void testUsageInExtendsList() throws Exception { + doSingleFileTest(); + } + public void testParameterInHierarchy() throws Exception { myDoCompare = false; doTest("C2");