From 17ac168b3366ee1dcd224321f6f3891f44156a2e Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 11 Feb 2016 18:16:55 +0300 Subject: [PATCH] KT-10621 Non-top level packages shown after "@" in completion #KT-10621 Fixed --- .../jetbrains/kotlin/resolve/AllUnderImportScope.kt | 5 ++++- .../kotlin/resolve/lazy/FileScopeProviderImpl.kt | 11 ++++++++--- .../basic/common/annotations/TopLevelAnnotation1.kt | 6 ++++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportScope.kt index 4939ccddd2d..b9d5ac71e30 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportScope.kt @@ -56,7 +56,10 @@ class AllUnderImportScope( { it !in excludedNames && nameFilter(it) } } - return scopes.flatMap { it.getContributedDescriptors(kindFilter, nameFilterToUse) } + val noPackagesKindFilter = kindFilter.withoutKinds(DescriptorKindFilter.PACKAGES_MASK) + return scopes + .flatMap { it.getContributedDescriptors(noPackagesKindFilter, nameFilterToUse) } + .filter { it !is PackageViewDescriptor } // subpackages are not imported } override fun getContributedClassifier(name: Name, location: LookupLocation): ClassifierDescriptor? { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeProviderImpl.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeProviderImpl.kt index c3a941ababa..f3c85f292dc 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeProviderImpl.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeProviderImpl.kt @@ -28,8 +28,10 @@ import org.jetbrains.kotlin.resolve.BindingTrace import org.jetbrains.kotlin.resolve.QualifiedExpressionResolver import org.jetbrains.kotlin.resolve.TemporaryBindingTrace import org.jetbrains.kotlin.resolve.bindingContextUtil.recordScope -import org.jetbrains.kotlin.resolve.scopes.* -import org.jetbrains.kotlin.resolve.scopes.utils.memberScopeAsImportingScope +import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter +import org.jetbrains.kotlin.resolve.scopes.ImportingScope +import org.jetbrains.kotlin.resolve.scopes.LexicalScope +import org.jetbrains.kotlin.resolve.scopes.SubpackagesImportingScope import org.jetbrains.kotlin.resolve.source.KotlinSourceElement import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.storage.getValue @@ -177,7 +179,10 @@ open class FileScopeProviderImpl( override fun getContributedDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean): Collection { // we do not perform any filtering by visibility here because all descriptors from both visible/invisible filter scopes are to be added anyway if (filteringKind == FilteringKind.INVISIBLE_CLASSES) return listOf() - return scope.getContributedDescriptors(kindFilter, { name -> name !in excludedNames && nameFilter(name) }) + return scope.getContributedDescriptors( + kindFilter.withoutKinds(DescriptorKindFilter.PACKAGES_MASK), + { name -> name !in excludedNames && nameFilter(name) } + ).filter { it !is PackageViewDescriptor } // subpackages of the current package not accessible by the short name } override fun toString() = "Scope for current package (${filteringKind.name})" diff --git a/idea/idea-completion/testData/basic/common/annotations/TopLevelAnnotation1.kt b/idea/idea-completion/testData/basic/common/annotations/TopLevelAnnotation1.kt index d1bcbcb537d..3f3092629a9 100644 --- a/idea/idea-completion/testData/basic/common/annotations/TopLevelAnnotation1.kt +++ b/idea/idea-completion/testData/basic/common/annotations/TopLevelAnnotation1.kt @@ -1,3 +1,5 @@ +package java + annotation class Hello val v = 1 @@ -8,3 +10,7 @@ val v = 1 // EXIST: Suppress // ABSENT: String // ABSENT: v +// EXIST: kotlin +// ABSENT: collections +// ABSENT: io +// ABSENT: lang