From fe9b08f93daf64d51d3ac5674b8da8bca3c86f13 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Wed, 11 Mar 2015 17:09:50 +0300 Subject: [PATCH] Create From Usage: Place local variable declaration right before its usage #KT-6704 Fixed --- .../createFromUsage/callableBuilder/CallableBuilder.kt | 9 ++++----- .../localVariable/afterPositionNextToUsage.kt | 9 +++++++++ .../localVariable/beforePositionNextToUsage.kt | 8 ++++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 6 ++++++ 4 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 idea/testData/quickfix/createFromUsage/createVariable/localVariable/afterPositionNextToUsage.kt create mode 100644 idea/testData/quickfix/createFromUsage/createVariable/localVariable/beforePositionNextToUsage.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt index d7b7121a168..109a159a7cc 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt @@ -56,9 +56,7 @@ import org.jetbrains.kotlin.descriptors.impl.TypeParameterDescriptorImpl import java.util.LinkedHashMap import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createClass.ClassKind import org.jetbrains.kotlin.utils.addToStdlib.singletonOrEmptyList -import org.jetbrains.kotlin.psi.psiUtil.siblings import com.intellij.openapi.editor.ScrollType -import org.jetbrains.kotlin.psi.psiUtil.isAncestor import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor import com.intellij.psi.PsiClass import com.intellij.codeInsight.daemon.impl.quickfix.CreateFromUsageUtils @@ -81,6 +79,7 @@ import com.intellij.openapi.ui.* import com.intellij.codeInsight.template.impl.* import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils import org.jetbrains.kotlin.idea.util.application.* +import org.jetbrains.kotlin.psi.psiUtil.* private val TYPE_PARAMETER_LIST_VARIABLE_NAME = "typeParameterList" private val TEMPLATE_FROM_USAGE_FUNCTION_BODY = "New Kotlin Function Body.kt" @@ -559,10 +558,10 @@ class CallableBuilder(val config: CallableBuilderConfiguration) { parent.addBefore(newLine, containingElement) parent.addAfter(newLine, containingElement) } - - containingElement.addBefore(declaration, containingElement.getFirstChild()!!) as JetNamedDeclaration } - else containingElement.addAfter(declaration, containingElement.getLBrace()!!) as JetNamedDeclaration + + val sibling = config.originalElement.parents().first { it.getParent() == containingElement } + containingElement.addBefore(declaration, sibling) as JetNamedDeclaration } else -> throw AssertionError("Invalid containing element: ${containingElement.getText()}") diff --git a/idea/testData/quickfix/createFromUsage/createVariable/localVariable/afterPositionNextToUsage.kt b/idea/testData/quickfix/createFromUsage/createVariable/localVariable/afterPositionNextToUsage.kt new file mode 100644 index 00000000000..88aedbd28bd --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/localVariable/afterPositionNextToUsage.kt @@ -0,0 +1,9 @@ +// "Create local variable 'foo'" "true" + +fun test(n: Int) { + val i = 1 + test(i) + test(i + 1) + val foo = 0 + test(foo) +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/localVariable/beforePositionNextToUsage.kt b/idea/testData/quickfix/createFromUsage/createVariable/localVariable/beforePositionNextToUsage.kt new file mode 100644 index 00000000000..f37057b0a66 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/localVariable/beforePositionNextToUsage.kt @@ -0,0 +1,8 @@ +// "Create local variable 'foo'" "true" + +fun test(n: Int) { + val i = 1 + test(i) + test(i + 1) + test(foo) +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 57e6375142d..e0ecd4b8a2b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -2309,6 +2309,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("beforePositionNextToUsage.kt") + public void testPositionNextToUsage() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/localVariable/beforePositionNextToUsage.kt"); + doTest(fileName); + } + @TestMetadata("beforeQualifiedInFun.kt") public void testQualifiedInFun() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/localVariable/beforeQualifiedInFun.kt");