From cb9b1019b2809cddab5cc0086ff6ff7ebffb6ef7 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 26 May 2015 14:25:06 +0300 Subject: [PATCH] Function <-> Property Intention: Fix conversion of recursive functions/property accessors #KT-7823 Fixed --- .../intentions/ConvertFunctionToPropertyIntention.kt | 4 ++-- .../intentions/ConvertPropertyToFunctionIntention.kt | 6 +++--- .../convertFunctionToProperty/recursiveFunction.kt | 2 ++ .../recursiveFunction.kt.after | 3 +++ .../convertPropertyToFunction/recursiveAccessor.kt | 3 +++ .../recursiveAccessor.kt.after | 2 ++ .../idea/intentions/IntentionTestGenerated.java | 12 ++++++++++++ 7 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 idea/testData/intentions/convertFunctionToProperty/recursiveFunction.kt create mode 100644 idea/testData/intentions/convertFunctionToProperty/recursiveFunction.kt.after create mode 100644 idea/testData/intentions/convertPropertyToFunction/recursiveAccessor.kt create mode 100644 idea/testData/intentions/convertPropertyToFunction/recursiveAccessor.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt index 9797aa76278..744406e5f2f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt @@ -160,14 +160,14 @@ public class ConvertFunctionToPropertyIntention : JetSelfTargetingIntention convertFunction(it, psiFactory) is PsiMethod -> it.setName(getterName) } } - kotlinCalls.forEach { it.replace(it.getCalleeExpression()) } - foreignRefs.forEach { it.handleElementRename(getterName) } ShortenReferences.DEFAULT.process(elementsToShorten) } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertPropertyToFunctionIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertPropertyToFunctionIntention.kt index af800bb0f1a..a6c91090c24 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertPropertyToFunctionIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertPropertyToFunctionIntention.kt @@ -153,15 +153,15 @@ public class ConvertPropertyToFunctionIntention : JetSelfTargetingIntention convertProperty(it, kotlinPsiFactory) is PsiMethod -> it.setName(propertyName) } } - kotlinRefs.forEach { it.replace(kotlinPsiFactory.createExpressionByPattern("$0()", it)) } - foreignRefsToRename.forEach { it.handleElementRename(propertyName) } - javaRefsToReplaceWithCall.forEach { it.replace(javaPsiFactory.createExpressionFromText(it.getText() + "()", null)) } } } } diff --git a/idea/testData/intentions/convertFunctionToProperty/recursiveFunction.kt b/idea/testData/intentions/convertFunctionToProperty/recursiveFunction.kt new file mode 100644 index 00000000000..422e8657bbe --- /dev/null +++ b/idea/testData/intentions/convertFunctionToProperty/recursiveFunction.kt @@ -0,0 +1,2 @@ +// WITH_RUNTIME +fun String.foo(): String = if (isEmpty()) "" else substring(1).foo() \ No newline at end of file diff --git a/idea/testData/intentions/convertFunctionToProperty/recursiveFunction.kt.after b/idea/testData/intentions/convertFunctionToProperty/recursiveFunction.kt.after new file mode 100644 index 00000000000..3472172745b --- /dev/null +++ b/idea/testData/intentions/convertFunctionToProperty/recursiveFunction.kt.after @@ -0,0 +1,3 @@ +// WITH_RUNTIME +val String.foo: String + get() = if (isEmpty()) "" else substring(1).foo \ No newline at end of file diff --git a/idea/testData/intentions/convertPropertyToFunction/recursiveAccessor.kt b/idea/testData/intentions/convertPropertyToFunction/recursiveAccessor.kt new file mode 100644 index 00000000000..6330001a34f --- /dev/null +++ b/idea/testData/intentions/convertPropertyToFunction/recursiveAccessor.kt @@ -0,0 +1,3 @@ +// WITH_RUNTIME +val String.foo: String + get() = if (isEmpty()) "" else substring(1).foo \ No newline at end of file diff --git a/idea/testData/intentions/convertPropertyToFunction/recursiveAccessor.kt.after b/idea/testData/intentions/convertPropertyToFunction/recursiveAccessor.kt.after new file mode 100644 index 00000000000..d6bf935514b --- /dev/null +++ b/idea/testData/intentions/convertPropertyToFunction/recursiveAccessor.kt.after @@ -0,0 +1,2 @@ +// WITH_RUNTIME +fun String.foo(): String = if (isEmpty()) "" else substring(1).foo() \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 9e6cea8c4cf..750bc24084a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -2926,6 +2926,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("recursiveFunction.kt") + public void testRecursiveFunction() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/convertFunctionToProperty/recursiveFunction.kt"); + doTest(fileName); + } + @TestMetadata("typeArgumentsConflict.kt") public void testTypeArgumentsConflict() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/convertFunctionToProperty/typeArgumentsConflict.kt"); @@ -3349,6 +3355,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("recursiveAccessor.kt") + public void testRecursiveAccessor() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/convertPropertyToFunction/recursiveAccessor.kt"); + doTest(fileName); + } + @TestMetadata("unchangedElements.kt") public void testUnchangedElements() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/intentions/convertPropertyToFunction/unchangedElements.kt");