From e1d8c72aa75afeb5f0c656e95623b004828ab84d Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Mon, 25 Apr 2016 20:40:40 +0300 Subject: [PATCH] KT-10770 IDEA cannot keep import if a type is only referenced by kdoc. #KT-10770 Fixed --- .../kotlin/idea/references/referenceUtil.kt | 4 ++++ .../testData/editor/optimizeImports/KDocReference.kt | 12 ++++++++++++ .../editor/optimizeImports/KDocReference.kt.after | 11 +++++++++++ .../unusedImport/inspectionData/expected.xml | 9 +++++++++ .../inspections/unusedImport/kDocReferences.kt | 11 +++++++++++ .../idea/imports/OptimizeImportsTestGenerated.java | 6 ++++++ 6 files changed, 53 insertions(+) create mode 100644 idea/testData/editor/optimizeImports/KDocReference.kt create mode 100644 idea/testData/editor/optimizeImports/KDocReference.kt.after create mode 100644 idea/testData/inspections/unusedImport/kDocReferences.kt diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt index 3abbe032cab..599edb3f364 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt @@ -189,7 +189,11 @@ fun KtExpression.readWriteAccess(useResolveForReadWrite: Boolean): ReferenceAcce fun KtReference.canBeResolvedViaImport(target: DeclarationDescriptor): Boolean { if (!target.canBeReferencedViaImport()) return false + + if (this is KDocReference) return element.getQualifiedName().size == 1 + if (target.isExtension) return true // assume that any type of reference can use imports when resolved to extension + val referenceExpression = this.element as? KtNameReferenceExpression ?: return false if (CallTypeAndReceiver.detect(referenceExpression).receiver != null) return false if (element.parent is KtThisExpression || element.parent is KtSuperExpression) return false // TODO: it's a bad design of PSI tree, we should change it diff --git a/idea/testData/editor/optimizeImports/KDocReference.kt b/idea/testData/editor/optimizeImports/KDocReference.kt new file mode 100644 index 00000000000..74f6890e09e --- /dev/null +++ b/idea/testData/editor/optimizeImports/KDocReference.kt @@ -0,0 +1,12 @@ +// RUNTIME +import kotlin.concurrent.fixedRateTimer +import kotlin.concurrent.read +import java.util.ArrayList + +/** + * Reference to [ArrayList] + * Reference to [fixedRateTimer] + * Reference to [kotlin.concurrent.read] + */ +fun foo() { +} diff --git a/idea/testData/editor/optimizeImports/KDocReference.kt.after b/idea/testData/editor/optimizeImports/KDocReference.kt.after new file mode 100644 index 00000000000..ef56925a10b --- /dev/null +++ b/idea/testData/editor/optimizeImports/KDocReference.kt.after @@ -0,0 +1,11 @@ +// RUNTIME +import java.util.ArrayList +import kotlin.concurrent.fixedRateTimer + +/** + * Reference to [ArrayList] + * Reference to [fixedRateTimer] + * Reference to [kotlin.concurrent.read] + */ +fun foo() { +} diff --git a/idea/testData/inspections/unusedImport/inspectionData/expected.xml b/idea/testData/inspections/unusedImport/inspectionData/expected.xml index 0dfbe9c9b6c..0445e2ca863 100644 --- a/idea/testData/inspections/unusedImport/inspectionData/expected.xml +++ b/idea/testData/inspections/unusedImport/inspectionData/expected.xml @@ -88,4 +88,13 @@ Unused import directive Unused import directive + + + kDocReferences.kt + 2 + light_idea_test_case + + Unused import directive + Unused import directive + diff --git a/idea/testData/inspections/unusedImport/kDocReferences.kt b/idea/testData/inspections/unusedImport/kDocReferences.kt new file mode 100644 index 00000000000..de92f1a10b5 --- /dev/null +++ b/idea/testData/inspections/unusedImport/kDocReferences.kt @@ -0,0 +1,11 @@ +import kotlin.concurrent.fixedRateTimer +import kotlin.concurrent.read +import java.util.ArrayList + +/** + * Reference to [ArrayList] + * Reference to [fixedRateTimer] + * Reference to [kotlin.concurrent.read] + */ +fun foo() { +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/imports/OptimizeImportsTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/imports/OptimizeImportsTestGenerated.java index 4c9e195843f..0ef25e00ccc 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/imports/OptimizeImportsTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/imports/OptimizeImportsTestGenerated.java @@ -137,6 +137,12 @@ public class OptimizeImportsTestGenerated extends AbstractOptimizeImportsTest { doTest(fileName); } + @TestMetadata("KDocReference.kt") + public void testKDocReference() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/editor/optimizeImports/KDocReference.kt"); + doTest(fileName); + } + @TestMetadata("KT10226.kt") public void testKT10226() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/editor/optimizeImports/KT10226.kt");