From 708fead1cc8ff47c6af7a1b78a3ab113a1491f06 Mon Sep 17 00:00:00 2001 From: Dmitry Savvinov Date: Fri, 21 May 2021 11:35:26 +0300 Subject: [PATCH] Add debug strings to frontend scopes-related structures Such as: - PackageFragmentProviders, and, in particular, CompositePackageFragmentProviders - JavaPackageFragments - Scopes produced by those providers The rationale is that a lot of frontend-facing bugs (like red code) are easily recognizeable in resolution. But at that point you just see a bunch of scopes, without meaningful toStrings, you don't know who has produced them, and what's exactly wrong. With this commit it should make debugging slightly easier: now at least you'll be able to see that "this scope is a scope of package fragment for foo.bar of module baz" and decide whether the declaration should or should not have been resolved from such scope. --- .../compiler/TopDownAnalyzerFacadeForJVM.kt | 6 +++-- .../IncrementalPackageFragmentProvider.kt | 5 +++-- .../jvm/JvmResolverForModuleFactory.kt | 5 ++++- .../analyzer/AbstractResolverForProject.kt | 4 ++++ .../common/CommonResolverForModuleFactory.kt | 5 ++++- .../frontend/classic/ClassicFrontendFacade.kt | 3 ++- .../checkers/AbstractDiagnosticsTest.kt | 3 ++- .../metadata/KlibMetadataPackageFragment.kt | 7 +++--- ...KlibMetadataModuleDescriptorFactoryImpl.kt | 5 ++++- .../lazy/LazyJavaPackageFragmentProvider.kt | 2 ++ .../java/lazy/descriptors/JvmPackageScope.kt | 2 ++ .../descriptors/LazyJavaPackageFragment.kt | 4 ++-- .../kotlin/DeserializedDescriptorResolver.kt | 3 ++- .../runtime/components/RuntimeModuleData.kt | 7 +++++- .../impl/CompositePackageFragmentProvider.kt | 5 ++++- .../descriptors/impl/ModuleDescriptorImpl.kt | 9 +++++--- .../impl/PackageFragmentDescriptorImpl.kt | 6 ++++- .../descriptors/impl/SubpackagesScope.kt | 2 ++ .../DeserializedPackageFragmentImpl.kt | 13 ++++++----- .../MetadataPackageFragmentProvider.kt | 22 ++++++++++++++----- .../builtins/BuiltInsPackageFragmentImpl.kt | 3 +++ .../DeserializedPackageMemberScope.kt | 5 ++++- .../CompositeResolverForModuleFactory.kt | 8 ++++++- .../resolve/JsResolverForModuleFactory.kt | 5 ++++- .../lightClasses/IDELightClassContexts.kt | 7 +++++- .../DeserializerForClassfileDecompiler.kt | 6 +++-- ...KotlinMetadataDeserializerForDecompiler.kt | 7 ++++-- .../KlibMetadataDeserializerForDecompiler.kt | 7 ++++-- .../ide/konan/NativePlatformKindResolution.kt | 3 ++- .../NativeResolverForModuleFactory.kt | 5 ++++- .../kotlin/frontend/js/di/injection.kt | 4 +++- .../kotlin/backend/konan/injection.kt | 7 +++++- 32 files changed, 137 insertions(+), 48 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt index 47a9db8b2d3..2491c36cb9c 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt @@ -209,7 +209,8 @@ object TopDownAnalyzerFacadeForJVM { moduleClassResolver.compiledCodeResolver.packageFragmentProvider, dependenciesContainer.get(), dependenciesContainer.get() - ) + ), + "CompositeProvider@TopDownAnalyzerForJvm for dependencies ${dependenciesContext.module}" ) ) dependenciesContext.module @@ -283,7 +284,8 @@ object TopDownAnalyzerFacadeForJVM { listOf( container.get().packageFragmentProvider, container.get() - ) + additionalProviders + ) + additionalProviders, + "CompositeProvider@TopDownAnalzyerForJvm for $module" ) ) diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt index 9424cc30b9b..d31e9c0f737 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt @@ -104,8 +104,9 @@ class IncrementalPackageFragmentProvider( JvmPackagePartSource( partName, facadeName, packageProto, nameResolver, knownJvmBinaryClass = jvmBinaryClass ), - deserializationComponents, classNames = { emptyList() } - ) + deserializationComponents, + "scope for IncrementalMultifileClassPackageFragment for facadeName=$facadeName, packageFqName=$packageFqName, part $partName", + ) { emptyList() } } } ) diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmResolverForModuleFactory.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmResolverForModuleFactory.kt index 70c045d6660..13906ba1510 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmResolverForModuleFactory.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/JvmResolverForModuleFactory.kt @@ -133,6 +133,9 @@ class JvmResolverForModuleFactory( ) } - return ResolverForModule(CompositePackageFragmentProvider(providersForModule), container) + return ResolverForModule( + CompositePackageFragmentProvider(providersForModule, "CompositeProvider@JvmResolver for $moduleDescriptor"), + container + ) } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AbstractResolverForProject.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AbstractResolverForProject.kt index ec1c7f5240f..d238bb481c9 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AbstractResolverForProject.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/AbstractResolverForProject.kt @@ -269,6 +269,10 @@ private class DelegatingPackageFragmentProvider( return !packageOracle.packageExists(fqName) && fqName !in syntheticFilePackages } + + override fun toString(): String { + return "DelegatingProvider for $module in ${resolverForProject.name}" + } } private object DiagnoseUnknownModuleInfoReporter { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonResolverForModuleFactory.kt b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonResolverForModuleFactory.kt index d21edfbe947..1fe4b16591a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonResolverForModuleFactory.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/analyzer/common/CommonResolverForModuleFactory.kt @@ -112,7 +112,10 @@ class CommonResolverForModuleFactory( container.get() ) - return ResolverForModule(CompositePackageFragmentProvider(packageFragmentProviders), container) + return ResolverForModule( + CompositePackageFragmentProvider(packageFragmentProviders, "CompositeProvider@CommonResolver for $moduleDescriptor"), + container + ) } companion object { diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt index 5c487ceafc5..773aad1a414 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt @@ -225,7 +225,8 @@ class ClassicFrontendFacade( listOf( container.get().packageFragmentProvider, container.get().packageFragmentProvider - ) + ), + "CompositeProvider@ClassicFrontendFacade for $moduleDescriptor" ) ) diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt index 785d048eb33..d0d9e18a9f4 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTest.kt @@ -437,7 +437,8 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() { listOf( container.get().packageFragmentProvider, container.get().packageFragmentProvider - ) + ), + "CompositeProvider@AbstractDiagnosticsTest for $moduleDescriptor" ) ) diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataPackageFragment.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataPackageFragment.kt index aeb1319bd0c..d83275bd35c 100644 --- a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataPackageFragment.kt +++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataPackageFragment.kt @@ -94,10 +94,9 @@ abstract class KlibMetadataPackageFragment( nameResolver, KlibMetadataVersion.INSTANCE, /* containerSource = */ null, - components - ) { - loadClassNames() - } + components, + "scope for $this" + ) { loadClassNames() } } override fun getMemberScope(): DeserializedPackageMemberScope = _memberScope diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataModuleDescriptorFactoryImpl.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataModuleDescriptorFactoryImpl.kt index 0d06a5b7d17..9fc38a8493f 100644 --- a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataModuleDescriptorFactoryImpl.kt +++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/impl/KlibMetadataModuleDescriptorFactoryImpl.kt @@ -183,7 +183,10 @@ class KlibMetadataModuleDescriptorFactoryImpl( } return compositePackageFragmentAddend?.let { - CompositePackageFragmentProvider(listOf(it, provider)) + CompositePackageFragmentProvider( + listOf(it, provider), + "CompositeProvider@KlibMetadataModuleDescriptorFactory for $moduleDescriptor" + ) } ?: provider } diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/LazyJavaPackageFragmentProvider.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/LazyJavaPackageFragmentProvider.kt index ef6b4dd97e5..e174ff3154d 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/LazyJavaPackageFragmentProvider.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/LazyJavaPackageFragmentProvider.kt @@ -52,4 +52,6 @@ class LazyJavaPackageFragmentProvider( override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean) = getPackageFragment(fqName)?.getSubPackageFqNames().orEmpty() + + override fun toString(): String = "LazyJavaPackageFragmentProvider of module ${c.components.module}" } diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/JvmPackageScope.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/JvmPackageScope.kt index 30f6197cf3f..a8ba347a839 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/JvmPackageScope.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/JvmPackageScope.kt @@ -103,4 +103,6 @@ class JvmPackageScope( override fun recordLookup(name: Name, location: LookupLocation) { c.components.lookupTracker.record(location, packageFragment, name) } + + override fun toString(): String = "scope for $packageFragment" } diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageFragment.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageFragment.kt index 9087cd69d3b..dc8c45ec080 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageFragment.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageFragment.kt @@ -35,7 +35,7 @@ import org.jetbrains.kotlin.storage.getValue class LazyJavaPackageFragment( outerContext: LazyJavaResolverContext, - private val jPackage: JavaPackage + private val jPackage: JavaPackage, ) : PackageFragmentDescriptorImpl(outerContext.module, jPackage.fqName) { private val c = outerContext.childForClassOrPackage(this) @@ -86,7 +86,7 @@ class LazyJavaPackageFragment( override fun getMemberScope() = scope - override fun toString() = "Lazy Java package fragment: $fqName" + override fun toString() = "Lazy Java package fragment: $fqName of module ${c.components.module}" override fun getSource(): SourceElement = KotlinJvmBinaryPackageSourceElement(this) } diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.kt index 5195c89b22b..92cddcb35af 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.kt @@ -70,7 +70,8 @@ class DeserializedDescriptorResolver { kotlinClass.abiStability ) return DeserializedPackageMemberScope( - descriptor, packageProto, nameResolver, kotlinClass.classHeader.metadataVersion, source, components + descriptor, packageProto, nameResolver, kotlinClass.classHeader.metadataVersion, source, components, + "scope for $source in $descriptor" ) { // All classes are included into Java scope emptyList() diff --git a/core/descriptors.runtime/src/org/jetbrains/kotlin/descriptors/runtime/components/RuntimeModuleData.kt b/core/descriptors.runtime/src/org/jetbrains/kotlin/descriptors/runtime/components/RuntimeModuleData.kt index 5e0fff4de47..97a6d483817 100644 --- a/core/descriptors.runtime/src/org/jetbrains/kotlin/descriptors/runtime/components/RuntimeModuleData.kt +++ b/core/descriptors.runtime/src/org/jetbrains/kotlin/descriptors/runtime/components/RuntimeModuleData.kt @@ -92,7 +92,12 @@ class RuntimeModuleData private constructor( ) module.setDependencies(module) - module.initialize(CompositePackageFragmentProvider(listOf(javaDescriptorResolver.packageFragmentProvider, builtinsProvider))) + module.initialize( + CompositePackageFragmentProvider( + listOf(javaDescriptorResolver.packageFragmentProvider, builtinsProvider), + "CompositeProvider@RuntimeModuleData for $module" + ) + ) return RuntimeModuleData( deserializationComponentsForJava.components, diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/CompositePackageFragmentProvider.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/CompositePackageFragmentProvider.kt index 7dc148fd8fe..ca128238c24 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/CompositePackageFragmentProvider.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/CompositePackageFragmentProvider.kt @@ -22,7 +22,8 @@ import java.util.* import org.jetbrains.kotlin.name.Name class CompositePackageFragmentProvider(// can be modified from outside - private val providers: List + private val providers: List, + private val debugName: String ) : PackageFragmentProviderOptimized { init { @@ -55,4 +56,6 @@ class CompositePackageFragmentProvider(// can be modified from outside } return result } + + override fun toString(): String = debugName } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt index 660fc39bb45..e1d59c79715 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ModuleDescriptorImpl.kt @@ -101,9 +101,12 @@ class ModuleDescriptorImpl @JvmOverloads constructor( "Dependency module ${dependency.id} was not initialized by the time contents of dependent module ${this.id} were queried" } } - CompositePackageFragmentProvider(dependenciesDescriptors.map { - it.packageFragmentProviderForModuleContent!! - }) + CompositePackageFragmentProvider( + dependenciesDescriptors.map { + it.packageFragmentProviderForModuleContent!! + }, + "CompositeProvider@ModuleDescriptor for $name" + ) } private val isInitialized: Boolean diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PackageFragmentDescriptorImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PackageFragmentDescriptorImpl.kt index 8c4c19a6a44..1204b31feea 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PackageFragmentDescriptorImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PackageFragmentDescriptorImpl.kt @@ -22,12 +22,16 @@ import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor import org.jetbrains.kotlin.descriptors.SourceElement import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.resolve.descriptorUtil.module abstract class PackageFragmentDescriptorImpl( module: ModuleDescriptor, final override val fqName: FqName ) : DeclarationDescriptorNonRootImpl(module, Annotations.EMPTY, fqName.shortNameOrSpecial(), SourceElement.NO_SOURCE), PackageFragmentDescriptor { + // Not inlined in order to not capture ref on 'module' + private val debugString: String = "package $fqName of $module" + override fun accept(visitor: DeclarationDescriptorVisitor, data: D): R = visitor.visitPackageFragmentDescriptor(this, data) @@ -39,5 +43,5 @@ abstract class PackageFragmentDescriptorImpl( return SourceElement.NO_SOURCE } - override fun toString(): String = "package $fqName" + override fun toString(): String = debugString } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SubpackagesScope.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SubpackagesScope.kt index fbf0944f99f..2acb7745ad2 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SubpackagesScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SubpackagesScope.kt @@ -66,4 +66,6 @@ open class SubpackagesScope(private val moduleDescriptor: ModuleDescriptor, priv p.popIndent() p.println("}") } + + override fun toString(): String = "subpackages of $fqName from $moduleDescriptor" } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedPackageFragmentImpl.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedPackageFragmentImpl.kt index bd7018f7463..1f27a577f3f 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedPackageFragmentImpl.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedPackageFragmentImpl.kt @@ -49,12 +49,13 @@ abstract class DeserializedPackageFragmentImpl( _proto = null _memberScope = DeserializedPackageMemberScope( this, proto.`package`, nameResolver, metadataVersion, containerSource, components, - classNames = { - classDataFinder.allClassIds.filter { classId -> - !classId.isNestedClass && classId !in ClassDeserializer.BLACK_LIST - }.map { it.shortClassName } - } - ) + "scope of $this" + ) { + classDataFinder.allClassIds.filter { classId -> + !classId.isNestedClass && classId !in ClassDeserializer.BLACK_LIST + }.map { it.shortClassName } + } + } override fun getMemberScope(): MemberScope = _memberScope diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MetadataPackageFragmentProvider.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MetadataPackageFragmentProvider.kt index 06f1c5cec37..b10b7b55386 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MetadataPackageFragmentProvider.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MetadataPackageFragmentProvider.kt @@ -110,10 +110,18 @@ class MetadataPackageFragment( val stream = finder.findMetadata(ClassId(fqName, Name.identifier(partName))) ?: continue val (proto, nameResolver, version) = readProto(stream) - scopes.add(DeserializedPackageMemberScope( - this, proto.`package`, nameResolver, version, containerSource = null, components = components, - classNames = { emptyList() } - )) + scopes.add( + DeserializedPackageMemberScope( + this, + proto.`package`, + nameResolver, + version, + containerSource = null, + components = components, + debugName = "scope with top-level callables and type aliases (no classes) for package part $partName of $this", + classNames = { emptyList() }, + ) + ) } // Also add the deserialized scope that can load all classes from this package @@ -121,7 +129,9 @@ class MetadataPackageFragment( this, ProtoBuf.Package.getDefaultInstance(), NameResolverImpl(ProtoBuf.StringTable.getDefaultInstance(), ProtoBuf.QualifiedNameTable.getDefaultInstance()), BuiltInsBinaryVersion.INSTANCE, // Exact version does not matter here - containerSource = null, components = components, classNames = { emptyList() } + containerSource = null, components = components, + debugName = "scope for all classes of $this", + classNames = { emptyList() }, ) { override fun hasClass(name: Name): Boolean = hasTopLevelClass(name) override fun definitelyDoesNotContainName(name: Name) = false @@ -129,7 +139,7 @@ class MetadataPackageFragment( override fun getNonDeclaredClassifierNames(): Set? = null }) - return ChainedMemberScope.create("Metadata scope", scopes) + return ChainedMemberScope.create(".kotlin_metadata parts scope of $this", scopes) } override fun getMemberScope() = memberScope() diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/builtins/BuiltInsPackageFragmentImpl.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/builtins/BuiltInsPackageFragmentImpl.kt index 61f11ef06a1..20157c2821e 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/builtins/BuiltInsPackageFragmentImpl.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/builtins/BuiltInsPackageFragmentImpl.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.builtins.BuiltInsBinaryVersion import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.serialization.deserialization.DeserializedPackageFragmentImpl import org.jetbrains.kotlin.storage.StorageManager import java.io.InputStream @@ -52,4 +53,6 @@ class BuiltInsPackageFragmentImpl private constructor( return BuiltInsPackageFragmentImpl(fqName, storageManager, module, proto, version, isFallback) } } + + override fun toString(): String = "builtins package fragment for $fqName from $module" } 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 7d29bec637a..fede86f1e38 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 @@ -39,7 +39,8 @@ open class DeserializedPackageMemberScope( metadataVersion: BinaryVersion, containerSource: DeserializedContainerSource?, components: DeserializationComponents, - classNames: () -> Collection + private val debugName: String, + classNames: () -> Collection, ) : DeserializedMemberScope( components.createContext( packageDescriptor, nameResolver, TypeTable(proto.typeTable), @@ -74,4 +75,6 @@ open class DeserializedPackageMemberScope( override fun addEnumEntryDescriptors(result: MutableCollection, nameFilter: (Name) -> Boolean) { // Do nothing } + + override fun toString(): String = debugName } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/CompositeResolverForModuleFactory.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/CompositeResolverForModuleFactory.kt index 80534bfa3fd..299cae5d6a5 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/CompositeResolverForModuleFactory.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/CompositeResolverForModuleFactory.kt @@ -112,7 +112,13 @@ class CompositeResolverForModuleFactory( yieldAll(getNativeProvidersIfAny(moduleInfo, container)) }.toList() - return ResolverForModule(CompositePackageFragmentProvider(packageFragmentProviders), container) + return ResolverForModule( + CompositePackageFragmentProvider( + packageFragmentProviders, + "CompositeProvider@CompositeResolver for $moduleDescriptor" + ), + container + ) } private fun getCommonProvidersIfAny( diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/JsResolverForModuleFactory.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/JsResolverForModuleFactory.kt index 07ea2de2312..6d89e7adb0d 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/JsResolverForModuleFactory.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/JsResolverForModuleFactory.kt @@ -66,7 +66,10 @@ class JsResolverForModuleFactory( val libraryProviders = createPackageFragmentProvider(moduleInfo, container, moduleContext, moduleDescriptor) if (libraryProviders.isNotEmpty()) { - packageFragmentProvider = CompositePackageFragmentProvider(listOf(packageFragmentProvider) + libraryProviders) + packageFragmentProvider = CompositePackageFragmentProvider( + listOf(packageFragmentProvider) + libraryProviders, + "CompositeProvider@JsResolver for $moduleDescriptor" + ) } return ResolverForModule(packageFragmentProvider, container) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt index 313e01d6130..a352efe7acd 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IDELightClassContexts.kt @@ -403,7 +403,12 @@ internal object IDELightClassContexts { val resolveSession = container.get() - moduleDescriptor.initialize(CompositePackageFragmentProvider(listOf(resolveSession.packageFragmentProvider))) + moduleDescriptor.initialize( + CompositePackageFragmentProvider( + listOf(resolveSession.packageFragmentProvider), + "CompositeProvider@IDELightClassContexts for $moduleDescriptor" + ) + ) return resolveSession } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/DeserializerForClassfileDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/DeserializerForClassfileDecompiler.kt index c2baa33cbfb..d5eceae4983 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/DeserializerForClassfileDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/classFile/DeserializerForClassfileDecompiler.kt @@ -85,10 +85,12 @@ class DeserializerForClassfileDecompiler( return emptyList() } val (nameResolver, packageProto) = JvmProtoBufUtil.readPackageDataFrom(annotationData, strings) + val dummyPackageFragment = createDummyPackageFragment(header.packageName?.let(::FqName) ?: facadeFqName.parent()) val membersScope = DeserializedPackageMemberScope( - createDummyPackageFragment(header.packageName?.let(::FqName) ?: facadeFqName.parent()), + dummyPackageFragment, packageProto, nameResolver, header.metadataVersion, - JvmPackagePartSource(binaryClassForPackageClass, packageProto, nameResolver), deserializationComponents + JvmPackagePartSource(binaryClassForPackageClass, packageProto, nameResolver), deserializationComponents, + "scope of dummyPackageFragment ${dummyPackageFragment.fqName} in module $moduleDescriptor @DeserializerForClassfileDecompiler" ) { emptyList() } return membersScope.getContributedDescriptors().toList() } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/common/KotlinMetadataDeserializerForDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/common/KotlinMetadataDeserializerForDecompiler.kt index baeabc8ad0f..cf273370b70 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/common/KotlinMetadataDeserializerForDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/common/KotlinMetadataDeserializerForDecompiler.kt @@ -55,9 +55,12 @@ class KotlinMetadataDeserializerForDecompiler( "Was called for $facadeFqName; only members of $directoryPackageFqName package are expected." } + val dummyPackageFragment = createDummyPackageFragment(facadeFqName) val membersScope = DeserializedPackageMemberScope( - createDummyPackageFragment(facadeFqName), proto.`package`, nameResolver, metadataVersion, containerSource = null, - components = deserializationComponents + dummyPackageFragment, proto.`package`, nameResolver, metadataVersion, containerSource = null, + components = deserializationComponents, + debugName = "scope of dummyPackageFragment ${dummyPackageFragment.fqName} in module " + + "${deserializationComponents.moduleDescriptor} @KotlinMetadataDeserializerForDecompiler" ) { emptyList() } return membersScope.getContributedDescriptors().toList() diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/klib/KlibMetadataDeserializerForDecompiler.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/klib/KlibMetadataDeserializerForDecompiler.kt index ed89e8ed95f..a30b6e0b0c0 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/klib/KlibMetadataDeserializerForDecompiler.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/klib/KlibMetadataDeserializerForDecompiler.kt @@ -60,8 +60,11 @@ class KlibMetadataDeserializerForDecompiler( nameResolver, KlibMetadataVersion.INSTANCE, containerSource = null, - components = deserializationComponents - ) { emptyList() } + components = deserializationComponents, + classNames = { emptyList() }, + debugName = "scope of dummyPackageFragment $facadeFqName in ${deserializationComponents.moduleDescriptor} " + + "@KlibMetadataDeserializerForDecompiler" + ) return membersScope.getContributedDescriptors().toList() } diff --git a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt index 494d93bd35f..57d2fb12631 100644 --- a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt +++ b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativePlatformKindResolution.kt @@ -136,7 +136,8 @@ class NativePlatformKindResolution : IdePlatformKindResolution { functionInterfacePackageFragmentProvider(storageManager, builtInsModule), (metadataFactories.DefaultDeserializedDescriptorFactory as KlibMetadataModuleDescriptorFactoryImpl) .createForwardDeclarationHackPackagePartProvider(storageManager, builtInsModule) - ) + ), + "CompositeProvider@NativeBuiltins for $builtInsModule" ) ) diff --git a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/analyzer/NativeResolverForModuleFactory.kt b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/analyzer/NativeResolverForModuleFactory.kt index 65bdd545d39..b563d4ecf49 100644 --- a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/analyzer/NativeResolverForModuleFactory.kt +++ b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/analyzer/NativeResolverForModuleFactory.kt @@ -66,7 +66,10 @@ class NativeResolverForModuleFactory( ) if (klibPackageFragmentProvider != null) { - packageFragmentProvider = CompositePackageFragmentProvider(listOf(packageFragmentProvider, klibPackageFragmentProvider)) + packageFragmentProvider = CompositePackageFragmentProvider( + listOf(packageFragmentProvider, klibPackageFragmentProvider), + "CompositeProvider@NativeResolver for $moduleDescriptor" + ) } return ResolverForModule(packageFragmentProvider, container) diff --git a/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt b/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt index 476ed5de5e2..5becd72dcd8 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/frontend/js/di/injection.kt @@ -66,7 +66,9 @@ fun createContainerForJS( val packagePartProviders = mutableListOf(get().packageFragmentProvider) val moduleDescriptor = get() packagePartProviders += additionalPackages - moduleDescriptor.initialize(CompositePackageFragmentProvider(packagePartProviders)) + moduleDescriptor.initialize( + CompositePackageFragmentProvider(packagePartProviders, "CompositeProvider@createContainerForJS for $moduleDescriptor") + ) } return storageComponentContainer } diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/injection.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/injection.kt index 34df652f166..911f561bcb7 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/injection.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/injection.kt @@ -43,6 +43,11 @@ fun createTopDownAnalyzerProviderForKonan( val packagePartProviders = mutableListOf(get().packageFragmentProvider) val moduleDescriptor = get() packagePartProviders += additionalPackages - moduleDescriptor.initialize(CompositePackageFragmentProvider(packagePartProviders)) + moduleDescriptor.initialize( + CompositePackageFragmentProvider( + packagePartProviders, + "CompositeProvider@createTopDownAnalyzerProviderForKonan for module ${moduleContext.module}" + ) + ) } }