Update DefaultLanguageSettings to use compiler options

^KT-27301 In Progress
This commit is contained in:
Yahor Berdnikau
2022-09-08 12:47:50 +02:00
parent a3ac5b91f6
commit 4977858fc8
4 changed files with 18 additions and 15 deletions
@@ -11,7 +11,8 @@ import org.gradle.api.provider.Provider
import org.jetbrains.kotlin.config.ApiVersion import org.jetbrains.kotlin.config.ApiVersion
import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.config.LanguageVersion import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.dsl.CompilerCommonOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
import org.jetbrains.kotlin.gradle.plugin.LanguageSettingsBuilder import org.jetbrains.kotlin.gradle.plugin.LanguageSettingsBuilder
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
@@ -99,12 +100,12 @@ internal class DefaultLanguageSettingsBuilder : LanguageSettingsBuilder {
get() = freeCompilerArgsProvider?.get().orEmpty() get() = freeCompilerArgsProvider?.get().orEmpty()
} }
internal fun applyLanguageSettingsToKotlinOptions( internal fun applyLanguageSettingsToCompilerOptions(
languageSettingsBuilder: LanguageSettings, languageSettingsBuilder: LanguageSettings,
kotlinOptions: KotlinCommonOptions compilerOptions: CompilerCommonOptions
) = with(kotlinOptions) { ) = with(compilerOptions) {
languageVersion = languageVersion ?: languageSettingsBuilder.languageVersion languageVersion.convention(languageSettingsBuilder.languageVersion?.let { KotlinVersion.fromVersion(it) })
apiVersion = apiVersion ?: languageSettingsBuilder.apiVersion apiVersion.convention(languageSettingsBuilder.apiVersion?.let { KotlinVersion.fromVersion(it) })
val freeArgs = mutableListOf<String>().apply { val freeArgs = mutableListOf<String>().apply {
if (languageSettingsBuilder.progressiveMode) { if (languageSettingsBuilder.progressiveMode) {
@@ -124,12 +125,12 @@ internal fun applyLanguageSettingsToKotlinOptions(
} }
} }
freeCompilerArgs = freeCompilerArgs + freeArgs freeCompilerArgs.addAll(freeArgs)
KotlinBuildStatsService.getInstance()?.apply { KotlinBuildStatsService.getInstance()?.apply {
report(BooleanMetrics.KOTLIN_PROGRESSIVE_MODE, languageSettingsBuilder.progressiveMode) report(BooleanMetrics.KOTLIN_PROGRESSIVE_MODE, languageSettingsBuilder.progressiveMode)
apiVersion?.also { v -> report(StringMetrics.KOTLIN_API_VERSION, v) } apiVersion.orNull?.also { v -> report(StringMetrics.KOTLIN_API_VERSION, v.version) }
languageVersion?.also { v -> report(StringMetrics.KOTLIN_LANGUAGE_VERSION, v) } languageVersion.orNull?.also { v -> report(StringMetrics.KOTLIN_LANGUAGE_VERSION, v.version) }
} }
} }
@@ -10,7 +10,7 @@ import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.hasKpmModel
import org.jetbrains.kotlin.gradle.plugin.sources.applyLanguageSettingsToKotlinOptions import org.jetbrains.kotlin.gradle.plugin.sources.applyLanguageSettingsToCompilerOptions
import org.jetbrains.kotlin.gradle.targets.metadata.GradleKpmMetadataTargetConfigurator import org.jetbrains.kotlin.gradle.targets.metadata.GradleKpmMetadataTargetConfigurator
import org.jetbrains.kotlin.gradle.targets.metadata.KotlinMetadataTargetConfigurator import org.jetbrains.kotlin.gradle.targets.metadata.KotlinMetadataTargetConfigurator
@@ -62,8 +62,8 @@ class KotlinMetadataTargetPreset(
project.whenEvaluated { project.whenEvaluated {
if (!project.hasKpmModel) { if (!project.hasKpmModel) {
// Since there's no default source set, apply language settings from commonMain: // Since there's no default source set, apply language settings from commonMain:
mainCompilation.compileKotlinTaskProvider.configure { compileKotlinMetadata -> mainCompilation.compileTaskProvider.configure { compileKotlinMetadata ->
applyLanguageSettingsToKotlinOptions(commonMainSourceSet.languageSettings, compileKotlinMetadata.kotlinOptions) applyLanguageSettingsToCompilerOptions(commonMainSourceSet.languageSettings, compileKotlinMetadata.compilerOptions)
} }
} }
} }
@@ -10,6 +10,7 @@ import org.gradle.api.Action
import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.gradle.dsl.CompilerCommonOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinNativeCompilationData import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinNativeCompilationData
@@ -22,6 +23,7 @@ import java.util.concurrent.Callable
import javax.inject.Inject import javax.inject.Inject
internal class NativeCompileOptions(private val languageSettings: LanguageSettingsBuilder) : KotlinCommonOptions { internal class NativeCompileOptions(private val languageSettings: LanguageSettingsBuilder) : KotlinCommonOptions {
override val options: CompilerCommonOptions get() = TODO("TBA support")
override var apiVersion: String? override var apiVersion: String?
get() = languageSettings.apiVersion get() = languageSettings.apiVersion
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.mpp.associateWithClosure import org.jetbrains.kotlin.gradle.plugin.mpp.associateWithClosure
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData
import org.jetbrains.kotlin.gradle.plugin.sources.applyLanguageSettingsToKotlinOptions import org.jetbrains.kotlin.gradle.plugin.sources.applyLanguageSettingsToCompilerOptions
import org.jetbrains.kotlin.gradle.report.BuildMetricsService import org.jetbrains.kotlin.gradle.report.BuildMetricsService
import org.jetbrains.kotlin.gradle.report.BuildReportsService import org.jetbrains.kotlin.gradle.report.BuildReportsService
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
@@ -41,8 +41,8 @@ internal abstract class AbstractKotlinCompileConfig<TASK : AbstractKotlinCompile
configureTaskProvider { taskProvider -> configureTaskProvider { taskProvider ->
project.runOnceAfterEvaluated("apply properties and language settings to ${taskProvider.name}") { project.runOnceAfterEvaluated("apply properties and language settings to ${taskProvider.name}") {
taskProvider.configure { taskProvider.configure {
applyLanguageSettingsToKotlinOptions( applyLanguageSettingsToCompilerOptions(
languageSettings.get(), (it as org.jetbrains.kotlin.gradle.dsl.KotlinCompile<*>).kotlinOptions languageSettings.get(), (it as org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask<*>).compilerOptions
) )
} }
} }