From 1bb6dae444c97e32db8ae6058004f5a58f59e2cf Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 2 Oct 2015 18:50:08 +0300 Subject: [PATCH] Auto-import fix should suggest declarations that cannot be used in this position This also should fix KT-9122 Assertion error when psi modified from IDE #KT-9122 Fixed --- .../src/org/jetbrains/kotlin/idea/util/CallType.kt | 1 + .../jetbrains/kotlin/idea/quickfix/AutoImportFix.kt | 11 ++++++++--- .../quickfix/autoImports/infixCallAndObject.kt | 13 +++++++++++++ .../autoImports/infixCallAndObject.kt.after | 13 +++++++++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 6 ++++++ 5 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 idea/testData/quickfix/autoImports/infixCallAndObject.kt create mode 100644 idea/testData/quickfix/autoImports/infixCallAndObject.kt.after diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt index cf305e0a6b1..fcb21165dea 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/CallType.kt @@ -44,6 +44,7 @@ public sealed class CallType(val descriptorKindFilter: object SAFE : CallType(DescriptorKindFilter.ALL) + // TODO: split into INFIX and OPERATOR (+ support other convention calls like [] etc) object INFIX : CallType(DescriptorKindFilter.FUNCTIONS exclude NonInfixExclude) object UNARY : CallType(DescriptorKindFilter.FUNCTIONS exclude NonUnaryExclude) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AutoImportFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AutoImportFix.kt index 94aab776e20..e5a5b43913c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AutoImportFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AutoImportFix.kt @@ -40,6 +40,7 @@ import org.jetbrains.kotlin.idea.core.KotlinIndicesHelper import org.jetbrains.kotlin.idea.core.getResolutionScope import org.jetbrains.kotlin.idea.core.isVisible import org.jetbrains.kotlin.idea.project.ProjectStructureUtil +import org.jetbrains.kotlin.idea.util.CallTypeAndReceiver import org.jetbrains.kotlin.psi.JetFile import org.jetbrains.kotlin.psi.JetPsiUtil import org.jetbrains.kotlin.psi.JetSimpleNameExpression @@ -85,7 +86,7 @@ public class AutoImportFix(element: JetSimpleNameExpression) : JetHintAction.isAvailable(project, editor, file)) && (anySuggestionFound ?: !suggestions.isEmpty()) + = (super.isAvailable(project, editor, file)) && (anySuggestionFound ?: !suggestions.isEmpty()) override fun invoke(project: Project, editor: Editor?, file: JetFile) { CommandProcessor.getInstance().runUndoTransparentAction { @@ -135,10 +136,14 @@ public class AutoImportFix(element: JetSimpleNameExpression) : JetHintActioninfix "" +} \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/infixCallAndObject.kt.after b/idea/testData/quickfix/autoImports/infixCallAndObject.kt.after new file mode 100644 index 00000000000..ffebcccf7c5 --- /dev/null +++ b/idea/testData/quickfix/autoImports/infixCallAndObject.kt.after @@ -0,0 +1,13 @@ +// "Import" "true" +// ERROR: Unresolved reference: infix +package x + +object infix { + fun invoke() { + + } +} + +fun x() { + "" infix "" +} \ 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 c646308902a..72445d0b265 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -406,6 +406,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("infixCallAndObject.kt") + public void testInfixCallAndObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/infixCallAndObject.kt"); + doTest(fileName); + } + @TestMetadata("libraryPropertyJsRuntime.kt") public void testLibraryPropertyJsRuntime() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/libraryPropertyJsRuntime.kt");