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,
|
||||
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"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
+3
-2
@@ -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() }
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
+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
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return "DelegatingProvider for $module in ${resolverForProject.name}"
|
||||
}
|
||||
}
|
||||
|
||||
private object DiagnoseUnknownModuleInfoReporter {
|
||||
|
||||
+4
-1
@@ -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 {
|
||||
|
||||
+2
-1
@@ -225,7 +225,8 @@ class ClassicFrontendFacade(
|
||||
listOf(
|
||||
container.get<KotlinCodeAnalyzer>().packageFragmentProvider,
|
||||
container.get<JavaDescriptorResolver>().packageFragmentProvider
|
||||
)
|
||||
),
|
||||
"CompositeProvider@ClassicFrontendFacade for $moduleDescriptor"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
+2
-1
@@ -437,7 +437,8 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
|
||||
listOf(
|
||||
container.get<KotlinCodeAnalyzer>().packageFragmentProvider,
|
||||
container.get<JavaDescriptorResolver>().packageFragmentProvider
|
||||
)
|
||||
),
|
||||
"CompositeProvider@AbstractDiagnosticsTest for $moduleDescriptor"
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
+3
-4
@@ -94,10 +94,9 @@ abstract class KlibMetadataPackageFragment(
|
||||
nameResolver,
|
||||
KlibMetadataVersion.INSTANCE,
|
||||
/* containerSource = */ null,
|
||||
components
|
||||
) {
|
||||
loadClassNames()
|
||||
}
|
||||
components,
|
||||
"scope for $this"
|
||||
) { loadClassNames() }
|
||||
}
|
||||
|
||||
override fun getMemberScope(): DeserializedPackageMemberScope = _memberScope
|
||||
|
||||
+4
-1
@@ -183,7 +183,10 @@ class KlibMetadataModuleDescriptorFactoryImpl(
|
||||
}
|
||||
|
||||
return compositePackageFragmentAddend?.let {
|
||||
CompositePackageFragmentProvider(listOf(it, provider))
|
||||
CompositePackageFragmentProvider(
|
||||
listOf(it, provider),
|
||||
"CompositeProvider@KlibMetadataModuleDescriptorFactory for $moduleDescriptor"
|
||||
)
|
||||
} ?: provider
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user