diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateLocalVariableActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateLocalVariableActionFactory.kt index 9894e5608c4..79152c47c58 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateLocalVariableActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateLocalVariableActionFactory.kt @@ -27,18 +27,20 @@ import org.jetbrains.kotlin.idea.quickfix.JetSingleIntentionActionFactory import org.jetbrains.kotlin.idea.quickfix.createFromUsage.CreateFromUsageFixBase import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.* import org.jetbrains.kotlin.idea.util.application.executeCommand +import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getAssignmentByLHS import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElement import org.jetbrains.kotlin.psi.psiUtil.parents import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.utils.addToStdlib.singletonOrEmptyList -import java.util.Collections +import java.util.* object CreateLocalVariableActionFactory: JetSingleIntentionActionFactory() { override fun createAction(diagnostic: Diagnostic): IntentionAction? { val refExpr = QuickFixUtil.getParentElementOfType(diagnostic, javaClass()) ?: return null if (refExpr.getQualifiedElement() != refExpr) return null + if (refExpr.getReferencedNameElementType() != JetTokens.IDENTIFIER) return null val propertyName = refExpr.getReferencedName() diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterByRefActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterByRefActionFactory.kt index 8c3945a2255..af04ea953c8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterByRefActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createVariable/CreateParameterByRefActionFactory.kt @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.guessT import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetParameterInfo import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetValVar import org.jetbrains.kotlin.incremental.components.NoLookupLocation +import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getAssignmentByLHS import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElement @@ -47,6 +48,7 @@ object CreateParameterByRefActionFactory : CreateParameterFromUsageFactory()) ?: return null if (refExpr.getQualifiedElement() != refExpr) return null + if (refExpr.getReferencedNameElementType() != JetTokens.IDENTIFIER) return null return refExpr } diff --git a/idea/testData/quickfix/autoImports/falsePostfixOperator.before.Main.kt b/idea/testData/quickfix/autoImports/falsePostfixOperator.before.Main.kt index f5837282e22..0b19433ccb3 100644 --- a/idea/testData/quickfix/autoImports/falsePostfixOperator.before.Main.kt +++ b/idea/testData/quickfix/autoImports/falsePostfixOperator.before.Main.kt @@ -1,8 +1,6 @@ // "Import" "false" // ACTION: Create extension function 'inc' // ACTION: Create member function 'inc' -// ACTION: Create local variable '++' -// ACTION: Create parameter '++' // ACTION: Replace overloaded operator with function call // ERROR: Unresolved reference: ++ diff --git a/idea/testData/quickfix/createFromUsage/createVariable/localVariable/nonIdentifier.kt b/idea/testData/quickfix/createFromUsage/createVariable/localVariable/nonIdentifier.kt new file mode 100644 index 00000000000..5a0e3abf205 --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/localVariable/nonIdentifier.kt @@ -0,0 +1,11 @@ +// "Create local variable '-'" "false" +// ACTION: Create extension function 'minus' +// ACTION: Create member function 'minus' +// ACTION: Replace overloaded operator with function call +// ERROR: Unresolved reference: - +class A + +fun bar() { + val a = A() + return a - a +} \ No newline at end of file diff --git a/idea/testData/quickfix/createFromUsage/createVariable/parameter/nonIdentifier.kt b/idea/testData/quickfix/createFromUsage/createVariable/parameter/nonIdentifier.kt new file mode 100644 index 00000000000..b2254a78d1e --- /dev/null +++ b/idea/testData/quickfix/createFromUsage/createVariable/parameter/nonIdentifier.kt @@ -0,0 +1,11 @@ +// "Create parameter '-'" "false" +// ACTION: Create extension function 'minus' +// ACTION: Create member function 'minus' +// ACTION: Replace overloaded operator with function call +// ERROR: Unresolved reference: - +class A + +fun bar() { + val a = A() + return a - a +} \ 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 19267394f7c..b6b95302ad7 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -2465,6 +2465,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("nonIdentifier.kt") + public void testNonIdentifier() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/localVariable/nonIdentifier.kt"); + doTest(fileName); + } + @TestMetadata("nullableType.kt") public void testNullableType() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/localVariable/nullableType.kt"); @@ -2714,6 +2720,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("nonIdentifier.kt") + public void testNonIdentifier() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/nonIdentifier.kt"); + doTest(fileName); + } + @TestMetadata("nullableType.kt") public void testNullableType() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/createFromUsage/createVariable/parameter/nullableType.kt");