Create From Usage: Place local variable declaration right before its usage
#KT-6704 Fixed
This commit is contained in:
+4
-5
@@ -56,9 +56,7 @@ import org.jetbrains.kotlin.descriptors.impl.TypeParameterDescriptorImpl
|
|||||||
import java.util.LinkedHashMap
|
import java.util.LinkedHashMap
|
||||||
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createClass.ClassKind
|
import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createClass.ClassKind
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.singletonOrEmptyList
|
import org.jetbrains.kotlin.utils.addToStdlib.singletonOrEmptyList
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.siblings
|
|
||||||
import com.intellij.openapi.editor.ScrollType
|
import com.intellij.openapi.editor.ScrollType
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.isAncestor
|
|
||||||
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor
|
import org.jetbrains.kotlin.load.java.descriptors.JavaClassDescriptor
|
||||||
import com.intellij.psi.PsiClass
|
import com.intellij.psi.PsiClass
|
||||||
import com.intellij.codeInsight.daemon.impl.quickfix.CreateFromUsageUtils
|
import com.intellij.codeInsight.daemon.impl.quickfix.CreateFromUsageUtils
|
||||||
@@ -81,6 +79,7 @@ import com.intellij.openapi.ui.*
|
|||||||
import com.intellij.codeInsight.template.impl.*
|
import com.intellij.codeInsight.template.impl.*
|
||||||
import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils
|
import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils
|
||||||
import org.jetbrains.kotlin.idea.util.application.*
|
import org.jetbrains.kotlin.idea.util.application.*
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.*
|
||||||
|
|
||||||
private val TYPE_PARAMETER_LIST_VARIABLE_NAME = "typeParameterList"
|
private val TYPE_PARAMETER_LIST_VARIABLE_NAME = "typeParameterList"
|
||||||
private val TEMPLATE_FROM_USAGE_FUNCTION_BODY = "New Kotlin Function Body.kt"
|
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.addBefore(newLine, containingElement)
|
||||||
parent.addAfter(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()}")
|
else -> throw AssertionError("Invalid containing element: ${containingElement.getText()}")
|
||||||
|
|||||||
+9
@@ -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)
|
||||||
|
}
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
// "Create local variable 'foo'" "true"
|
||||||
|
|
||||||
|
fun test(n: Int) {
|
||||||
|
val i = 1
|
||||||
|
test(i)
|
||||||
|
test(i + 1)
|
||||||
|
test(<caret>foo)
|
||||||
|
}
|
||||||
@@ -2309,6 +2309,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("beforeQualifiedInFun.kt")
|
||||||
public void testQualifiedInFun() throws Exception {
|
public void testQualifiedInFun() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/localVariable/beforeQualifiedInFun.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/localVariable/beforeQualifiedInFun.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user