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:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user