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:
Dmitry Savvinov
2021-05-21 11:35:26 +03:00
committed by teamcityserver
parent a51c65ed60
commit 708fead1cc
32 changed files with 137 additions and 48 deletions
@@ -209,7 +209,8 @@ object TopDownAnalyzerFacadeForJVM {
moduleClassResolver.compiledCodeResolver.packageFragmentProvider,
dependenciesContainer.get<JvmBuiltInsPackageFragmentProvider>(),
dependenciesContainer.get<OptionalAnnotationPackageFragmentProvider>()
)
),
"CompositeProvider@TopDownAnalyzerForJvm for dependencies ${dependenciesContext.module}"
)
)
dependenciesContext.module
@@ -283,7 +284,8 @@ object TopDownAnalyzerFacadeForJVM {
listOf(
container.get<KotlinCodeAnalyzer>().packageFragmentProvider,
container.get<OptionalAnnotationPackageFragmentProvider>()
) + additionalProviders
) + additionalProviders,
"CompositeProvider@TopDownAnalzyerForJvm for $module"
)
)
@@ -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() }
}
}
)
@@ -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
}
override fun toString(): String {
return "DelegatingProvider for $module in ${resolverForProject.name}"
}
}
private object DiagnoseUnknownModuleInfoReporter {
@@ -112,7 +112,10 @@ class CommonResolverForModuleFactory(
container.get<MetadataPackageFragmentProvider>()
)
return ResolverForModule(CompositePackageFragmentProvider(packageFragmentProviders), container)
return ResolverForModule(
CompositePackageFragmentProvider(packageFragmentProviders, "CompositeProvider@CommonResolver for $moduleDescriptor"),
container
)
}
companion object {
@@ -225,7 +225,8 @@ class ClassicFrontendFacade(
listOf(
container.get<KotlinCodeAnalyzer>().packageFragmentProvider,
container.get<JavaDescriptorResolver>().packageFragmentProvider
)
),
"CompositeProvider@ClassicFrontendFacade for $moduleDescriptor"
)
)
@@ -437,7 +437,8 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
listOf(
container.get<KotlinCodeAnalyzer>().packageFragmentProvider,
container.get<JavaDescriptorResolver>().packageFragmentProvider
)
),
"CompositeProvider@AbstractDiagnosticsTest for $moduleDescriptor"
)
)
@@ -94,10 +94,9 @@ abstract class KlibMetadataPackageFragment(
nameResolver,
KlibMetadataVersion.INSTANCE,
/* containerSource = */ null,
components
) {
loadClassNames()
}
components,
"scope for $this"
) { loadClassNames() }
}
override fun getMemberScope(): DeserializedPackageMemberScope = _memberScope
@@ -183,7 +183,10 @@ class KlibMetadataModuleDescriptorFactoryImpl(
}
return compositePackageFragmentAddend?.let {
CompositePackageFragmentProvider(listOf(it, provider))
CompositePackageFragmentProvider(
listOf(it, provider),
"CompositeProvider@KlibMetadataModuleDescriptorFactory for $moduleDescriptor"
)
} ?: provider
}