Exclude alias imported names from all-under imported packages when determining whether a type has been imported for completion.

#KT-13447 Fixed
This commit is contained in:
Ilya Gorbunov
2016-08-16 18:52:04 +03:00
parent b69661df8f
commit e34bc30bd7
3 changed files with 11 additions and 2 deletions
@@ -2,3 +2,4 @@ package ppp1
class MyClass1
class MyClass2
class MyClass7
@@ -1,5 +1,6 @@
import ppp1.*
import ppp3.MyClass6
import ppp1.MyClass7 as AnotherClass7
val v = My<caret>
@@ -22,3 +23,6 @@ val v = My<caret>
/* not imported */
// ORDER: MyClass4
/* not imported */
// ORDER: MyClass7
@@ -29,6 +29,7 @@ class ImportableFqNameClassifier(private val file: KtFile) {
private val preciseImports = HashSet<FqName>()
private val preciseImportPackages = HashSet<FqName>()
private val allUnderImports = HashSet<FqName>()
private val excludedImports = HashSet<FqName>()
init {
for (import in file.importDirectives) {
@@ -37,9 +38,12 @@ class ImportableFqNameClassifier(private val file: KtFile) {
if (importPath.isAllUnder) {
allUnderImports.add(fqName)
}
else {
else if (!importPath.hasAlias()) {
preciseImports.add(fqName)
preciseImportPackages.add(fqName.parent())
} else {
excludedImports.add(fqName)
// TODO: support aliased imports in completion
}
}
}
@@ -84,7 +88,7 @@ class ImportableFqNameClassifier(private val file: KtFile) {
}
private fun isImportedWithPreciseImport(name: FqName) = name in preciseImports
private fun isImportedWithAllUnderImport(name: FqName) = name.parent() in allUnderImports
private fun isImportedWithAllUnderImport(name: FqName) = name.parent() in allUnderImports && name !in excludedImports
private fun hasPreciseImportFromPackage(packageName: FqName) = packageName in preciseImportPackages
}