diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/interfacetoclass/ConvertInterfaceToClassIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/interfacetoclass/ConvertInterfaceToClassIntention.java index 8925761987d5..f636975ecf2e 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/interfacetoclass/ConvertInterfaceToClassIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/interfacetoclass/ConvertInterfaceToClassIntention.java @@ -191,25 +191,21 @@ public class ConvertInterfaceToClassIntention extends Intention { } private static void moveSubClassImplementsToExtends(PsiClass oldInterface, Collection inheritors) { - final PsiJavaCodeReferenceElement oldInterfaceReference = - JavaPsiFacade.getElementFactory(oldInterface.getProject()).createClassReferenceElement(oldInterface); for (PsiClass inheritor : inheritors) { final PsiReferenceList implementsList = inheritor.getImplementsList(); final PsiReferenceList extendsList = inheritor.getExtendsList(); if (implementsList != null) { - moveReference(implementsList, extendsList, oldInterfaceReference); + moveReference(implementsList, extendsList, oldInterface); } } } private static void moveReference(@NotNull PsiReferenceList source, @Nullable PsiReferenceList target, - @NotNull PsiJavaCodeReferenceElement reference) { + @NotNull PsiClass oldInterface) { final PsiJavaCodeReferenceElement[] implementsReferences = source.getReferenceElements(); - final String qualifiedName = reference.getQualifiedName(); for (PsiJavaCodeReferenceElement implementsReference : implementsReferences) { - final String implementsReferenceQualifiedName = implementsReference.getQualifiedName(); - if (qualifiedName.equals(implementsReferenceQualifiedName)) { + if (implementsReference.isReferenceTo(oldInterface)) { if (target != null) { final PsiJavaCodeReferenceElement[] referenceElements = target.getReferenceElements(); if (referenceElements.length > 0) { diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/interfaceToClass/LocalInterface.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/interfaceToClass/LocalInterface.java new file mode 100644 index 000000000000..48338fc1efdd --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/interfaceToClass/LocalInterface.java @@ -0,0 +1,7 @@ +class A { + void foo() { + interface Local {} + class X implements Local {} + class X1 implements Cloneable, Local {} + } +} \ No newline at end of file diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/interfaceToClass/LocalInterface_after.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/interfaceToClass/LocalInterface_after.java new file mode 100644 index 000000000000..ebcfefec6e0a --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/interfaceToClass/LocalInterface_after.java @@ -0,0 +1,7 @@ +class A { + void foo() { + abstract class Local {} + class X extends Local {} + class X1 extends Local implements Cloneable {} + } +} \ No newline at end of file diff --git a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/interfacetoclass/ConvertInterfaceToClassTest.java b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/interfacetoclass/ConvertInterfaceToClassTest.java index 9ff2be49f31a..205cd8890cd7 100644 --- a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/interfacetoclass/ConvertInterfaceToClassTest.java +++ b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/interfacetoclass/ConvertInterfaceToClassTest.java @@ -13,6 +13,7 @@ public class ConvertInterfaceToClassTest extends IPPTestCase { public void testInnerInterface() { doTest(); } public void testStaticMethods() { doTest(); } public void testInterfaceExtendsClass() { doTest(); } + public void testLocalInterface() { doTest(); } public void testFunctionalExpressions() { try { @@ -54,6 +55,6 @@ public class ConvertInterfaceToClassTest extends IPPTestCase { @NotNull @Override protected LightProjectDescriptor getProjectDescriptor() { - return JAVA_8; + return JAVA_15; } }