diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportScope.kt index 8caf263706a..4f4035bc069 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportScope.kt @@ -22,15 +22,17 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.scopes.BaseImportingScope import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter -import org.jetbrains.kotlin.resolve.scopes.ResolutionScope +import org.jetbrains.kotlin.resolve.scopes.MemberScope +import org.jetbrains.kotlin.resolve.scopes.computeAllNames import org.jetbrains.kotlin.utils.Printer +import org.jetbrains.kotlin.utils.addToStdlib.flatMapToNullable class AllUnderImportScope( descriptor: DeclarationDescriptor, excludedImportNames: Collection ) : BaseImportingScope(null) { - private val scopes: List = if (descriptor is ClassDescriptor) { + private val scopes: List = if (descriptor is ClassDescriptor) { listOf(descriptor.staticScope, descriptor.unsubstitutedInnerClassesScope) } else { @@ -49,6 +51,8 @@ class AllUnderImportScope( excludedImportNames.mapNotNull { if (it.parent() == fqName) it.shortName() else null }.toSet() } + override fun computeImportedNames(): Set? = scopes.flatMapToNullable(hashSetOf(), MemberScope::computeAllNames) + override fun getContributedDescriptors( kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean, diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/LazyExplicitImportScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/LazyExplicitImportScope.kt index 49cc59a5544..e2f62db0519 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/LazyExplicitImportScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/LazyExplicitImportScope.kt @@ -101,6 +101,8 @@ class LazyExplicitImportScope( return descriptors } + override fun computeImportedNames() = setOf(aliasName) + override fun printStructure(p: Printer) { p.println(this::class.java.simpleName, ": ", aliasName) } @@ -148,4 +150,4 @@ class LazyExplicitImportScope( private fun Collection.choseOnlyVisibleOrAll() = filter { isVisible(it, packageFragmentForVisibilityCheck, position = QualifierPosition.IMPORT) }. takeIf { it.isNotEmpty() } ?: this -} \ No newline at end of file +} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeFactory.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeFactory.kt index 52ded343428..1f195710a4e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeFactory.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeFactory.kt @@ -27,10 +27,7 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtImportDirective import org.jetbrains.kotlin.psi.KtImportsFactory import org.jetbrains.kotlin.resolve.* -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.scopes.* import org.jetbrains.kotlin.resolve.source.KotlinSourceElement import org.jetbrains.kotlin.script.getScriptExternalDependencies import org.jetbrains.kotlin.storage.StorageManager @@ -220,6 +217,8 @@ class FileScopeFactory( ).filter { it !is PackageViewDescriptor } // subpackages of the current package not accessible by the short name } + override fun computeImportedNames() = packageView.memberScope.computeAllNames() + override fun toString() = "Scope for current package (${filteringKind.name})" override fun printStructure(p: Printer) { diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/scopes/Scopes.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/scopes/Scopes.kt index dbeae8096ee..a4f04b0e0b1 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/scopes/Scopes.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/scopes/Scopes.kt @@ -121,12 +121,15 @@ interface ImportingScope : HierarchicalScope { return getContributedDescriptors(kindFilter, nameFilter, changeNamesForAliased = false) } + fun computeImportedNames(): Set? + object Empty : BaseImportingScope(null) { override fun printStructure(p: Printer) { p.println("ImportingScope.Empty") } override fun definitelyDoesNotContainName(name: Name) = true + override fun computeImportedNames() = emptySet() } } diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/scopes/SubpackagesImportingScope.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/scopes/SubpackagesImportingScope.kt index 6590af831e1..ac0db8a37df 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/scopes/SubpackagesImportingScope.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/scopes/SubpackagesImportingScope.kt @@ -48,4 +48,5 @@ class SubpackagesImportingScope( //TODO: kept old behavior, but it seems very strange (super call seems more applicable) override fun getContributedDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean, changeNamesForAliased: Boolean): Collection = emptyList() + override fun computeImportedNames() = emptySet() } diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/scopes/utils/ScopeUtils.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/scopes/utils/ScopeUtils.kt index adf068a4785..7eb021a35ff 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/scopes/utils/ScopeUtils.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/scopes/utils/ScopeUtils.kt @@ -122,6 +122,8 @@ private class MemberScopeToImportingScopeAdapter(override val parent: ImportingS override fun toString() = "${this::class.java.simpleName} for $memberScope" + override fun computeImportedNames() = memberScope.computeAllNames() + override fun printStructure(p: Printer) { p.println(this::class.java.simpleName) p.pushIndent() diff --git a/idea/ide-common/src/org/jetbrains/kotlin/resolve/scopes/ExplicitImportsScope.kt b/idea/ide-common/src/org/jetbrains/kotlin/resolve/scopes/ExplicitImportsScope.kt index c24fb63d8bc..b9fb969d86d 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/resolve/scopes/ExplicitImportsScope.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/resolve/scopes/ExplicitImportsScope.kt @@ -38,6 +38,8 @@ class ExplicitImportsScope(private val descriptors: Collection Boolean, changeNamesForAliased: Boolean) = descriptors + override fun computeImportedNames() = descriptors.mapTo(hashSetOf()) { it.name } + override fun printStructure(p: Printer) { p.println(this::class.java.name) }