diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportScope.kt index 4f4035bc069..35aa948ec9c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AllUnderImportScope.kt @@ -86,6 +86,10 @@ class AllUnderImportScope( return scopes.flatMap { it.getContributedFunctions(name, location) } } + override fun recordLookup(name: Name, location: LookupLocation) { + scopes.forEach { it.recordLookup(name, location) } + } + override fun printStructure(p: Printer) { p.println(this::class.java.simpleName) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt index d62b6e05969..fc6a4b3804b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt @@ -198,6 +198,13 @@ class LazyImportResolver( } fun definitelyDoesNotContainName(name: Name) = allNames?.let { name !in it } == true + + fun recordLookup(name: Name, location: LookupLocation) { + if (allNames == null) return + indexedImports.importsForName(name).forEach { + getImportScope(it).recordLookup(name, location) + } + } } class LazyImportScope( @@ -278,5 +285,10 @@ class LazyImportScope( } override fun definitelyDoesNotContainName(name: Name) = importResolver.definitelyDoesNotContainName(name) + + override fun recordLookup(name: Name, location: LookupLocation) { + importResolver.recordLookup(name, location) + } + override fun computeImportedNames() = importResolver.allNames } diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/AbstractScopeAdapter.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/AbstractScopeAdapter.kt index b98f5f06998..f6a889c55e9 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/AbstractScopeAdapter.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/AbstractScopeAdapter.kt @@ -57,6 +57,9 @@ abstract class AbstractScopeAdapter : MemberScope { override fun getVariableNames() = workerScope.getVariableNames() override fun getClassifierNames() = workerScope.getClassifierNames() + override fun recordLookup(name: Name, location: LookupLocation) { + workerScope.recordLookup(name, location) + } override fun printScopeStructure(p: Printer) { p.println(this::class.java.simpleName, " {") diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ChainedMemberScope.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ChainedMemberScope.kt index fd521dd5436..50cd3e5841e 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ChainedMemberScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ChainedMemberScope.kt @@ -45,6 +45,10 @@ class ChainedMemberScope( override fun getVariableNames() = scopes.flatMapTo(mutableSetOf()) { it.getVariableNames() } override fun getClassifierNames(): Set? = scopes.flatMapClassifierNamesOrNull() + override fun recordLookup(name: Name, location: LookupLocation) { + scopes.forEach { it.recordLookup(name, location) } + } + override fun toString() = debugName override fun printScopeStructure(p: Printer) { diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedPackageMemberScope.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedPackageMemberScope.kt index bc9b7bef674..7b585b775ab 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedPackageMemberScope.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedPackageMemberScope.kt @@ -55,10 +55,14 @@ open class DeserializedPackageMemberScope( override fun getContributedClassifier(name: Name, location: LookupLocation): ClassifierDescriptor? { - c.components.lookupTracker.record(location, packageDescriptor, name) + recordLookup(name, location) return super.getContributedClassifier(name, location) } + override fun recordLookup(name: Name, location: LookupLocation) { + c.components.lookupTracker.record(location, packageDescriptor, name) + } + override fun getNonDeclaredFunctionNames(): Set = emptySet() override fun getNonDeclaredVariableNames(): Set = emptySet()