diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/rename/RenameKotlinFunctionProcessor.kt b/idea/src/org/jetbrains/jet/plugin/refactoring/rename/RenameKotlinFunctionProcessor.kt index 8cf2f29b700..3aeef0a5962 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/rename/RenameKotlinFunctionProcessor.kt +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/rename/RenameKotlinFunctionProcessor.kt @@ -45,7 +45,7 @@ public class RenameKotlinFunctionProcessor : RenamePsiElementProcessor() { } override fun canProcessElement(element: PsiElement): Boolean { - return element is JetNamedFunction || element is KotlinLightMethod + return element is JetNamedFunction || (element is KotlinLightMethod && element.getOrigin() is JetNamedFunction) } override fun substituteElementToRename(element: PsiElement?, editor: Editor?): PsiElement? { @@ -56,7 +56,12 @@ public class RenameKotlinFunctionProcessor : RenamePsiElementProcessor() { } // Use java dialog to ask we should rename function with the base element - return unwrapPsiMethod(javaMethodProcessorInstance.substituteElementToRename(wrappedMethod, editor)) + val subtitudedJavaElement = javaMethodProcessorInstance.substituteElementToRename(wrappedMethod, editor) + + return when (subtitudedJavaElement) { + is KotlinLightMethod -> subtitudedJavaElement.getOrigin() as? JetNamedFunction + else -> subtitudedJavaElement + } } override fun prepareRenaming(element: PsiElement?, newName: String?, allRenames: MutableMap, scope: SearchScope) { @@ -68,8 +73,4 @@ public class RenameKotlinFunctionProcessor : RenamePsiElementProcessor() { is JetNamedFunction -> ApplicationManager.getApplication()!!.runReadAction(Computable { LightClassUtil.getLightClassMethod(element) }) else -> throw IllegalStateException("Can't be for element $element there because of canProcessElement()") } - - private fun unwrapPsiMethod(element: PsiElement?): JetNamedFunction? { - return (element as? KotlinLightMethod)?.getOrigin() as? JetNamedFunction - } } diff --git a/idea/testData/refactoring/rename/renameJavaMethod/after/MethodUsages.kt b/idea/testData/refactoring/rename/renameJavaMethod/after/MethodUsages.kt new file mode 100644 index 00000000000..c53325ddf96 --- /dev/null +++ b/idea/testData/refactoring/rename/renameJavaMethod/after/MethodUsages.kt @@ -0,0 +1,12 @@ +package testing.kotlin + +import testing.JavaClass + +class KotlinClass: JavaClass() { + override fun bar(): String = "Override" +} + +fun usages() { + val a = JavaClass().bar() + val b = KotlinClass().bar() +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameJavaMethod/after/testing/JavaClass.java b/idea/testData/refactoring/rename/renameJavaMethod/after/testing/JavaClass.java new file mode 100644 index 00000000000..af3883e501f --- /dev/null +++ b/idea/testData/refactoring/rename/renameJavaMethod/after/testing/JavaClass.java @@ -0,0 +1,7 @@ +package testing; + +public class JavaClass { + public String bar() { + return "Test"; + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameJavaMethod/before/MethodUsages.kt b/idea/testData/refactoring/rename/renameJavaMethod/before/MethodUsages.kt new file mode 100644 index 00000000000..20423f75a58 --- /dev/null +++ b/idea/testData/refactoring/rename/renameJavaMethod/before/MethodUsages.kt @@ -0,0 +1,12 @@ +package testing.kotlin + +import testing.JavaClass + +class KotlinClass: JavaClass() { + override fun foo(): String = "Override" +} + +fun usages() { + val a = JavaClass().foo() + val b = KotlinClass().foo() +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameJavaMethod/before/testing/JavaClass.java b/idea/testData/refactoring/rename/renameJavaMethod/before/testing/JavaClass.java new file mode 100644 index 00000000000..a5703408b18 --- /dev/null +++ b/idea/testData/refactoring/rename/renameJavaMethod/before/testing/JavaClass.java @@ -0,0 +1,7 @@ +package testing; + +public class JavaClass { + public String foo() { + return "Test"; + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameJavaMethod/javaBaseMethod.test b/idea/testData/refactoring/rename/renameJavaMethod/javaBaseMethod.test new file mode 100644 index 00000000000..98a1141e76b --- /dev/null +++ b/idea/testData/refactoring/rename/renameJavaMethod/javaBaseMethod.test @@ -0,0 +1 @@ +// RENAME: JAVA_METHOD->testing.JavaClass->String foo()->bar \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameJavaMethod/kotlinOverridenMethod.test b/idea/testData/refactoring/rename/renameJavaMethod/kotlinOverridenMethod.test new file mode 100644 index 00000000000..4bb32bec920 --- /dev/null +++ b/idea/testData/refactoring/rename/renameJavaMethod/kotlinOverridenMethod.test @@ -0,0 +1,2 @@ +// RENAME: KOTLIN_FUNCTION->testing.kotlin.KotlinClass.foo->bar +// FILE: MethodUsages.kt \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/refactoring/rename/RenameTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/refactoring/rename/RenameTestGenerated.java index f0cc8186f6e..bbb475f36fc 100644 --- a/idea/tests/org/jetbrains/jet/plugin/refactoring/rename/RenameTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/refactoring/rename/RenameTestGenerated.java @@ -46,6 +46,16 @@ public class RenameTestGenerated extends AbstractRenameTest { doTest("idea/testData/refactoring/rename/renameJavaInterface/renameJavaInterface.test"); } + @TestMetadata("renameJavaMethod/javaBaseMethod.test") + public void testRenameJavaMethod_JavaBaseMethod() throws Exception { + doTest("idea/testData/refactoring/rename/renameJavaMethod/javaBaseMethod.test"); + } + + @TestMetadata("renameJavaMethod/kotlinOverridenMethod.test") + public void testRenameJavaMethod_KotlinOverridenMethod() throws Exception { + doTest("idea/testData/refactoring/rename/renameJavaMethod/kotlinOverridenMethod.test"); + } + @TestMetadata("renameKotlinBaseMethod/javaWrapperForBaseFunction.test") public void testRenameKotlinBaseMethod_JavaWrapperForBaseFunction() throws Exception { doTest("idea/testData/refactoring/rename/renameKotlinBaseMethod/javaWrapperForBaseFunction.test");