diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/interfacetoclass/ConvertInterfaceToClassIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/interfacetoclass/ConvertInterfaceToClassIntention.java index a806e9ba0e47..f3d69dee0c5a 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/interfacetoclass/ConvertInterfaceToClassIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/interfacetoclass/ConvertInterfaceToClassIntention.java @@ -106,7 +106,7 @@ public class ConvertInterfaceToClassIntention extends Intention { final PsiClass anInterface = (PsiClass)element.getParent(); final SearchScope searchScope = anInterface.getUseScope(); final Query query = ClassInheritorsSearch.search(anInterface, searchScope, false); - final MultiMap conflicts = new MultiMap(); + final MultiMap conflicts = new MultiMap(); query.forEach(new Processor() { @Override public boolean process(PsiClass aClass) { @@ -180,11 +180,14 @@ public class ConvertInterfaceToClassIntention extends Intention { final PsiReferenceList extendsList = anInterface.getExtendsList(); final PsiReferenceList implementsList = anInterface.getImplementsList(); assert extendsList != null; - final PsiJavaCodeReferenceElement[] referenceElements = extendsList.getReferenceElements(); - for (PsiJavaCodeReferenceElement referenceElement : referenceElements) { + final PsiJavaCodeReferenceElement[] extendsRefElements = extendsList.getReferenceElements(); + for (PsiJavaCodeReferenceElement referenceElement : extendsRefElements) { assert implementsList != null; - implementsList.add(referenceElement); - referenceElement.delete(); + final PsiElement resolved = referenceElement.resolve(); + if (resolved instanceof PsiClass && ((PsiClass)resolved).isInterface()) { + implementsList.add(referenceElement); + referenceElement.delete(); + } } } diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/interfaceToClass/InterfaceExtendsClass.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/interfaceToClass/InterfaceExtendsClass.java new file mode 100644 index 000000000000..121a30d83524 --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/interfaceToClass/InterfaceExtendsClass.java @@ -0,0 +1,23 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +abstract class Foo { + +} + +interface Bar extends Foo { + +} + diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/interfaceToClass/InterfaceExtendsClass_after.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/interfaceToClass/InterfaceExtendsClass_after.java new file mode 100644 index 000000000000..2b708b2d7a67 --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/interfaceToClass/InterfaceExtendsClass_after.java @@ -0,0 +1,23 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +abstract class Foo { + +} + +abstract class Bar extends Foo { + +} + diff --git a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/interfacetoclass/ConvertInterfaceToClassTest.java b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/interfacetoclass/ConvertInterfaceToClassTest.java index c74f136872cb..b33a66c8fa4c 100644 --- a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/interfacetoclass/ConvertInterfaceToClassTest.java +++ b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/interfacetoclass/ConvertInterfaceToClassTest.java @@ -24,6 +24,7 @@ public class ConvertInterfaceToClassTest extends IPPTestCase { public void testExtensionMethods() { doTest(); } public void testInnerInterface() { doTest(); } public void testStaticMethods() { doTest(); } + public void testInterfaceExtendsClass() { doTest(); } public void testFunctionalExpressions() { try { doTest();