From 3acebc3001f1831a5aa13fc724d2d25bb9db5f6c Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Fri, 21 Apr 2017 15:44:57 +0300 Subject: [PATCH] Fix KNPE in KotlinAddImportActionKt.createSingleImportActionForConstructor #KT-17525 fixed --- .../org/jetbrains/kotlin/idea/quickfix/ImportFix.kt | 8 +++++++- idea/testData/quickfix/autoImports/kt17525.kt | 11 +++++++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 6 ++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 idea/testData/quickfix/autoImports/kt17525.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ImportFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ImportFix.kt index 90b9666b1f2..c4bf26453e7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ImportFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ImportFix.kt @@ -49,6 +49,7 @@ import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.idea.core.KotlinIndicesHelper import org.jetbrains.kotlin.idea.core.isVisible import org.jetbrains.kotlin.idea.imports.canBeReferencedViaImport +import org.jetbrains.kotlin.idea.imports.importableFqName import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.util.CallTypeAndReceiver @@ -355,7 +356,12 @@ internal class ImportConstructorReferenceFix(expression: KtSimpleNameExpression) val filterByCallType = callTypeAndReceiver.toFilter() // TODO Type-aliases - return indicesHelper.getClassesByName(expression, name).asSequence().map { it.constructors }.flatten().filter(filterByCallType).toList() + return indicesHelper.getClassesByName(expression, name) + .asSequence() + .map { it.constructors }.flatten() + .filter { it.importableFqName != null } + .filter(filterByCallType) + .toList() } override fun createAction(project: Project, editor: Editor, element: KtExpression): KotlinAddImportAction { diff --git a/idea/testData/quickfix/autoImports/kt17525.kt b/idea/testData/quickfix/autoImports/kt17525.kt new file mode 100644 index 00000000000..7342c2ecd6e --- /dev/null +++ b/idea/testData/quickfix/autoImports/kt17525.kt @@ -0,0 +1,11 @@ +// "class org.jetbrains.kotlin.idea.quickfix.ImportConstructorReferenceFix" "false" +// ERROR: Unresolved reference: ItsInner + + +class WithInner { + inner class ItsInner +} + +fun referInner(p: WithInner.ItsInner) { + val v = p::ItsInner() +} \ 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 234c9856e47..f255743b71a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -824,6 +824,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("kt17525.kt") + public void testKt17525() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/kt17525.kt"); + doTest(fileName); + } + @TestMetadata("libraryPropertyJsRuntime.kt") public void testLibraryPropertyJsRuntime() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/autoImports/libraryPropertyJsRuntime.kt");