diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/JetBundle.properties b/idea/idea-analysis/src/org/jetbrains/jet/plugin/JetBundle.properties index b92b31980ee..f2d25090879 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/JetBundle.properties +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/JetBundle.properties @@ -186,6 +186,7 @@ map.platform.class.to.kotlin.family=Change to Kotlin class create.from.usage.family=Create from usage create.function.from.usage=Create function ''{0}'' from usage create.local.variable.from.usage=Create local variable ''{0}'' +create.parameter.from.usage=Create parameter ''{0}'' choose.target.class.or.trait.title=Choose target class or trait surround.with=Surround with surround.with.string.template="${expr}" diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixRegistrar.java b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixRegistrar.java index 5bc61527667..6cfa8173586 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixRegistrar.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixRegistrar.java @@ -240,6 +240,8 @@ public class QuickFixRegistrar { QuickFixes.factories.put(UNRESOLVED_REFERENCE, CreateLocalVariableActionFactory.INSTANCE$); + QuickFixes.factories.put(UNRESOLVED_REFERENCE, CreateParameterActionFactory.INSTANCE$); + QuickFixes.factories.put(FUNCTION_EXPECTED, CreateInvokeFunctionActionFactory.INSTANCE$); QuickFixes.factories.put(TYPE_MISMATCH, new QuickFixFactoryForTypeMismatchError()); diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/callableBuilder/typeUtils.kt b/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/callableBuilder/typeUtils.kt index 280095fcbea..5a180e481f2 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/callableBuilder/typeUtils.kt +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/callableBuilder/typeUtils.kt @@ -53,7 +53,7 @@ private fun getTypeParameterNamesNotInScope(typeParameters: Collection { +fun JetType.getTypeParameters(): Set { val typeParameters = LinkedHashSet() val arguments = getArguments() if (arguments.empty) { diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createVariable/CreateParameterActionFactory.kt b/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createVariable/CreateParameterActionFactory.kt new file mode 100644 index 00000000000..2c29ef4d92d --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/createFromUsage/createVariable/CreateParameterActionFactory.kt @@ -0,0 +1,132 @@ +package org.jetbrains.jet.plugin.quickfix.createFromUsage.createVariable + +import org.jetbrains.jet.plugin.quickfix.createFromUsage.CreateFromUsageFixBase +import org.jetbrains.jet.plugin.JetBundle +import com.intellij.openapi.project.Project +import com.intellij.openapi.editor.Editor +import org.jetbrains.jet.lang.psi.JetFile +import org.jetbrains.jet.plugin.quickfix.JetSingleIntentionActionFactory +import org.jetbrains.jet.lang.diagnostics.Diagnostic +import com.intellij.codeInsight.intention.IntentionAction +import org.jetbrains.jet.plugin.quickfix.QuickFixUtil +import org.jetbrains.jet.lang.psi.JetSimpleNameExpression +import org.jetbrains.jet.lang.psi.psiUtil.getQualifiedElement +import org.jetbrains.jet.lang.psi.JetClass +import org.jetbrains.jet.plugin.quickfix.createFromUsage.callableBuilder.guessTypes +import org.jetbrains.jet.plugin.caches.resolve.getBindingContext +import org.jetbrains.jet.lang.resolve.BindingContext +import org.jetbrains.jet.lang.descriptors.ClassDescriptor +import org.jetbrains.jet.lang.descriptors.FunctionDescriptor +import org.jetbrains.jet.plugin.refactoring.changeSignature.runChangeSignature +import org.jetbrains.jet.plugin.refactoring.changeSignature.JetChangeSignatureConfiguration +import org.jetbrains.jet.plugin.refactoring.changeSignature.JetChangeSignatureData +import org.jetbrains.jet.plugin.refactoring.changeSignature.JetParameterInfo +import com.intellij.psi.PsiElement +import org.jetbrains.jet.lang.psi.JetPropertyAccessor +import org.jetbrains.jet.lang.psi.JetFunction +import org.jetbrains.jet.lang.psi.JetClassInitializer +import org.jetbrains.jet.lang.psi.JetClassBody +import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns +import org.jetbrains.jet.lang.psi.psiUtil.parents +import org.jetbrains.jet.plugin.quickfix.createFromUsage.callableBuilder.getTypeParameters +import org.jetbrains.jet.lang.descriptors.ClassDescriptorWithResolutionScopes +import java.util.LinkedHashSet +import org.jetbrains.jet.lang.types.JetType +import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor +import org.jetbrains.jet.plugin.refactoring.changeSignature.JetValVar +import org.jetbrains.jet.lang.psi.JetEnumEntry +import org.jetbrains.jet.lang.psi.JetClassOrObject +import org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils +import org.jetbrains.jet.lang.descriptors.impl.AnonymousFunctionDescriptor +import org.jetbrains.jet.lang.psi.JetNamedFunction + +object CreateParameterActionFactory: JetSingleIntentionActionFactory() { + private fun JetType.hasTypeParametersToAdd(functionDescriptor: FunctionDescriptor, context: BindingContext): Boolean { + val typeParametersToAdd = LinkedHashSet(getTypeParameters()) + typeParametersToAdd.removeAll(functionDescriptor.getTypeParameters()) + if (typeParametersToAdd.isEmpty()) return false + + val scope = when(functionDescriptor) { + is ConstructorDescriptor -> { + val classDescriptor = (functionDescriptor as? ConstructorDescriptor)?.getContainingDeclaration() + (classDescriptor as? ClassDescriptorWithResolutionScopes)?.getScopeForClassHeaderResolution() + } + + is FunctionDescriptor -> { + val function = DescriptorToSourceUtils.descriptorToDeclaration(functionDescriptor) as? JetFunction + function?.let { context[BindingContext.RESOLUTION_SCOPE, it.getBodyExpression()] } + } + + else -> null + } ?: return true + + return typeParametersToAdd.any { scope.getClassifier(it.getName()) != it } + } + + override fun createAction(diagnostic: Diagnostic): IntentionAction? { + val context = (diagnostic.getPsiFile() as? JetFile)?.getBindingContext() ?: return null + + val refExpr = QuickFixUtil.getParentElementOfType(diagnostic, javaClass()) ?: return null + if (refExpr.getQualifiedElement() != refExpr) return null + + val paramType = refExpr.guessTypes(context).let { + when (it.size) { + 0 -> KotlinBuiltIns.getInstance().getAnyType() + 1 -> it.first() + else -> return null + } + } + + val parameterInfo = JetParameterInfo(refExpr.getReferencedName(), paramType) + + fun chooseContainingClass(it: PsiElement): JetClass? { + parameterInfo.setValOrVar(JetValVar.Val) + return it.parents(false).filterIsInstance(javaClass()).firstOrNull() as? JetClass + } + + // todo: skip lambdas for now because Change Signature doesn't apply to them yet + val container = refExpr.parents(false) + .filter { it is JetNamedFunction || it is JetPropertyAccessor || it is JetClassBody || it is JetClassInitializer } + .firstOrNull() + ?.let { + when (it) { + is JetPropertyAccessor -> chooseContainingClass(it) + is JetClassInitializer -> + it.getParent()?.getParent() as? JetClass + is JetClassBody -> { + val klass = it.getParent() as? JetClass + when { + klass is JetEnumEntry -> chooseContainingClass(klass) + klass != null && klass.isTrait() -> null + else -> klass + } + } + else -> it + } + } ?: return null + + val functionDescriptor = context[BindingContext.DECLARATION_TO_DESCRIPTOR, container]?.let { + if (it is ClassDescriptor) it.getUnsubstitutedPrimaryConstructor() else it + } as? FunctionDescriptor ?: return null + + if (paramType.hasTypeParametersToAdd(functionDescriptor, context)) return null + + return object: CreateFromUsageFixBase(refExpr) { + override fun getText(): String { + return JetBundle.message("create.parameter.from.usage", refExpr.getReferencedName()) + } + + override fun invoke(project: Project, editor: Editor?, file: JetFile?) { + val config = object : JetChangeSignatureConfiguration { + override fun configure(changeSignatureData: JetChangeSignatureData, bindingContext: BindingContext) { + changeSignatureData.addParameter(parameterInfo) + } + + override fun performSilently(affectedFunctions: Collection): Boolean = false + } + + runChangeSignature(project, functionDescriptor, config, context, refExpr, getText()) + } + } + } +} diff --git a/idea/testData/quickfix/autoImports/noImportForPrivateClass.before.Main.kt b/idea/testData/quickfix/autoImports/noImportForPrivateClass.before.Main.kt index 32af4e13f02..c4b9a46068a 100644 --- a/idea/testData/quickfix/autoImports/noImportForPrivateClass.before.Main.kt +++ b/idea/testData/quickfix/autoImports/noImportForPrivateClass.before.Main.kt @@ -1,5 +1,6 @@ // "class com.intellij.codeInsight.daemon.impl.quickfix.ImportClassFixBase" "false" // ACTION: Create local variable 'PrivateClass' +// ACTION: Create parameter 'PrivateClass' // ERROR: Unresolved reference: PrivateClass fun test() { diff --git a/idea/testData/quickfix/createFromUsage/createVariable/localVariable/beforeInClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/localVariable/beforeInClass.kt index dbf18e66a2b..1d209062a30 100644 --- a/idea/testData/quickfix/createFromUsage/createVariable/localVariable/beforeInClass.kt +++ b/idea/testData/quickfix/createFromUsage/createVariable/localVariable/beforeInClass.kt @@ -1,4 +1,5 @@ // "Create local variable 'foo'" "false" +// ACTION: Create parameter 'foo' // ERROR: Unresolved reference: foo class A { diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInAccessorInClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInAccessorInClass.kt new file mode 100644 index 00000000000..8af7378905f --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInAccessorInClass.kt @@ -0,0 +1,7 @@ +// "Create parameter 'foo'" "true" + +class A(val foo: Int) { + val test: Int get() { + return foo + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInAccessorInGenClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInAccessorInGenClass.kt new file mode 100644 index 00000000000..ee85e2962f9 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInAccessorInGenClass.kt @@ -0,0 +1,7 @@ +// "Create parameter 'foo'" "true" + +class A(val foo: T) { + val test: T get() { + return foo + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInAccessorWithExpressionBodyInClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInAccessorWithExpressionBodyInClass.kt new file mode 100644 index 00000000000..c0cdd17b671 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInAccessorWithExpressionBodyInClass.kt @@ -0,0 +1,5 @@ +// "Create parameter 'foo'" "true" + +class A(val foo: Int) { + val test: Int get() = foo +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInClassInitializer.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInClassInitializer.kt new file mode 100644 index 00000000000..4f7ca04238a --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInClassInitializer.kt @@ -0,0 +1,7 @@ +// "Create parameter 'foo'" "true" + +class A(foo: Int) { + { + val t: Int = foo + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInFun.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInFun.kt new file mode 100644 index 00000000000..a3a86567326 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInFun.kt @@ -0,0 +1,6 @@ +// "Create parameter 'foo'" "true" + +fun test(n: Int, + foo: Int) { + val t: Int = foo +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInFunInClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInFunInClass.kt new file mode 100644 index 00000000000..f53817ce462 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInFunInClass.kt @@ -0,0 +1,8 @@ +// "Create parameter 'foo'" "true" + +class A { + fun test(n: Int, + foo: Int) { + val t: Int = foo + } +} diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInFunInGenClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInFunInGenClass.kt new file mode 100644 index 00000000000..69793ff6134 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInFunInGenClass.kt @@ -0,0 +1,8 @@ +// "Create parameter 'foo'" "true" + +class A { + fun test(n: Int, + foo: T) { + val t: T = foo + } +} diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInGenFunInClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInGenFunInClass.kt new file mode 100644 index 00000000000..2419b5251cc --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInGenFunInClass.kt @@ -0,0 +1,8 @@ +// "Create parameter 'foo'" "true" + +class A { + fun test(n: Int, + foo: T) { + val t: T = foo + } +} diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInGenFunInGenClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInGenFunInGenClass.kt new file mode 100644 index 00000000000..bb2fa117eff --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInGenFunInGenClass.kt @@ -0,0 +1,8 @@ +// "Create parameter 'foo'" "true" + +class A { + fun test(n: Int, + foo: T) { + val t: T = foo + } +} diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInLambdaNoParams.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInLambdaNoParams.kt new file mode 100644 index 00000000000..3f3cb8fabe5 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInLambdaNoParams.kt @@ -0,0 +1,7 @@ +// "Create parameter 'foo'" "true" +// ACTION: Create local variable 'foo' + +fun test(n: Int, + foo: Int) { + val f: () -> Int = { foo } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInLambdaWithIt.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInLambdaWithIt.kt new file mode 100644 index 00000000000..3fbc98f2fb7 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInLambdaWithIt.kt @@ -0,0 +1,7 @@ +// "Create parameter 'foo'" "true" +// ACTION: Create local variable 'foo' + +fun test(n: Int, + foo: Int) { + val f: (Int) -> Int = { foo } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInLambdaWithParams.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInLambdaWithParams.kt new file mode 100644 index 00000000000..c80574ecf78 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInLambdaWithParams.kt @@ -0,0 +1,7 @@ +// "Create parameter 'foo'" "true" +// ACTION: Create local variable 'foo' + +fun test(n: Int, + foo: Int) { + val f: (Int, Int) -> Int = { (a, b) -> foo } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInLambdaWithTypedParams.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInLambdaWithTypedParams.kt new file mode 100644 index 00000000000..841673caf11 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInLambdaWithTypedParams.kt @@ -0,0 +1,7 @@ +// "Create parameter 'foo'" "true" +// ACTION: Create local variable 'foo' + +fun test(n: Int, + foo: Any) { + val f = { (a: Int, b: Int) -> foo } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInMultiLineLambdaNoParams.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInMultiLineLambdaNoParams.kt new file mode 100644 index 00000000000..5998f4aaf69 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInMultiLineLambdaNoParams.kt @@ -0,0 +1,9 @@ +// "Create parameter 'foo'" "true" +// ACTION: Create local variable 'foo' + +fun test(n: Int, + foo: Int) { + val f: () -> Int = { + foo + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInPropertyInitializerInClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInPropertyInitializerInClass.kt new file mode 100644 index 00000000000..cdfe50c3ca7 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInPropertyInitializerInClass.kt @@ -0,0 +1,5 @@ +// "Create parameter 'foo'" "true" + +class A(foo: Int) { + val test: Int = foo +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInPropertyInitializerInEnumClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInPropertyInitializerInEnumClass.kt new file mode 100644 index 00000000000..078151ffa34 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInPropertyInitializerInEnumClass.kt @@ -0,0 +1,12 @@ +// "Create parameter 'foo'" "true" +// ERROR: Missing delegation specifier 'E' +// ERROR: Missing delegation specifier 'E' +// ERROR: Missing delegation specifier 'E' + +enum class E(foo: Int) { + A + B + C + + val t: Int = foo +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInPropertyInitializerInEnumEntry.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInPropertyInitializerInEnumEntry.kt new file mode 100644 index 00000000000..b113bf5c28a --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInPropertyInitializerInEnumEntry.kt @@ -0,0 +1,12 @@ +// "Create parameter 'foo'" "true" +// ERROR: Missing delegation specifier 'E' +// ERROR: Missing delegation specifier 'E' +// ERROR: Missing delegation specifier 'E' + +enum class E(val foo: Int) { + A + B { + val t: Int = foo + } + C +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInPropertyInitializerInGenClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInPropertyInitializerInGenClass.kt new file mode 100644 index 00000000000..deb2bcd4b6e --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInPropertyInitializerInGenClass.kt @@ -0,0 +1,5 @@ +// "Create parameter 'foo'" "true" + +class A(foo: T) { + val test: T = foo +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInPropertyInitializerInNestedClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInPropertyInitializerInNestedClass.kt new file mode 100644 index 00000000000..819f99cbe95 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/afterInPropertyInitializerInNestedClass.kt @@ -0,0 +1,7 @@ +// "Create parameter 'foo'" "true" + +class A { + class B(foo: Int) { + val test: Int = foo + } +} diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInClass.kt new file mode 100644 index 00000000000..e90766c9a65 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInClass.kt @@ -0,0 +1,7 @@ +// "Create parameter 'foo'" "true" + +class A { + val test: Int get() { + return foo + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInClassObject.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInClassObject.kt new file mode 100644 index 00000000000..603526716e1 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInClassObject.kt @@ -0,0 +1,12 @@ +// "Create parameter 'foo'" "false" +// ACTION: Convert to expression body +// ACTION: Create local variable 'foo' +// ERROR: Unresolved reference: foo + +class A { + class object { + val test: Int get() { + return foo + } + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInGenClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInGenClass.kt new file mode 100644 index 00000000000..06901093425 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInGenClass.kt @@ -0,0 +1,7 @@ +// "Create parameter 'foo'" "true" + +class A { + val test: T get() { + return foo + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInObject.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInObject.kt new file mode 100644 index 00000000000..f1b7bb547dd --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInObject.kt @@ -0,0 +1,10 @@ +// "Create parameter 'foo'" "false" +// ACTION: Convert to expression body +// ACTION: Create local variable 'foo' +// ERROR: Unresolved reference: foo + +object A { + val test: Int get() { + return foo + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInTrait.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInTrait.kt new file mode 100644 index 00000000000..133988a22b2 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInTrait.kt @@ -0,0 +1,10 @@ +// "Create parameter 'foo'" "false" +// ACTION: Convert to expression body +// ACTION: Create local variable 'foo' +// ERROR: Unresolved reference: foo + +trait A { + val test: Int get() { + return foo + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorNoClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorNoClass.kt new file mode 100644 index 00000000000..fe65f26eb97 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorNoClass.kt @@ -0,0 +1,8 @@ +// "Create parameter 'foo'" "false" +// ACTION: Convert to expression body +// ACTION: Create local variable 'foo' +// ERROR: Unresolved reference: foo + +val test: Int get() { + return foo +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorWithExpressionBodyInClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorWithExpressionBodyInClass.kt new file mode 100644 index 00000000000..14505aa82c5 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorWithExpressionBodyInClass.kt @@ -0,0 +1,5 @@ +// "Create parameter 'foo'" "true" + +class A { + val test: Int get() = foo +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInClassInitializer.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInClassInitializer.kt new file mode 100644 index 00000000000..a8134e0f55f --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInClassInitializer.kt @@ -0,0 +1,7 @@ +// "Create parameter 'foo'" "true" + +class A { + { + val t: Int = foo + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInClassObjectInitializer.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInClassObjectInitializer.kt new file mode 100644 index 00000000000..26555d5680a --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInClassObjectInitializer.kt @@ -0,0 +1,12 @@ +// "Create parameter 'foo'" "false" +// ACTION: Create local variable 'foo' +// ACTION: Split property declaration +// ERROR: Unresolved reference: foo + +class A { + class object { + { + val t: Int = foo + } + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInFun.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInFun.kt new file mode 100644 index 00000000000..33a80474c27 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInFun.kt @@ -0,0 +1,5 @@ +// "Create parameter 'foo'" "true" + +fun test(n: Int) { + val t: Int = foo +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInFunInClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInFunInClass.kt new file mode 100644 index 00000000000..58e2f206e78 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInFunInClass.kt @@ -0,0 +1,7 @@ +// "Create parameter 'foo'" "true" + +class A { + fun test(n: Int) { + val t: Int = foo + } +} diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInFunInGenClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInFunInGenClass.kt new file mode 100644 index 00000000000..b46a6134352 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInFunInGenClass.kt @@ -0,0 +1,7 @@ +// "Create parameter 'foo'" "true" + +class A { + fun test(n: Int) { + val t: T = foo + } +} diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenAccessorInClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenAccessorInClass.kt new file mode 100644 index 00000000000..e885816cb20 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenAccessorInClass.kt @@ -0,0 +1,10 @@ +// "Create parameter 'foo'" "false" +// ACTION: Convert to expression body +// ACTION: Create local variable 'foo' +// ERROR: Unresolved reference: foo + +class A { + val test: T get() { + return foo + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenAccessorInGenClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenAccessorInGenClass.kt new file mode 100644 index 00000000000..068083341d1 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenAccessorInGenClass.kt @@ -0,0 +1,10 @@ +// "Create parameter 'foo'" "false" +// ACTION: Convert to expression body +// ACTION: Create local variable 'foo' +// ERROR: Unresolved reference: foo + +class A { + val test: T get() { + return foo + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenFunInClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenFunInClass.kt new file mode 100644 index 00000000000..53739f72809 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenFunInClass.kt @@ -0,0 +1,7 @@ +// "Create parameter 'foo'" "true" + +class A { + fun test(n: Int) { + val t: T = foo + } +} diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenFunInGenClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenFunInGenClass.kt new file mode 100644 index 00000000000..bf1af0d4754 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenFunInGenClass.kt @@ -0,0 +1,7 @@ +// "Create parameter 'foo'" "true" + +class A { + fun test(n: Int) { + val t: T = foo + } +} diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenPropertyInitializerInClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenPropertyInitializerInClass.kt new file mode 100644 index 00000000000..3b1a4a2973e --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenPropertyInitializerInClass.kt @@ -0,0 +1,6 @@ +// "Create parameter 'foo'" "false" +// ERROR: Unresolved reference: foo + +class A { + val test: T = foo +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenPropertyInitializerInGenClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenPropertyInitializerInGenClass.kt new file mode 100644 index 00000000000..a9663cd93f8 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenPropertyInitializerInGenClass.kt @@ -0,0 +1,6 @@ +// "Create parameter 'foo'" "false" +// ERROR: Unresolved reference: foo + +class A { + val test: T = foo +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInLambdaNoParams.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInLambdaNoParams.kt new file mode 100644 index 00000000000..d645badecf1 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInLambdaNoParams.kt @@ -0,0 +1,6 @@ +// "Create parameter 'foo'" "true" +// ACTION: Create local variable 'foo' + +fun test(n: Int) { + val f: () -> Int = { foo } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInLambdaWithIt.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInLambdaWithIt.kt new file mode 100644 index 00000000000..14d7f8e3ddb --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInLambdaWithIt.kt @@ -0,0 +1,6 @@ +// "Create parameter 'foo'" "true" +// ACTION: Create local variable 'foo' + +fun test(n: Int) { + val f: (Int) -> Int = { foo } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInLambdaWithParams.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInLambdaWithParams.kt new file mode 100644 index 00000000000..75b0ccc8243 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInLambdaWithParams.kt @@ -0,0 +1,6 @@ +// "Create parameter 'foo'" "true" +// ACTION: Create local variable 'foo' + +fun test(n: Int) { + val f: (Int, Int) -> Int = { (a, b) -> foo } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInLambdaWithTypedParams.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInLambdaWithTypedParams.kt new file mode 100644 index 00000000000..ac5d49b6fb9 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInLambdaWithTypedParams.kt @@ -0,0 +1,6 @@ +// "Create parameter 'foo'" "true" +// ACTION: Create local variable 'foo' + +fun test(n: Int) { + val f = { (a: Int, b: Int) -> foo } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInMultiLineLambdaNoParams.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInMultiLineLambdaNoParams.kt new file mode 100644 index 00000000000..f4fe98cdd72 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInMultiLineLambdaNoParams.kt @@ -0,0 +1,8 @@ +// "Create parameter 'foo'" "true" +// ACTION: Create local variable 'foo' + +fun test(n: Int) { + val f: () -> Int = { + foo + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInClass.kt new file mode 100644 index 00000000000..57afb8aaaeb --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInClass.kt @@ -0,0 +1,5 @@ +// "Create parameter 'foo'" "true" + +class A { + val test: Int = foo +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInClassObject.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInClassObject.kt new file mode 100644 index 00000000000..0a7ebd0a406 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInClassObject.kt @@ -0,0 +1,8 @@ +// "Create parameter 'foo'" "false" +// ERROR: Unresolved reference: foo + +class A { + class object { + val test: Int = foo + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInEnumClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInEnumClass.kt new file mode 100644 index 00000000000..6ddbd8885af --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInEnumClass.kt @@ -0,0 +1,12 @@ +// "Create parameter 'foo'" "true" +// ERROR: Missing delegation specifier 'E' +// ERROR: Missing delegation specifier 'E' +// ERROR: Missing delegation specifier 'E' + +enum class E { + A + B + C + + val t: Int = foo +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInEnumEntry.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInEnumEntry.kt new file mode 100644 index 00000000000..56f3c053a28 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInEnumEntry.kt @@ -0,0 +1,12 @@ +// "Create parameter 'foo'" "true" +// ERROR: Missing delegation specifier 'E' +// ERROR: Missing delegation specifier 'E' +// ERROR: Missing delegation specifier 'E' + +enum class E { + A + B { + val t: Int = foo + } + C +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInGenClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInGenClass.kt new file mode 100644 index 00000000000..14b08c5ee41 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInGenClass.kt @@ -0,0 +1,5 @@ +// "Create parameter 'foo'" "true" + +class A { + val test: T = foo +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInNestedClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInNestedClass.kt new file mode 100644 index 00000000000..03f67ad6975 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInNestedClass.kt @@ -0,0 +1,7 @@ +// "Create parameter 'foo'" "true" + +class A { + class B { + val test: Int = foo + } +} diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInObject.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInObject.kt new file mode 100644 index 00000000000..153dd275601 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInObject.kt @@ -0,0 +1,6 @@ +// "Create parameter 'foo'" "false" +// ERROR: Unresolved reference: foo + +object A { + val test: Int = foo +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerNoClass.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerNoClass.kt new file mode 100644 index 00000000000..53dc31dea12 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerNoClass.kt @@ -0,0 +1,4 @@ +// "Create parameter 'foo'" "false" +// ERROR: Unresolved reference: foo + +val test: Int = foo \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeQualifiedInFun.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeQualifiedInFun.kt new file mode 100644 index 00000000000..59a29b62fc2 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeQualifiedInFun.kt @@ -0,0 +1,9 @@ +// "Create parameter 'foo'" "false" +// ACTION: Split property declaration +// ERROR: Unresolved reference: foo + +class A + +fun test(a: A) { + val t: Int = a.foo +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java index ab530931980..409cad77819 100644 --- a/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java @@ -1164,7 +1164,7 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { @TestMetadata("idea/testData/quickfix/createFromUsage/createVariable") @TestDataPath("$PROJECT_ROOT") - @InnerTestClasses({CreateVariable.LocalVariable.class}) + @InnerTestClasses({CreateVariable.LocalVariable.class, CreateVariable.Parameter.class}) @RunWith(org.jetbrains.jet.JUnit3RunnerWithInners.class) public static class CreateVariable extends AbstractQuickFixTest { public void testAllFilesPresentInCreateVariable() throws Exception { @@ -1229,6 +1229,208 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { } + @TestMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter") + @TestDataPath("$PROJECT_ROOT") + @RunWith(org.jetbrains.jet.JUnit3RunnerWithInners.class) + public static class Parameter extends AbstractQuickFixTest { + public void testAllFilesPresentInParameter() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/createFromUsage/createVariable/parameter"), Pattern.compile("^before(\\w+)\\.kt$"), true); + } + + @TestMetadata("beforeInAccessorInClass.kt") + public void testInAccessorInClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInClass.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInAccessorInClassObject.kt") + public void testInAccessorInClassObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInClassObject.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInAccessorInGenClass.kt") + public void testInAccessorInGenClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInGenClass.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInAccessorInObject.kt") + public void testInAccessorInObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInObject.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInAccessorInTrait.kt") + public void testInAccessorInTrait() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorInTrait.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInAccessorNoClass.kt") + public void testInAccessorNoClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorNoClass.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInAccessorWithExpressionBodyInClass.kt") + public void testInAccessorWithExpressionBodyInClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInAccessorWithExpressionBodyInClass.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInClassInitializer.kt") + public void testInClassInitializer() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInClassInitializer.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInClassObjectInitializer.kt") + public void testInClassObjectInitializer() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInClassObjectInitializer.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInFun.kt") + public void testInFun() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInFun.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInFunInClass.kt") + public void testInFunInClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInFunInClass.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInFunInGenClass.kt") + public void testInFunInGenClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInFunInGenClass.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInGenAccessorInClass.kt") + public void testInGenAccessorInClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenAccessorInClass.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInGenAccessorInGenClass.kt") + public void testInGenAccessorInGenClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenAccessorInGenClass.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInGenFunInClass.kt") + public void testInGenFunInClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenFunInClass.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInGenFunInGenClass.kt") + public void testInGenFunInGenClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenFunInGenClass.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInGenPropertyInitializerInClass.kt") + public void testInGenPropertyInitializerInClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenPropertyInitializerInClass.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInGenPropertyInitializerInGenClass.kt") + public void testInGenPropertyInitializerInGenClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInGenPropertyInitializerInGenClass.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInLambdaNoParams.kt") + public void testInLambdaNoParams() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInLambdaNoParams.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInLambdaWithIt.kt") + public void testInLambdaWithIt() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInLambdaWithIt.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInLambdaWithParams.kt") + public void testInLambdaWithParams() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInLambdaWithParams.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInLambdaWithTypedParams.kt") + public void testInLambdaWithTypedParams() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInLambdaWithTypedParams.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInMultiLineLambdaNoParams.kt") + public void testInMultiLineLambdaNoParams() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInMultiLineLambdaNoParams.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInPropertyInitializerInClass.kt") + public void testInPropertyInitializerInClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInClass.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInPropertyInitializerInClassObject.kt") + public void testInPropertyInitializerInClassObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInClassObject.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInPropertyInitializerInEnumClass.kt") + public void testInPropertyInitializerInEnumClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInEnumClass.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInPropertyInitializerInEnumEntry.kt") + public void testInPropertyInitializerInEnumEntry() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInEnumEntry.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInPropertyInitializerInGenClass.kt") + public void testInPropertyInitializerInGenClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInGenClass.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInPropertyInitializerInNestedClass.kt") + public void testInPropertyInitializerInNestedClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInNestedClass.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInPropertyInitializerInObject.kt") + public void testInPropertyInitializerInObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerInObject.kt"); + doTest(fileName); + } + + @TestMetadata("beforeInPropertyInitializerNoClass.kt") + public void testInPropertyInitializerNoClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeInPropertyInitializerNoClass.kt"); + doTest(fileName); + } + + @TestMetadata("beforeQualifiedInFun.kt") + public void testQualifiedInFun() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/beforeQualifiedInFun.kt"); + doTest(fileName); + } + + } + } }