KT-10770 IDEA cannot keep import if a type is only referenced by kdoc.

#KT-10770 Fixed
This commit is contained in:
Valentin Kipyatkov
2016-04-25 20:40:40 +03:00
parent cd2161b37d
commit e1d8c72aa7
6 changed files with 53 additions and 0 deletions
@@ -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
+12
View File
@@ -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() {
}
@@ -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() {
}
@@ -88,4 +88,13 @@
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Unused import directive</problem_class>
<description>Unused import directive</description>
</problem>
<problem>
<file>kDocReferences.kt</file>
<line>2</line>
<module>light_idea_test_case</module>
<entry_point TYPE="file" FQNAME="kDocReferences.kt" />
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Unused import directive</problem_class>
<description>Unused import directive</description>
</problem>
</problems>
@@ -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() {
}
@@ -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");