Add a non-public-API mechanism to import free args for MPP source sets

Arguments can be set using a project extra property following the
pattern: `kotlin.mpp.freeCompilerArgsForSourceSet.$sourceSetName`.

Only a compilation's default source set free args are appended to the
compiler args during Gradle builds.
This commit is contained in:
Sergey Igushkin
2020-01-31 18:24:41 +03:00
parent a8aa334203
commit 764bf1cb32
10 changed files with 74 additions and 24 deletions
@@ -891,6 +891,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
it.useExperimental = languageSettings.experimentalAnnotationsInUse.toTypedArray()
it.pluginOptions = languageSettings.compilerPluginArguments
it.pluginClasspaths = languageSettings.compilerPluginClasspath.map(File::getPath).toTypedArray()
it.freeArgs = languageSettings.freeCompilerArgs.toMutableList()
}
}
}
@@ -79,6 +79,7 @@ interface KotlinLanguageSettings : Serializable {
val experimentalAnnotationsInUse: Set<String>
val compilerPluginArguments: Array<String>
val compilerPluginClasspath: Set<File>
val freeCompilerArgs: Array<String>
}
interface KotlinCompilationOutput : Serializable {
@@ -214,6 +214,7 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService {
val getExperimentalAnnotationsInUse = languageSettingsClass.getMethodOrNull("getExperimentalAnnotationsInUse")
val getCompilerPluginArguments = languageSettingsClass.getMethodOrNull("getCompilerPluginArguments")
val getCompilerPluginClasspath = languageSettingsClass.getMethodOrNull("getCompilerPluginClasspath")
val getFreeCompilerArgs = languageSettingsClass.getMethodOrNull("getFreeCompilerArgs")
@Suppress("UNCHECKED_CAST")
return KotlinLanguageSettingsImpl(
getLanguageVersion(gradleLanguageSettings) as? String,
@@ -222,7 +223,8 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService {
getEnabledLanguageFeatures(gradleLanguageSettings) as? Set<String> ?: emptySet(),
getExperimentalAnnotationsInUse?.invoke(gradleLanguageSettings) as? Set<String> ?: emptySet(),
(getCompilerPluginArguments?.invoke(gradleLanguageSettings) as? List<String> ?: emptyList()).toTypedArray(),
(getCompilerPluginClasspath?.invoke(gradleLanguageSettings) as? FileCollection)?.files ?: emptySet()
(getCompilerPluginClasspath?.invoke(gradleLanguageSettings) as? FileCollection)?.files ?: emptySet(),
(getFreeCompilerArgs?.invoke(gradleLanguageSettings) as? List<String>).orEmpty().toTypedArray()
)
}
@@ -66,7 +66,8 @@ data class KotlinLanguageSettingsImpl(
override val enabledLanguageFeatures: Set<String>,
override val experimentalAnnotationsInUse: Set<String>,
override val compilerPluginArguments: Array<String>,
override val compilerPluginClasspath: Set<File>
override val compilerPluginClasspath: Set<File>,
override val freeCompilerArgs: Array<String>
) : KotlinLanguageSettings {
constructor(settings: KotlinLanguageSettings) : this(
settings.languageVersion,
@@ -75,7 +76,8 @@ data class KotlinLanguageSettingsImpl(
settings.enabledLanguageFeatures,
settings.experimentalAnnotationsInUse,
settings.compilerPluginArguments,
settings.compilerPluginClasspath
settings.compilerPluginClasspath,
settings.freeCompilerArgs
)
}