From e53940f4af3083139ffd3e18d057873705125299 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 24 Oct 2016 18:04:25 +0300 Subject: [PATCH] KT-8442 related: correct handling of erroneous destructuring references, fixes EA-90434 --- .../idea/references/KtDestructuringDeclarationReference.kt | 3 ++- .../testData/quickfix/optimizeImports/destructuringAtTop.kt | 5 +++++ .../quickfix/optimizeImports/destructuringAtTop.kt.after | 3 +++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 6 ++++++ 4 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 idea/testData/quickfix/optimizeImports/destructuringAtTop.kt create mode 100644 idea/testData/quickfix/optimizeImports/destructuringAtTop.kt.after diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtDestructuringDeclarationReference.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtDestructuringDeclarationReference.kt index 302cc71c238..c5cc560db0c 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtDestructuringDeclarationReference.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtDestructuringDeclarationReference.kt @@ -47,7 +47,8 @@ class KtDestructuringDeclarationReference(element: KtDestructuringDeclarationEnt override val resolvesByNames: Collection get() { - val componentIndex = (element.parent as KtDestructuringDeclaration).entries.indexOf(element) + 1 + val destructuringParent = element.parent as? KtDestructuringDeclaration ?: return emptyList() + val componentIndex = destructuringParent.entries.indexOf(element) + 1 return listOf(Name.identifier("component$componentIndex")) } } diff --git a/idea/testData/quickfix/optimizeImports/destructuringAtTop.kt b/idea/testData/quickfix/optimizeImports/destructuringAtTop.kt new file mode 100644 index 00000000000..b252c09ea99 --- /dev/null +++ b/idea/testData/quickfix/optimizeImports/destructuringAtTop.kt @@ -0,0 +1,5 @@ +// "Optimize imports" "true" + +import kotlin.collections.* + +val (a, b, c) = Triple(1, 2, 3) \ No newline at end of file diff --git a/idea/testData/quickfix/optimizeImports/destructuringAtTop.kt.after b/idea/testData/quickfix/optimizeImports/destructuringAtTop.kt.after new file mode 100644 index 00000000000..f66adf256f2 --- /dev/null +++ b/idea/testData/quickfix/optimizeImports/destructuringAtTop.kt.after @@ -0,0 +1,3 @@ +// "Optimize imports" "true" + +val (a, b, c) = Triple(1, 2, 3) \ 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 2171755b4b1..7db9f1be993 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -6575,6 +6575,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/optimizeImports"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true); } + @TestMetadata("destructuringAtTop.kt") + public void testDestructuringAtTop() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/optimizeImports/destructuringAtTop.kt"); + doTest(fileName); + } + @TestMetadata("fileRuntime.kt") public void testFileRuntime() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/optimizeImports/fileRuntime.kt");