Extract CommonAnalysisResult and use it in K2MetadataKlibSerializer and MetadataSerializer
This commit is contained in:
committed by
Space Team
parent
44b7859356
commit
8a8823e81a
@@ -14,11 +14,15 @@ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
|||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||||
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.platform.CommonPlatforms
|
import org.jetbrains.kotlin.platform.CommonPlatforms
|
||||||
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.CompilerEnvironment
|
import org.jetbrains.kotlin.resolve.CompilerEnvironment
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
|
data class CommonAnalysisResult(val moduleDescriptor: ModuleDescriptor, val bindingContext: BindingContext)
|
||||||
|
|
||||||
internal val KotlinCoreEnvironment.destDir: File?
|
internal val KotlinCoreEnvironment.destDir: File?
|
||||||
get() = configuration.get(CLIConfigurationKeys.METADATA_DESTINATION_DIRECTORY)
|
get() = configuration.get(CLIConfigurationKeys.METADATA_DESTINATION_DIRECTORY)
|
||||||
|
|
||||||
@@ -26,7 +30,7 @@ internal fun runCommonAnalysisForSerialization(
|
|||||||
environment: KotlinCoreEnvironment,
|
environment: KotlinCoreEnvironment,
|
||||||
dependOnBuiltins: Boolean,
|
dependOnBuiltins: Boolean,
|
||||||
dependencyContainerFactory: () -> CommonDependenciesContainer?
|
dependencyContainerFactory: () -> CommonDependenciesContainer?
|
||||||
): AnalyzerWithCompilerReport? {
|
): CommonAnalysisResult? {
|
||||||
if (environment.destDir == null) {
|
if (environment.destDir == null) {
|
||||||
val configuration = environment.configuration
|
val configuration = environment.configuration
|
||||||
val messageCollector = configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
|
val messageCollector = configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
|
||||||
@@ -36,25 +40,31 @@ internal fun runCommonAnalysisForSerialization(
|
|||||||
|
|
||||||
val performanceManager = environment.configuration.getNotNull(CLIConfigurationKeys.PERF_MANAGER)
|
val performanceManager = environment.configuration.getNotNull(CLIConfigurationKeys.PERF_MANAGER)
|
||||||
|
|
||||||
var analyzer: AnalyzerWithCompilerReport
|
var analysisResultWithHasErrors: AnalysisResultWithHasErrors
|
||||||
do {
|
do {
|
||||||
performanceManager.notifyAnalysisStarted()
|
performanceManager.notifyAnalysisStarted()
|
||||||
analyzer = runCommonAnalysisIteration(environment, dependOnBuiltins, dependencyContainerFactory())
|
analysisResultWithHasErrors = runCommonAnalysisIteration(environment, dependOnBuiltins, dependencyContainerFactory())
|
||||||
val result = analyzer.analysisResult
|
val result = analysisResultWithHasErrors.result
|
||||||
if (result is AnalysisResult.RetryWithAdditionalRoots) {
|
if (result is AnalysisResult.RetryWithAdditionalRoots) {
|
||||||
environment.addKotlinSourceRoots(result.additionalKotlinRoots)
|
environment.addKotlinSourceRoots(result.additionalKotlinRoots)
|
||||||
}
|
}
|
||||||
performanceManager.notifyAnalysisFinished()
|
performanceManager.notifyAnalysisFinished()
|
||||||
} while (result is AnalysisResult.RetryWithAdditionalRoots)
|
} while (result is AnalysisResult.RetryWithAdditionalRoots)
|
||||||
|
|
||||||
return if (analyzer.analysisResult.shouldGenerateCode) analyzer else null
|
val analysisResult = analysisResultWithHasErrors.result
|
||||||
|
return if (analysisResult.shouldGenerateCode && !analysisResultWithHasErrors.hasErrors)
|
||||||
|
CommonAnalysisResult(analysisResult.moduleDescriptor, analysisResult.bindingContext)
|
||||||
|
else
|
||||||
|
null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private data class AnalysisResultWithHasErrors(val result: AnalysisResult, val hasErrors: Boolean)
|
||||||
|
|
||||||
private fun runCommonAnalysisIteration(
|
private fun runCommonAnalysisIteration(
|
||||||
environment: KotlinCoreEnvironment,
|
environment: KotlinCoreEnvironment,
|
||||||
dependOnBuiltins: Boolean,
|
dependOnBuiltins: Boolean,
|
||||||
dependencyContainer: CommonDependenciesContainer?
|
dependencyContainer: CommonDependenciesContainer?
|
||||||
): AnalyzerWithCompilerReport {
|
): AnalysisResultWithHasErrors {
|
||||||
val configuration = environment.configuration
|
val configuration = environment.configuration
|
||||||
val messageCollector = configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
|
val messageCollector = configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
|
||||||
val files = environment.getSourceFiles()
|
val files = environment.getSourceFiles()
|
||||||
@@ -76,5 +86,5 @@ private fun runCommonAnalysisIteration(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return analyzer
|
return AnalysisResultWithHasErrors(analyzer.analysisResult, analyzer.hasErrors())
|
||||||
}
|
}
|
||||||
@@ -45,20 +45,16 @@ 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 analyzer = runCommonAnalysisForSerialization(environment, true, dependencyContainerFactory = {
|
val analysisResult = runCommonAnalysisForSerialization(environment, true, dependencyContainerFactory = {
|
||||||
KlibMetadataDependencyContainer(
|
KlibMetadataDependencyContainer(
|
||||||
configuration,
|
configuration,
|
||||||
LockBasedStorageManager("K2MetadataKlibSerializer")
|
LockBasedStorageManager("K2MetadataKlibSerializer")
|
||||||
)
|
)
|
||||||
})
|
}) ?: return
|
||||||
|
|
||||||
if (analyzer == null || analyzer.hasErrors()) return
|
|
||||||
|
|
||||||
val (_, moduleDescriptor) = analyzer.analysisResult
|
|
||||||
|
|
||||||
performanceManager.notifyGenerationStarted()
|
performanceManager.notifyGenerationStarted()
|
||||||
val destDir = checkNotNull(environment.destDir)
|
val destDir = checkNotNull(environment.destDir)
|
||||||
performSerialization(configuration, moduleDescriptor, destDir, environment.project)
|
performSerialization(configuration, analysisResult.moduleDescriptor, destDir, environment.project)
|
||||||
performanceManager.notifyGenerationFinished()
|
performanceManager.notifyGenerationFinished()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,11 +44,10 @@ 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)
|
||||||
|
|
||||||
val analyzer = runCommonAnalysisForSerialization(environment, dependOnOldBuiltIns, dependencyContainerFactory = { null })
|
val analysisResult = runCommonAnalysisForSerialization(environment, dependOnOldBuiltIns, dependencyContainerFactory = { null })
|
||||||
|
?: return
|
||||||
|
|
||||||
if (analyzer == null || analyzer.hasErrors()) return
|
val (moduleDescriptor, bindingContext) = analysisResult
|
||||||
|
|
||||||
val (bindingContext, moduleDescriptor) = analyzer.analysisResult
|
|
||||||
|
|
||||||
performanceManager.notifyGenerationStarted()
|
performanceManager.notifyGenerationStarted()
|
||||||
val destDir = checkNotNull(environment.destDir)
|
val destDir = checkNotNull(environment.destDir)
|
||||||
|
|||||||
Reference in New Issue
Block a user