KT-50889: Fix caching of module descriptors in K2MetadataKlibSerializer

Previously, in case of repeated analysis, descriptors cached in
CommonDependenciesContainer was initialized multiple times

 #KT-50889 Fixed
This commit is contained in:
Simon Ogorodnik
2022-01-25 11:57:58 +03:00
committed by Space
parent 794297eea3
commit 4c5eb9ac32
3 changed files with 14 additions and 14 deletions
@@ -25,7 +25,7 @@ internal val KotlinCoreEnvironment.destDir: File?
internal fun runCommonAnalysisForSerialization(
environment: KotlinCoreEnvironment,
dependOnBuiltins: Boolean,
dependencyContainer: CommonDependenciesContainer?
dependencyContainerFactory: () -> CommonDependenciesContainer?
): AnalyzerWithCompilerReport? {
if (environment.destDir == null) {
val configuration = environment.configuration
@@ -34,19 +34,23 @@ internal fun runCommonAnalysisForSerialization(
return null
}
val performanceManager = environment.configuration.getNotNull(CLIConfigurationKeys.PERF_MANAGER)
var analyzer: AnalyzerWithCompilerReport
do {
analyzer = runCommonAnalysis(environment, dependOnBuiltins, dependencyContainer)
performanceManager.notifyAnalysisStarted()
analyzer = runCommonAnalysisIteration(environment, dependOnBuiltins, dependencyContainerFactory())
val result = analyzer.analysisResult
if (result is AnalysisResult.RetryWithAdditionalRoots) {
environment.addKotlinSourceRoots(result.additionalKotlinRoots)
}
performanceManager.notifyAnalysisFinished()
} while (result is AnalysisResult.RetryWithAdditionalRoots)
return if (analyzer.analysisResult.shouldGenerateCode) analyzer else null
}
private fun runCommonAnalysis(
private fun runCommonAnalysisIteration(
environment: KotlinCoreEnvironment,
dependOnBuiltins: Boolean,
dependencyContainer: CommonDependenciesContainer?
@@ -50,14 +50,12 @@ internal class K2MetadataKlibSerializer(private val metadataVersion: BuiltInsBin
val configuration = environment.configuration
val performanceManager = configuration.getNotNull(CLIConfigurationKeys.PERF_MANAGER)
val dependencyContainer = KlibMetadataDependencyContainer(
configuration,
LockBasedStorageManager("K2MetadataKlibSerializer")
)
performanceManager.notifyAnalysisStarted()
val analyzer = runCommonAnalysisForSerialization(environment, true, dependencyContainer)
performanceManager.notifyAnalysisFinished()
val analyzer = runCommonAnalysisForSerialization(environment, true, dependencyContainerFactory = {
KlibMetadataDependencyContainer(
configuration,
LockBasedStorageManager("K2MetadataKlibSerializer")
)
})
if (analyzer == null || analyzer.hasErrors()) return
@@ -42,9 +42,7 @@ open class MetadataSerializer(
fun serialize(environment: KotlinCoreEnvironment) {
val performanceManager = environment.configuration.getNotNull(CLIConfigurationKeys.PERF_MANAGER)
performanceManager.notifyAnalysisStarted()
val analyzer = runCommonAnalysisForSerialization(environment, dependOnOldBuiltIns, dependencyContainer = null)
performanceManager.notifyAnalysisFinished()
val analyzer = runCommonAnalysisForSerialization(environment, dependOnOldBuiltIns, dependencyContainerFactory = { null })
if (analyzer == null || analyzer.hasErrors()) return