diff --git a/java/java-impl/src/com/intellij/refactoring/turnRefsToSuper/TurnRefsToSuperProcessorBase.java b/java/java-impl/src/com/intellij/refactoring/turnRefsToSuper/TurnRefsToSuperProcessorBase.java index b595e89c15e0..d53a3bf6c193 100644 --- a/java/java-impl/src/com/intellij/refactoring/turnRefsToSuper/TurnRefsToSuperProcessorBase.java +++ b/java/java-impl/src/com/intellij/refactoring/turnRefsToSuper/TurnRefsToSuperProcessorBase.java @@ -584,6 +584,7 @@ public abstract class TurnRefsToSuperProcessorBase extends BaseRefactoringProces public void linkInheritors(final PsiMethod[] methods) { for (final PsiMethod superMethod : methods) { final PsiTypeElement superType = superMethod.getReturnTypeElement(); + if (superType == null) continue; addLink(superType, returnType); addLink(returnType, superType); } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/GrTurnRefsToSuperTest.java b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/GrTurnRefsToSuperTest.java new file mode 100644 index 000000000000..f6bb75b4379d --- /dev/null +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/GrTurnRefsToSuperTest.java @@ -0,0 +1,56 @@ +/* + * Copyright 2000-2016 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. + */ +package org.jetbrains.plugins.groovy.refactoring; + +import com.intellij.openapi.fileEditor.FileDocumentManager; +import com.intellij.psi.PsiClass; +import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.refactoring.MultiFileTestCase; +import com.intellij.refactoring.turnRefsToSuper.TurnRefsToSuperProcessor; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.plugins.groovy.util.TestUtils; + +public class GrTurnRefsToSuperTest extends MultiFileTestCase { + public void testNoReturnType() throws Exception { + doTest("ClassB", "ClassB1", false); + } + + private void doTest(@NonNls final String className, @NonNls final String superClassName, final boolean replaceInstanceOf) throws Exception { + doTest((rootDir, rootAfter) -> this.performAction(className, superClassName, replaceInstanceOf), true); + } + + @NotNull + @Override + public String getTestRoot() { + return "/refactoring/turnRefsToSuper/"; + } + + @Override + protected String getTestDataPath() { + return TestUtils.getAbsoluteTestDataPath(); + } + + private void performAction(final String className, final String superClassName, boolean replaceInstanceOf) { + final PsiClass aClass = myJavaFacade.findClass(className, GlobalSearchScope.allScope(myProject)); + assertNotNull("Class " + className + " not found", aClass); + PsiClass superClass = myJavaFacade.findClass(superClassName, GlobalSearchScope.allScope(myProject)); + assertNotNull("Class " + superClassName + " not found", superClass); + + new TurnRefsToSuperProcessor(myProject, aClass, superClass, replaceInstanceOf).run(); + FileDocumentManager.getInstance().saveAllDocuments(); + } +} diff --git a/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/after/ClassA.groovy b/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/after/ClassA.groovy new file mode 100644 index 000000000000..1fec7cf33a70 --- /dev/null +++ b/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/after/ClassA.groovy @@ -0,0 +1,6 @@ +class ClassA { + ClassB b; + def getB() { + return b; + } +} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/after/ClassB.java b/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/after/ClassB.java new file mode 100644 index 000000000000..131b407e089e --- /dev/null +++ b/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/after/ClassB.java @@ -0,0 +1 @@ +public class ClassB implements ClassB1 {} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/after/ClassB1.java b/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/after/ClassB1.java new file mode 100644 index 000000000000..20f4a15109ee --- /dev/null +++ b/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/after/ClassB1.java @@ -0,0 +1 @@ +public interface ClassB1 {} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/after/ClassC.java b/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/after/ClassC.java new file mode 100644 index 000000000000..fce163d3fdff --- /dev/null +++ b/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/after/ClassC.java @@ -0,0 +1,6 @@ +class ClassC extends ClassA { + @Override + public ClassB1 getB() { + return null; + } +} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/before/ClassA.groovy b/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/before/ClassA.groovy new file mode 100644 index 000000000000..1fec7cf33a70 --- /dev/null +++ b/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/before/ClassA.groovy @@ -0,0 +1,6 @@ +class ClassA { + ClassB b; + def getB() { + return b; + } +} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/before/ClassB.java b/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/before/ClassB.java new file mode 100644 index 000000000000..131b407e089e --- /dev/null +++ b/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/before/ClassB.java @@ -0,0 +1 @@ +public class ClassB implements ClassB1 {} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/before/ClassB1.java b/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/before/ClassB1.java new file mode 100644 index 000000000000..20f4a15109ee --- /dev/null +++ b/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/before/ClassB1.java @@ -0,0 +1 @@ +public interface ClassB1 {} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/before/ClassC.java b/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/before/ClassC.java new file mode 100644 index 000000000000..c199f0c14fa2 --- /dev/null +++ b/plugins/groovy/testdata/refactoring/turnRefsToSuper/noReturnType/before/ClassC.java @@ -0,0 +1,6 @@ +class ClassC extends ClassA { + @Override + public ClassB getB() { + return null; + } +} \ No newline at end of file