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");