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(
|
internal fun runCommonAnalysisForSerialization(
|
||||||
environment: KotlinCoreEnvironment,
|
environment: KotlinCoreEnvironment,
|
||||||
dependOnBuiltins: Boolean,
|
dependOnBuiltins: Boolean,
|
||||||
dependencyContainer: CommonDependenciesContainer?
|
dependencyContainerFactory: () -> CommonDependenciesContainer?
|
||||||
): AnalyzerWithCompilerReport? {
|
): AnalyzerWithCompilerReport? {
|
||||||
if (environment.destDir == null) {
|
if (environment.destDir == null) {
|
||||||
val configuration = environment.configuration
|
val configuration = environment.configuration
|
||||||
@@ -34,19 +34,23 @@ internal fun runCommonAnalysisForSerialization(
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val performanceManager = environment.configuration.getNotNull(CLIConfigurationKeys.PERF_MANAGER)
|
||||||
|
|
||||||
var analyzer: AnalyzerWithCompilerReport
|
var analyzer: AnalyzerWithCompilerReport
|
||||||
do {
|
do {
|
||||||
analyzer = runCommonAnalysis(environment, dependOnBuiltins, dependencyContainer)
|
performanceManager.notifyAnalysisStarted()
|
||||||
|
analyzer = runCommonAnalysisIteration(environment, dependOnBuiltins, dependencyContainerFactory())
|
||||||
val result = analyzer.analysisResult
|
val result = analyzer.analysisResult
|
||||||
if (result is AnalysisResult.RetryWithAdditionalRoots) {
|
if (result is AnalysisResult.RetryWithAdditionalRoots) {
|
||||||
environment.addKotlinSourceRoots(result.additionalKotlinRoots)
|
environment.addKotlinSourceRoots(result.additionalKotlinRoots)
|
||||||
}
|
}
|
||||||
|
performanceManager.notifyAnalysisFinished()
|
||||||
} while (result is AnalysisResult.RetryWithAdditionalRoots)
|
} while (result is AnalysisResult.RetryWithAdditionalRoots)
|
||||||
|
|
||||||
return if (analyzer.analysisResult.shouldGenerateCode) analyzer else null
|
return if (analyzer.analysisResult.shouldGenerateCode) analyzer else null
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun runCommonAnalysis(
|
private fun runCommonAnalysisIteration(
|
||||||
environment: KotlinCoreEnvironment,
|
environment: KotlinCoreEnvironment,
|
||||||
dependOnBuiltins: Boolean,
|
dependOnBuiltins: Boolean,
|
||||||
dependencyContainer: CommonDependenciesContainer?
|
dependencyContainer: CommonDependenciesContainer?
|
||||||
|
|||||||
@@ -50,14 +50,12 @@ internal class K2MetadataKlibSerializer(private val metadataVersion: BuiltInsBin
|
|||||||
val configuration = environment.configuration
|
val configuration = environment.configuration
|
||||||
val performanceManager = configuration.getNotNull(CLIConfigurationKeys.PERF_MANAGER)
|
val performanceManager = configuration.getNotNull(CLIConfigurationKeys.PERF_MANAGER)
|
||||||
|
|
||||||
val dependencyContainer = KlibMetadataDependencyContainer(
|
val analyzer = runCommonAnalysisForSerialization(environment, true, dependencyContainerFactory = {
|
||||||
configuration,
|
KlibMetadataDependencyContainer(
|
||||||
LockBasedStorageManager("K2MetadataKlibSerializer")
|
configuration,
|
||||||
)
|
LockBasedStorageManager("K2MetadataKlibSerializer")
|
||||||
|
)
|
||||||
performanceManager.notifyAnalysisStarted()
|
})
|
||||||
val analyzer = runCommonAnalysisForSerialization(environment, true, dependencyContainer)
|
|
||||||
performanceManager.notifyAnalysisFinished()
|
|
||||||
|
|
||||||
if (analyzer == null || analyzer.hasErrors()) return
|
if (analyzer == null || analyzer.hasErrors()) return
|
||||||
|
|
||||||
|
|||||||
@@ -42,9 +42,7 @@ open class MetadataSerializer(
|
|||||||
fun serialize(environment: KotlinCoreEnvironment) {
|
fun serialize(environment: KotlinCoreEnvironment) {
|
||||||
val performanceManager = environment.configuration.getNotNull(CLIConfigurationKeys.PERF_MANAGER)
|
val performanceManager = environment.configuration.getNotNull(CLIConfigurationKeys.PERF_MANAGER)
|
||||||
|
|
||||||
performanceManager.notifyAnalysisStarted()
|
val analyzer = runCommonAnalysisForSerialization(environment, dependOnOldBuiltIns, dependencyContainerFactory = { null })
|
||||||
val analyzer = runCommonAnalysisForSerialization(environment, dependOnOldBuiltIns, dependencyContainer = null)
|
|
||||||
performanceManager.notifyAnalysisFinished()
|
|
||||||
|
|
||||||
if (analyzer == null || analyzer.hasErrors()) return
|
if (analyzer == null || analyzer.hasErrors()) return
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user