Skip to content

Commit 4ae2429

Browse files
lunakolySpace Team
authored andcommitted
[Commonizer] Rewrite InlineSourceBuilder into FIR test infrastructure
Also, adjust two tests: apparently, K1 analysis and metadata serialization were also producing redundant empty packages. `// hasStableParameterNames=false` is used, for example, in `FunctionCommonizationFromSourcesTest#testValueParameters`. ^KT-74769
1 parent 76cdb87 commit 4ae2429

File tree

16 files changed

+437
-454
lines changed

16 files changed

+437
-454
lines changed

compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,12 @@ import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
3737
import org.jetbrains.kotlin.config.*
3838
import org.jetbrains.kotlin.metadata.deserialization.BinaryVersion
3939
import org.jetbrains.kotlin.platform.TargetPlatform
40-
import org.jetbrains.kotlin.platform.isCommon
4140
import org.jetbrains.kotlin.progress.CompilationCanceledException
4241
import org.jetbrains.kotlin.progress.CompilationCanceledStatus
4342
import org.jetbrains.kotlin.progress.IncrementalNextRoundException
4443
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus
4544
import org.jetbrains.kotlin.util.CompilerType
4645
import org.jetbrains.kotlin.util.PerformanceManager
47-
import org.jetbrains.kotlin.util.PerformanceManagerImpl
4846
import org.jetbrains.kotlin.util.forEachStringMeasurement
4947
import org.jetbrains.kotlin.utils.KotlinPaths
5048
import org.jetbrains.kotlin.utils.PathUtil
@@ -59,7 +57,7 @@ abstract class CLICompiler<A : CommonCompilerArguments> {
5957
abstract val platform: TargetPlatform
6058

6159
open val defaultPerformanceManager: PerformanceManager by lazy {
62-
PerformanceManagerImpl(platform, "Kotlin to ${if (platform.isCommon()) "Metadata" else platform.first().platformName} compiler")
60+
createPerformanceManagerFor(platform)
6361
}
6462

6563
var isReadingSettingsFromEnvironmentAllowed: Boolean =

compiler/cli/src/org/jetbrains/kotlin/cli/common/utils.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,12 @@ import org.jetbrains.kotlin.fir.declarations.FirFile
3131
import org.jetbrains.kotlin.fir.packageFqName
3232
import org.jetbrains.kotlin.name.FqName
3333
import org.jetbrains.kotlin.name.isSubpackageOf
34+
import org.jetbrains.kotlin.platform.TargetPlatform
35+
import org.jetbrains.kotlin.platform.isCommon
3436
import org.jetbrains.kotlin.psi.KtFile
3537
import org.jetbrains.kotlin.text
3638
import org.jetbrains.kotlin.util.Logger
39+
import org.jetbrains.kotlin.util.PerformanceManagerImpl
3740
import java.io.File
3841
import org.jetbrains.kotlin.cli.common.messages.toLogger as toLoggerNew
3942

@@ -129,6 +132,9 @@ fun <PathProvider : Any> getLibraryFromHome(
129132
return null
130133
}
131134

135+
fun createPerformanceManagerFor(platform: TargetPlatform) =
136+
PerformanceManagerImpl(platform, "Kotlin to ${if (platform.isCommon()) "Metadata" else platform.first().platformName} compiler")
137+
132138
@Deprecated(
133139
"Use org.jetbrains.kotlin.cli.common.messages.toLogger() instead",
134140
ReplaceWith("toLogger()", "org.jetbrains.kotlin.cli.common.messages.toLogger"),

compiler/cli/src/org/jetbrains/kotlin/cli/pipeline/metadata/MetadataCliPipeline.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments
1010
import org.jetbrains.kotlin.cli.pipeline.AbstractCliPipeline
1111
import org.jetbrains.kotlin.cli.pipeline.ArgumentsPipelineArtifact
1212
import org.jetbrains.kotlin.cli.pipeline.PipelineContext
13-
import org.jetbrains.kotlin.cli.pipeline.PipelinePhase
1413
import org.jetbrains.kotlin.config.phaser.CompilerPhase
1514
import org.jetbrains.kotlin.util.PerformanceManager
1615

@@ -23,8 +22,8 @@ class MetadataCliPipeline(override val defaultPerformanceManager: PerformanceMan
2322

2423
private fun serializerPhase(
2524
arguments: K2MetadataCompilerArguments
26-
): PipelinePhase<MetadataFrontendPipelineArtifact, MetadataSerializationArtifact> = when {
25+
): CompilerPhase<PipelineContext, MetadataFrontendPipelineArtifact, MetadataSerializationArtifact> = when {
2726
arguments.legacyMetadataJar -> MetadataLegacySerializerPhase
28-
else -> MetadataKlibSerializerPhase
27+
else -> MetadataKlibInMemorySerializerPhase then MetadataKlibFileWriterPhase
2928
}
3029
}

compiler/cli/src/org/jetbrains/kotlin/cli/pipeline/metadata/MetadataKlibSerializerPhase.kt

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,14 @@ import org.jetbrains.kotlin.library.SerializedMetadata
2020
import org.jetbrains.kotlin.library.metadata.KlibMetadataHeaderFlags
2121
import org.jetbrains.kotlin.library.metadata.KlibMetadataProtoBuf
2222

23-
object MetadataKlibSerializerPhase : PipelinePhase<MetadataFrontendPipelineArtifact, MetadataSerializationArtifact>(
24-
name = "MetadataKlibSerializerPhase",
23+
object MetadataKlibInMemorySerializerPhase : PipelinePhase<MetadataFrontendPipelineArtifact, MetadataInMemorySerializationArtifact>(
24+
name = "MetadataKlibInMemorySerializerPhase",
2525
preActions = setOf(PerformanceNotifications.KlibWritingStarted),
2626
postActions = setOf(PerformanceNotifications.KlibWritingFinished, CheckCompilationErrors.CheckDiagnosticCollector)
2727
) {
28-
override fun executePhase(input: MetadataFrontendPipelineArtifact): MetadataSerializationArtifact {
28+
override fun executePhase(input: MetadataFrontendPipelineArtifact): MetadataInMemorySerializationArtifact {
2929
val (firResult, configuration, _, _) = input
3030
val metadataVersion = input.metadataVersion
31-
val destDir = configuration.metadataDestinationDirectory!!
32-
3331
val fragments = mutableMapOf<String, MutableList<ByteArray>>()
3432

3533
val analysisResult = firResult.outputs
@@ -71,15 +69,24 @@ object MetadataKlibSerializerPhase : PipelinePhase<MetadataFrontendPipelineArtif
7169
}
7270

7371
val module = header.build().toByteArray()
74-
7572
val serializedMetadata = SerializedMetadata(module, fragmentParts, fragmentNames)
73+
return MetadataInMemorySerializationArtifact(serializedMetadata, configuration)
74+
}
75+
}
7676

77-
buildKotlinMetadataLibrary(configuration, serializedMetadata, destDir)
77+
object MetadataKlibFileWriterPhase : PipelinePhase<MetadataInMemorySerializationArtifact, MetadataSerializationArtifact>(
78+
name = "MetadataKlibFileWriterPhase",
79+
preActions = setOf(PerformanceNotifications.KlibWritingStarted),
80+
postActions = setOf(PerformanceNotifications.KlibWritingFinished, CheckCompilationErrors.CheckDiagnosticCollector)
81+
) {
82+
override fun executePhase(input: MetadataInMemorySerializationArtifact): MetadataSerializationArtifact {
83+
val destDir = input.configuration.metadataDestinationDirectory!!
84+
buildKotlinMetadataLibrary(input.configuration, input.metadata, destDir)
7885

7986
return MetadataSerializationArtifact(
8087
outputInfo = null,
81-
configuration,
82-
destDir.canonicalPath
88+
input.configuration,
89+
destDir.canonicalPath,
8390
)
8491
}
8592
}

compiler/cli/src/org/jetbrains/kotlin/cli/pipeline/metadata/MetadataPipelineArtifacts.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
1313
import org.jetbrains.kotlin.config.metadataVersion
1414
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
1515
import org.jetbrains.kotlin.fir.pipeline.FirResult
16+
import org.jetbrains.kotlin.library.SerializedMetadata
1617
import org.jetbrains.kotlin.metadata.builtins.BuiltInsBinaryVersion
1718

1819
data class MetadataFrontendPipelineArtifact(
@@ -26,6 +27,11 @@ data class MetadataFrontendPipelineArtifact(
2627
copy(diagnosticCollector = newDiagnosticsCollector)
2728
}
2829

30+
data class MetadataInMemorySerializationArtifact(
31+
val metadata: SerializedMetadata,
32+
val configuration: CompilerConfiguration,
33+
) : PipelineArtifact()
34+
2935
data class MetadataSerializationArtifact(
3036
val outputInfo: OutputInfo?,
3137
val configuration: CompilerConfiguration,

compiler/tests-common-new/testFixtures/org/jetbrains/kotlin/test/frontend/fir/FirCliMetadataFrontendFacade.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ package org.jetbrains.kotlin.test.frontend.fir
77

88
import org.jetbrains.kotlin.cli.pipeline.metadata.MetadataFrontendPipelineArtifact
99
import org.jetbrains.kotlin.cli.pipeline.metadata.MetadataFrontendPipelinePhase
10-
import org.jetbrains.kotlin.cli.pipeline.metadata.MetadataKlibSerializerPhase
10+
import org.jetbrains.kotlin.cli.pipeline.metadata.MetadataKlibFileWriterPhase
11+
import org.jetbrains.kotlin.cli.pipeline.metadata.MetadataKlibInMemorySerializerPhase
1112
import org.jetbrains.kotlin.config.LanguageFeature
1213
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
1314
import org.jetbrains.kotlin.diagnostics.impl.SimpleDiagnosticsCollector
@@ -61,7 +62,7 @@ class FirCliMetadataSerializerFacade(val testServices: TestServices) : AbstractT
6162
"Incompatible type of input artifact: expected ${MetadataFrontendPipelineArtifact::class}, actual ${inputArtifact.cliArtifact::class}"
6263
}
6364
val input = inputArtifact.cliArtifact
64-
val output = MetadataKlibSerializerPhase.executePhase(input)
65+
val output = MetadataKlibInMemorySerializerPhase.executePhase(input).let(MetadataKlibFileWriterPhase::executePhase)
6566
return BinaryArtifacts.KLib(
6667
File(output.destination),
6768
SimpleDiagnosticsCollector(BaseDiagnosticsCollector.RawReporter.DO_NOTHING)

native/commonizer/build.gradle.kts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader
2+
13
plugins {
24
kotlin("jvm")
35
id("project-tests-convention")
@@ -68,3 +70,17 @@ projectTests {
6870
runtimeJar()
6971
sourcesJar { includeEmptyDirs = false; eachFile { exclude() } } // empty Jar, no public sources
7072
javadocJar { includeEmptyDirs = false; eachFile { exclude() } } // empty Jar, no public javadocs
73+
74+
tasks.test.configure {
75+
// Use the bootstrap K/N stdlib for compiling test code samples.
76+
val nativeDistributionDownloader = NativeCompilerDownloader(project).also { it.downloadIfNeeded() }
77+
78+
jvmArgumentProviders += objects.newInstance<SystemPropertyClasspathProvider>().apply {
79+
val compilerDirectory = project.layout.dir(
80+
providers.provider { nativeDistributionDownloader.compilerDirectory }
81+
)
82+
83+
classpath.from(compilerDirectory)
84+
property.set("kotlin.internal.native.test.nativeHome")
85+
}
86+
}

0 commit comments

Comments
 (0)