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.
This commit is contained in:
committed by
teamcityserver
parent
a51c65ed60
commit
708fead1cc
+4
-2
@@ -209,7 +209,8 @@ object TopDownAnalyzerFacadeForJVM {
|
|||||||
moduleClassResolver.compiledCodeResolver.packageFragmentProvider,
|
moduleClassResolver.compiledCodeResolver.packageFragmentProvider,
|
||||||
dependenciesContainer.get<JvmBuiltInsPackageFragmentProvider>(),
|
dependenciesContainer.get<JvmBuiltInsPackageFragmentProvider>(),
|
||||||
dependenciesContainer.get<OptionalAnnotationPackageFragmentProvider>()
|
dependenciesContainer.get<OptionalAnnotationPackageFragmentProvider>()
|
||||||
)
|
),
|
||||||
|
"CompositeProvider@TopDownAnalyzerForJvm for dependencies ${dependenciesContext.module}"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
dependenciesContext.module
|
dependenciesContext.module
|
||||||
@@ -283,7 +284,8 @@ object TopDownAnalyzerFacadeForJVM {
|
|||||||
listOf(
|
listOf(
|
||||||
container.get<KotlinCodeAnalyzer>().packageFragmentProvider,
|
container.get<KotlinCodeAnalyzer>().packageFragmentProvider,
|
||||||
container.get<OptionalAnnotationPackageFragmentProvider>()
|
container.get<OptionalAnnotationPackageFragmentProvider>()
|
||||||
) + additionalProviders
|
) + additionalProviders,
|
||||||
|
"CompositeProvider@TopDownAnalzyerForJvm for $module"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -104,8 +104,9 @@ class IncrementalPackageFragmentProvider(
|
|||||||
JvmPackagePartSource(
|
JvmPackagePartSource(
|
||||||
partName, facadeName, packageProto, nameResolver, knownJvmBinaryClass = jvmBinaryClass
|
partName, facadeName, packageProto, nameResolver, knownJvmBinaryClass = jvmBinaryClass
|
||||||
),
|
),
|
||||||
deserializationComponents, classNames = { emptyList() }
|
deserializationComponents,
|
||||||
)
|
"scope for IncrementalMultifileClassPackageFragment for facadeName=$facadeName, packageFqName=$packageFqName, part $partName",
|
||||||
|
) { emptyList() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
+4
-1
@@ -133,6 +133,9 @@ class JvmResolverForModuleFactory(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return ResolverForModule(CompositePackageFragmentProvider(providersForModule), container)
|
return ResolverForModule(
|
||||||
|
CompositePackageFragmentProvider(providersForModule, "CompositeProvider@JvmResolver for $moduleDescriptor"),
|
||||||
|
container
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -269,6 +269,10 @@ private class DelegatingPackageFragmentProvider<M : ModuleInfo>(
|
|||||||
|
|
||||||
return !packageOracle.packageExists(fqName) && fqName !in syntheticFilePackages
|
return !packageOracle.packageExists(fqName) && fqName !in syntheticFilePackages
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return "DelegatingProvider for $module in ${resolverForProject.name}"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private object DiagnoseUnknownModuleInfoReporter {
|
private object DiagnoseUnknownModuleInfoReporter {
|
||||||
|
|||||||
+4
-1
@@ -112,7 +112,10 @@ class CommonResolverForModuleFactory(
|
|||||||
container.get<MetadataPackageFragmentProvider>()
|
container.get<MetadataPackageFragmentProvider>()
|
||||||
)
|
)
|
||||||
|
|
||||||
return ResolverForModule(CompositePackageFragmentProvider(packageFragmentProviders), container)
|
return ResolverForModule(
|
||||||
|
CompositePackageFragmentProvider(packageFragmentProviders, "CompositeProvider@CommonResolver for $moduleDescriptor"),
|
||||||
|
container
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
+2
-1
@@ -225,7 +225,8 @@ class ClassicFrontendFacade(
|
|||||||
listOf(
|
listOf(
|
||||||
container.get<KotlinCodeAnalyzer>().packageFragmentProvider,
|
container.get<KotlinCodeAnalyzer>().packageFragmentProvider,
|
||||||
container.get<JavaDescriptorResolver>().packageFragmentProvider
|
container.get<JavaDescriptorResolver>().packageFragmentProvider
|
||||||
)
|
),
|
||||||
|
"CompositeProvider@ClassicFrontendFacade for $moduleDescriptor"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -437,7 +437,8 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
|
|||||||
listOf(
|
listOf(
|
||||||
container.get<KotlinCodeAnalyzer>().packageFragmentProvider,
|
container.get<KotlinCodeAnalyzer>().packageFragmentProvider,
|
||||||
container.get<JavaDescriptorResolver>().packageFragmentProvider
|
container.get<JavaDescriptorResolver>().packageFragmentProvider
|
||||||
)
|
),
|
||||||
|
"CompositeProvider@AbstractDiagnosticsTest for $moduleDescriptor"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+3
-4
@@ -94,10 +94,9 @@ abstract class KlibMetadataPackageFragment(
|
|||||||
nameResolver,
|
nameResolver,
|
||||||
KlibMetadataVersion.INSTANCE,
|
KlibMetadataVersion.INSTANCE,
|
||||||
/* containerSource = */ null,
|
/* containerSource = */ null,
|
||||||
components
|
components,
|
||||||
) {
|
"scope for $this"
|
||||||
loadClassNames()
|
) { loadClassNames() }
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getMemberScope(): DeserializedPackageMemberScope = _memberScope
|
override fun getMemberScope(): DeserializedPackageMemberScope = _memberScope
|
||||||
|
|||||||
+4
-1
@@ -183,7 +183,10 @@ class KlibMetadataModuleDescriptorFactoryImpl(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return compositePackageFragmentAddend?.let {
|
return compositePackageFragmentAddend?.let {
|
||||||
CompositePackageFragmentProvider(listOf(it, provider))
|
CompositePackageFragmentProvider(
|
||||||
|
listOf(it, provider),
|
||||||
|
"CompositeProvider@KlibMetadataModuleDescriptorFactory for $moduleDescriptor"
|
||||||
|
)
|
||||||
} ?: provider
|
} ?: provider
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
@@ -52,4 +52,6 @@ class LazyJavaPackageFragmentProvider(
|
|||||||
|
|
||||||
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean) =
|
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean) =
|
||||||
getPackageFragment(fqName)?.getSubPackageFqNames().orEmpty()
|
getPackageFragment(fqName)?.getSubPackageFqNames().orEmpty()
|
||||||
|
|
||||||
|
override fun toString(): String = "LazyJavaPackageFragmentProvider of module ${c.components.module}"
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -103,4 +103,6 @@ class JvmPackageScope(
|
|||||||
override fun recordLookup(name: Name, location: LookupLocation) {
|
override fun recordLookup(name: Name, location: LookupLocation) {
|
||||||
c.components.lookupTracker.record(location, packageFragment, name)
|
c.components.lookupTracker.record(location, packageFragment, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun toString(): String = "scope for $packageFragment"
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -35,7 +35,7 @@ import org.jetbrains.kotlin.storage.getValue
|
|||||||
|
|
||||||
class LazyJavaPackageFragment(
|
class LazyJavaPackageFragment(
|
||||||
outerContext: LazyJavaResolverContext,
|
outerContext: LazyJavaResolverContext,
|
||||||
private val jPackage: JavaPackage
|
private val jPackage: JavaPackage,
|
||||||
) : PackageFragmentDescriptorImpl(outerContext.module, jPackage.fqName) {
|
) : PackageFragmentDescriptorImpl(outerContext.module, jPackage.fqName) {
|
||||||
private val c = outerContext.childForClassOrPackage(this)
|
private val c = outerContext.childForClassOrPackage(this)
|
||||||
|
|
||||||
@@ -86,7 +86,7 @@ class LazyJavaPackageFragment(
|
|||||||
|
|
||||||
override fun getMemberScope() = scope
|
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)
|
override fun getSource(): SourceElement = KotlinJvmBinaryPackageSourceElement(this)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -70,7 +70,8 @@ class DeserializedDescriptorResolver {
|
|||||||
kotlinClass.abiStability
|
kotlinClass.abiStability
|
||||||
)
|
)
|
||||||
return DeserializedPackageMemberScope(
|
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
|
// All classes are included into Java scope
|
||||||
emptyList()
|
emptyList()
|
||||||
|
|||||||
+6
-1
@@ -92,7 +92,12 @@ class RuntimeModuleData private constructor(
|
|||||||
)
|
)
|
||||||
|
|
||||||
module.setDependencies(module)
|
module.setDependencies(module)
|
||||||
module.initialize(CompositePackageFragmentProvider(listOf(javaDescriptorResolver.packageFragmentProvider, builtinsProvider)))
|
module.initialize(
|
||||||
|
CompositePackageFragmentProvider(
|
||||||
|
listOf(javaDescriptorResolver.packageFragmentProvider, builtinsProvider),
|
||||||
|
"CompositeProvider@RuntimeModuleData for $module"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
return RuntimeModuleData(
|
return RuntimeModuleData(
|
||||||
deserializationComponentsForJava.components,
|
deserializationComponentsForJava.components,
|
||||||
|
|||||||
+4
-1
@@ -22,7 +22,8 @@ import java.util.*
|
|||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
class CompositePackageFragmentProvider(// can be modified from outside
|
class CompositePackageFragmentProvider(// can be modified from outside
|
||||||
private val providers: List<PackageFragmentProvider>
|
private val providers: List<PackageFragmentProvider>,
|
||||||
|
private val debugName: String
|
||||||
) : PackageFragmentProviderOptimized {
|
) : PackageFragmentProviderOptimized {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
@@ -55,4 +56,6 @@ class CompositePackageFragmentProvider(// can be modified from outside
|
|||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun toString(): String = debugName
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
"Dependency module ${dependency.id} was not initialized by the time contents of dependent module ${this.id} were queried"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CompositePackageFragmentProvider(dependenciesDescriptors.map {
|
CompositePackageFragmentProvider(
|
||||||
it.packageFragmentProviderForModuleContent!!
|
dependenciesDescriptors.map {
|
||||||
})
|
it.packageFragmentProviderForModuleContent!!
|
||||||
|
},
|
||||||
|
"CompositeProvider@ModuleDescriptor for $name"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val isInitialized: Boolean
|
private val isInitialized: Boolean
|
||||||
|
|||||||
+5
-1
@@ -22,12 +22,16 @@ import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.SourceElement
|
import org.jetbrains.kotlin.descriptors.SourceElement
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||||
|
|
||||||
abstract class PackageFragmentDescriptorImpl(
|
abstract class PackageFragmentDescriptorImpl(
|
||||||
module: ModuleDescriptor,
|
module: ModuleDescriptor,
|
||||||
final override val fqName: FqName
|
final override val fqName: FqName
|
||||||
) : DeclarationDescriptorNonRootImpl(module, Annotations.EMPTY, fqName.shortNameOrSpecial(), SourceElement.NO_SOURCE),
|
) : DeclarationDescriptorNonRootImpl(module, Annotations.EMPTY, fqName.shortNameOrSpecial(), SourceElement.NO_SOURCE),
|
||||||
PackageFragmentDescriptor {
|
PackageFragmentDescriptor {
|
||||||
|
// Not inlined in order to not capture ref on 'module'
|
||||||
|
private val debugString: String = "package $fqName of $module"
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: DeclarationDescriptorVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: DeclarationDescriptorVisitor<R, D>, data: D): R =
|
||||||
visitor.visitPackageFragmentDescriptor(this, data)
|
visitor.visitPackageFragmentDescriptor(this, data)
|
||||||
|
|
||||||
@@ -39,5 +43,5 @@ abstract class PackageFragmentDescriptorImpl(
|
|||||||
return SourceElement.NO_SOURCE
|
return SourceElement.NO_SOURCE
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun toString(): String = "package $fqName"
|
override fun toString(): String = debugString
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,4 +66,6 @@ open class SubpackagesScope(private val moduleDescriptor: ModuleDescriptor, priv
|
|||||||
p.popIndent()
|
p.popIndent()
|
||||||
p.println("}")
|
p.println("}")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun toString(): String = "subpackages of $fqName from $moduleDescriptor"
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-6
@@ -49,12 +49,13 @@ abstract class DeserializedPackageFragmentImpl(
|
|||||||
_proto = null
|
_proto = null
|
||||||
_memberScope = DeserializedPackageMemberScope(
|
_memberScope = DeserializedPackageMemberScope(
|
||||||
this, proto.`package`, nameResolver, metadataVersion, containerSource, components,
|
this, proto.`package`, nameResolver, metadataVersion, containerSource, components,
|
||||||
classNames = {
|
"scope of $this"
|
||||||
classDataFinder.allClassIds.filter { classId ->
|
) {
|
||||||
!classId.isNestedClass && classId !in ClassDeserializer.BLACK_LIST
|
classDataFinder.allClassIds.filter { classId ->
|
||||||
}.map { it.shortClassName }
|
!classId.isNestedClass && classId !in ClassDeserializer.BLACK_LIST
|
||||||
}
|
}.map { it.shortClassName }
|
||||||
)
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getMemberScope(): MemberScope = _memberScope
|
override fun getMemberScope(): MemberScope = _memberScope
|
||||||
|
|||||||
+16
-6
@@ -110,10 +110,18 @@ class MetadataPackageFragment(
|
|||||||
val stream = finder.findMetadata(ClassId(fqName, Name.identifier(partName))) ?: continue
|
val stream = finder.findMetadata(ClassId(fqName, Name.identifier(partName))) ?: continue
|
||||||
val (proto, nameResolver, version) = readProto(stream)
|
val (proto, nameResolver, version) = readProto(stream)
|
||||||
|
|
||||||
scopes.add(DeserializedPackageMemberScope(
|
scopes.add(
|
||||||
this, proto.`package`, nameResolver, version, containerSource = null, components = components,
|
DeserializedPackageMemberScope(
|
||||||
classNames = { emptyList() }
|
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
|
// Also add the deserialized scope that can load all classes from this package
|
||||||
@@ -121,7 +129,9 @@ class MetadataPackageFragment(
|
|||||||
this, ProtoBuf.Package.getDefaultInstance(),
|
this, ProtoBuf.Package.getDefaultInstance(),
|
||||||
NameResolverImpl(ProtoBuf.StringTable.getDefaultInstance(), ProtoBuf.QualifiedNameTable.getDefaultInstance()),
|
NameResolverImpl(ProtoBuf.StringTable.getDefaultInstance(), ProtoBuf.QualifiedNameTable.getDefaultInstance()),
|
||||||
BuiltInsBinaryVersion.INSTANCE, // Exact version does not matter here
|
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 hasClass(name: Name): Boolean = hasTopLevelClass(name)
|
||||||
override fun definitelyDoesNotContainName(name: Name) = false
|
override fun definitelyDoesNotContainName(name: Name) = false
|
||||||
@@ -129,7 +139,7 @@ class MetadataPackageFragment(
|
|||||||
override fun getNonDeclaredClassifierNames(): Set<Name>? = null
|
override fun getNonDeclaredClassifierNames(): Set<Name>? = null
|
||||||
})
|
})
|
||||||
|
|
||||||
return ChainedMemberScope.create("Metadata scope", scopes)
|
return ChainedMemberScope.create(".kotlin_metadata parts scope of $this", scopes)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getMemberScope() = memberScope()
|
override fun getMemberScope() = memberScope()
|
||||||
|
|||||||
+3
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
|||||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||||
import org.jetbrains.kotlin.metadata.builtins.BuiltInsBinaryVersion
|
import org.jetbrains.kotlin.metadata.builtins.BuiltInsBinaryVersion
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.DeserializedPackageFragmentImpl
|
import org.jetbrains.kotlin.serialization.deserialization.DeserializedPackageFragmentImpl
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
@@ -52,4 +53,6 @@ class BuiltInsPackageFragmentImpl private constructor(
|
|||||||
return BuiltInsPackageFragmentImpl(fqName, storageManager, module, proto, version, isFallback)
|
return BuiltInsPackageFragmentImpl(fqName, storageManager, module, proto, version, isFallback)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun toString(): String = "builtins package fragment for $fqName from $module"
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-1
@@ -39,7 +39,8 @@ open class DeserializedPackageMemberScope(
|
|||||||
metadataVersion: BinaryVersion,
|
metadataVersion: BinaryVersion,
|
||||||
containerSource: DeserializedContainerSource?,
|
containerSource: DeserializedContainerSource?,
|
||||||
components: DeserializationComponents,
|
components: DeserializationComponents,
|
||||||
classNames: () -> Collection<Name>
|
private val debugName: String,
|
||||||
|
classNames: () -> Collection<Name>,
|
||||||
) : DeserializedMemberScope(
|
) : DeserializedMemberScope(
|
||||||
components.createContext(
|
components.createContext(
|
||||||
packageDescriptor, nameResolver, TypeTable(proto.typeTable),
|
packageDescriptor, nameResolver, TypeTable(proto.typeTable),
|
||||||
@@ -74,4 +75,6 @@ open class DeserializedPackageMemberScope(
|
|||||||
override fun addEnumEntryDescriptors(result: MutableCollection<DeclarationDescriptor>, nameFilter: (Name) -> Boolean) {
|
override fun addEnumEntryDescriptors(result: MutableCollection<DeclarationDescriptor>, nameFilter: (Name) -> Boolean) {
|
||||||
// Do nothing
|
// Do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun toString(): String = debugName
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-1
@@ -112,7 +112,13 @@ class CompositeResolverForModuleFactory(
|
|||||||
yieldAll(getNativeProvidersIfAny(moduleInfo, container))
|
yieldAll(getNativeProvidersIfAny(moduleInfo, container))
|
||||||
}.toList()
|
}.toList()
|
||||||
|
|
||||||
return ResolverForModule(CompositePackageFragmentProvider(packageFragmentProviders), container)
|
return ResolverForModule(
|
||||||
|
CompositePackageFragmentProvider(
|
||||||
|
packageFragmentProviders,
|
||||||
|
"CompositeProvider@CompositeResolver for $moduleDescriptor"
|
||||||
|
),
|
||||||
|
container
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getCommonProvidersIfAny(
|
private fun getCommonProvidersIfAny(
|
||||||
|
|||||||
+4
-1
@@ -66,7 +66,10 @@ class JsResolverForModuleFactory(
|
|||||||
val libraryProviders = createPackageFragmentProvider(moduleInfo, container, moduleContext, moduleDescriptor)
|
val libraryProviders = createPackageFragmentProvider(moduleInfo, container, moduleContext, moduleDescriptor)
|
||||||
|
|
||||||
if (libraryProviders.isNotEmpty()) {
|
if (libraryProviders.isNotEmpty()) {
|
||||||
packageFragmentProvider = CompositePackageFragmentProvider(listOf(packageFragmentProvider) + libraryProviders)
|
packageFragmentProvider = CompositePackageFragmentProvider(
|
||||||
|
listOf(packageFragmentProvider) + libraryProviders,
|
||||||
|
"CompositeProvider@JsResolver for $moduleDescriptor"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return ResolverForModule(packageFragmentProvider, container)
|
return ResolverForModule(packageFragmentProvider, container)
|
||||||
|
|||||||
+6
-1
@@ -403,7 +403,12 @@ internal object IDELightClassContexts {
|
|||||||
|
|
||||||
|
|
||||||
val resolveSession = container.get<ResolveSession>()
|
val resolveSession = container.get<ResolveSession>()
|
||||||
moduleDescriptor.initialize(CompositePackageFragmentProvider(listOf(resolveSession.packageFragmentProvider)))
|
moduleDescriptor.initialize(
|
||||||
|
CompositePackageFragmentProvider(
|
||||||
|
listOf(resolveSession.packageFragmentProvider),
|
||||||
|
"CompositeProvider@IDELightClassContexts for $moduleDescriptor"
|
||||||
|
)
|
||||||
|
)
|
||||||
return resolveSession
|
return resolveSession
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-2
@@ -85,10 +85,12 @@ class DeserializerForClassfileDecompiler(
|
|||||||
return emptyList()
|
return emptyList()
|
||||||
}
|
}
|
||||||
val (nameResolver, packageProto) = JvmProtoBufUtil.readPackageDataFrom(annotationData, strings)
|
val (nameResolver, packageProto) = JvmProtoBufUtil.readPackageDataFrom(annotationData, strings)
|
||||||
|
val dummyPackageFragment = createDummyPackageFragment(header.packageName?.let(::FqName) ?: facadeFqName.parent())
|
||||||
val membersScope = DeserializedPackageMemberScope(
|
val membersScope = DeserializedPackageMemberScope(
|
||||||
createDummyPackageFragment(header.packageName?.let(::FqName) ?: facadeFqName.parent()),
|
dummyPackageFragment,
|
||||||
packageProto, nameResolver, header.metadataVersion,
|
packageProto, nameResolver, header.metadataVersion,
|
||||||
JvmPackagePartSource(binaryClassForPackageClass, packageProto, nameResolver), deserializationComponents
|
JvmPackagePartSource(binaryClassForPackageClass, packageProto, nameResolver), deserializationComponents,
|
||||||
|
"scope of dummyPackageFragment ${dummyPackageFragment.fqName} in module $moduleDescriptor @DeserializerForClassfileDecompiler"
|
||||||
) { emptyList() }
|
) { emptyList() }
|
||||||
return membersScope.getContributedDescriptors().toList()
|
return membersScope.getContributedDescriptors().toList()
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-2
@@ -55,9 +55,12 @@ class KotlinMetadataDeserializerForDecompiler(
|
|||||||
"Was called for $facadeFqName; only members of $directoryPackageFqName package are expected."
|
"Was called for $facadeFqName; only members of $directoryPackageFqName package are expected."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val dummyPackageFragment = createDummyPackageFragment(facadeFqName)
|
||||||
val membersScope = DeserializedPackageMemberScope(
|
val membersScope = DeserializedPackageMemberScope(
|
||||||
createDummyPackageFragment(facadeFqName), proto.`package`, nameResolver, metadataVersion, containerSource = null,
|
dummyPackageFragment, proto.`package`, nameResolver, metadataVersion, containerSource = null,
|
||||||
components = deserializationComponents
|
components = deserializationComponents,
|
||||||
|
debugName = "scope of dummyPackageFragment ${dummyPackageFragment.fqName} in module " +
|
||||||
|
"${deserializationComponents.moduleDescriptor} @KotlinMetadataDeserializerForDecompiler"
|
||||||
) { emptyList() }
|
) { emptyList() }
|
||||||
|
|
||||||
return membersScope.getContributedDescriptors().toList()
|
return membersScope.getContributedDescriptors().toList()
|
||||||
|
|||||||
+5
-2
@@ -60,8 +60,11 @@ class KlibMetadataDeserializerForDecompiler(
|
|||||||
nameResolver,
|
nameResolver,
|
||||||
KlibMetadataVersion.INSTANCE,
|
KlibMetadataVersion.INSTANCE,
|
||||||
containerSource = null,
|
containerSource = null,
|
||||||
components = deserializationComponents
|
components = deserializationComponents,
|
||||||
) { emptyList() }
|
classNames = { emptyList() },
|
||||||
|
debugName = "scope of dummyPackageFragment $facadeFqName in ${deserializationComponents.moduleDescriptor} " +
|
||||||
|
"@KlibMetadataDeserializerForDecompiler"
|
||||||
|
)
|
||||||
|
|
||||||
return membersScope.getContributedDescriptors().toList()
|
return membersScope.getContributedDescriptors().toList()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -136,7 +136,8 @@ class NativePlatformKindResolution : IdePlatformKindResolution {
|
|||||||
functionInterfacePackageFragmentProvider(storageManager, builtInsModule),
|
functionInterfacePackageFragmentProvider(storageManager, builtInsModule),
|
||||||
(metadataFactories.DefaultDeserializedDescriptorFactory as KlibMetadataModuleDescriptorFactoryImpl)
|
(metadataFactories.DefaultDeserializedDescriptorFactory as KlibMetadataModuleDescriptorFactoryImpl)
|
||||||
.createForwardDeclarationHackPackagePartProvider(storageManager, builtInsModule)
|
.createForwardDeclarationHackPackagePartProvider(storageManager, builtInsModule)
|
||||||
)
|
),
|
||||||
|
"CompositeProvider@NativeBuiltins for $builtInsModule"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+4
-1
@@ -66,7 +66,10 @@ class NativeResolverForModuleFactory(
|
|||||||
)
|
)
|
||||||
|
|
||||||
if (klibPackageFragmentProvider != null) {
|
if (klibPackageFragmentProvider != null) {
|
||||||
packageFragmentProvider = CompositePackageFragmentProvider(listOf(packageFragmentProvider, klibPackageFragmentProvider))
|
packageFragmentProvider = CompositePackageFragmentProvider(
|
||||||
|
listOf(packageFragmentProvider, klibPackageFragmentProvider),
|
||||||
|
"CompositeProvider@NativeResolver for $moduleDescriptor"
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return ResolverForModule(packageFragmentProvider, container)
|
return ResolverForModule(packageFragmentProvider, container)
|
||||||
|
|||||||
@@ -66,7 +66,9 @@ fun createContainerForJS(
|
|||||||
val packagePartProviders = mutableListOf(get<KotlinCodeAnalyzer>().packageFragmentProvider)
|
val packagePartProviders = mutableListOf(get<KotlinCodeAnalyzer>().packageFragmentProvider)
|
||||||
val moduleDescriptor = get<ModuleDescriptorImpl>()
|
val moduleDescriptor = get<ModuleDescriptorImpl>()
|
||||||
packagePartProviders += additionalPackages
|
packagePartProviders += additionalPackages
|
||||||
moduleDescriptor.initialize(CompositePackageFragmentProvider(packagePartProviders))
|
moduleDescriptor.initialize(
|
||||||
|
CompositePackageFragmentProvider(packagePartProviders, "CompositeProvider@createContainerForJS for $moduleDescriptor")
|
||||||
|
)
|
||||||
}
|
}
|
||||||
return storageComponentContainer
|
return storageComponentContainer
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-1
@@ -43,6 +43,11 @@ fun createTopDownAnalyzerProviderForKonan(
|
|||||||
val packagePartProviders = mutableListOf(get<KotlinCodeAnalyzer>().packageFragmentProvider)
|
val packagePartProviders = mutableListOf(get<KotlinCodeAnalyzer>().packageFragmentProvider)
|
||||||
val moduleDescriptor = get<ModuleDescriptorImpl>()
|
val moduleDescriptor = get<ModuleDescriptorImpl>()
|
||||||
packagePartProviders += additionalPackages
|
packagePartProviders += additionalPackages
|
||||||
moduleDescriptor.initialize(CompositePackageFragmentProvider(packagePartProviders))
|
moduleDescriptor.initialize(
|
||||||
|
CompositePackageFragmentProvider(
|
||||||
|
packagePartProviders,
|
||||||
|
"CompositeProvider@createTopDownAnalyzerProviderForKonan for module ${moduleContext.module}"
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user