From 1d8786dabf6e4bf5d3d7cff9a4d80e11648481d6 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 29 Apr 2015 20:09:17 +0200 Subject: [PATCH] allow renaming functions which are members of anonymous objects #KT-5857 Fixed --- .../rename/RenameKotlinFunctionProcessor.kt | 8 +++++--- .../rename/simpleNameReference/localFunction.kt | 16 ++++++++++++++++ .../simpleNameReference/localFunction.kt.after | 16 ++++++++++++++++ .../rename/SimpleNameReferenceRenameTest.java | 4 ++++ 4 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 idea/testData/refactoring/rename/simpleNameReference/localFunction.kt create mode 100644 idea/testData/refactoring/rename/simpleNameReference/localFunction.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFunctionProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFunctionProcessor.kt index 2af8af347b3..34a97eef4e9 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFunctionProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFunctionProcessor.kt @@ -44,8 +44,7 @@ public class RenameKotlinFunctionProcessor : RenameKotlinPsiProcessor() { override fun substituteElementToRename(element: PsiElement?, editor: Editor?): PsiElement? { val wrappedMethod = wrapPsiMethod(element) if (wrappedMethod == null) { - // Cancel rename - return null + return element } // Use java dialog to ask we should rename function with the base element @@ -58,7 +57,10 @@ public class RenameKotlinFunctionProcessor : RenameKotlinPsiProcessor() { } override fun prepareRenaming(element: PsiElement?, newName: String?, allRenames: MutableMap, scope: SearchScope) { - javaMethodProcessorInstance.prepareRenaming(wrapPsiMethod(element), newName, allRenames, scope) + val psiMethod = wrapPsiMethod(element) + if (psiMethod?.getContainingClass() != null) { + javaMethodProcessorInstance.prepareRenaming(psiMethod, newName, allRenames, scope) + } } private fun wrapPsiMethod(element: PsiElement?): PsiMethod? = when (element) { diff --git a/idea/testData/refactoring/rename/simpleNameReference/localFunction.kt b/idea/testData/refactoring/rename/simpleNameReference/localFunction.kt new file mode 100644 index 00000000000..6e18cfdb4da --- /dev/null +++ b/idea/testData/refactoring/rename/simpleNameReference/localFunction.kt @@ -0,0 +1,16 @@ +class X { + fun fn() : Iterator = object : Iterator { + override fun next(): String { + dddd() + return "" + } + + override fun hasNext(): Boolean { + return false + } + + fun dddd() { // try renaming this function + + } + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/simpleNameReference/localFunction.kt.after b/idea/testData/refactoring/rename/simpleNameReference/localFunction.kt.after new file mode 100644 index 00000000000..27b0d50825a --- /dev/null +++ b/idea/testData/refactoring/rename/simpleNameReference/localFunction.kt.after @@ -0,0 +1,16 @@ +class X { + fun fn() : Iterator = object : Iterator { + override fun next(): String { + xyzzy() + return "" + } + + override fun hasNext(): Boolean { + return false + } + + fun xyzzy() { // try renaming this function + + } + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/SimpleNameReferenceRenameTest.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/SimpleNameReferenceRenameTest.java index 802361a0b22..9c9374f1570 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/SimpleNameReferenceRenameTest.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/SimpleNameReferenceRenameTest.java @@ -47,6 +47,10 @@ public class SimpleNameReferenceRenameTest extends LightCodeInsightTestCase { doTest("anotherRenamed"); } + public void testLocalFunction() throws Exception { + doTest("xyzzy"); + } + private void doTest(String newName) throws Exception { configureByFile(getTestName(true) + ".kt"); PsiElement element = TargetElementUtilBase