MPP: Support language settings in new model import
This commit is contained in:
+15
-5
@@ -25,6 +25,7 @@ import org.gradle.tooling.model.UnsupportedMethodException
|
||||
import org.gradle.tooling.model.idea.IdeaContentRoot
|
||||
import org.gradle.tooling.model.idea.IdeaModule
|
||||
import org.jetbrains.kotlin.cli.common.arguments.*
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.gradle.*
|
||||
import org.jetbrains.plugins.gradle.model.*
|
||||
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData
|
||||
@@ -575,12 +576,21 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
|
||||
gradleModule: IdeaModule,
|
||||
resolverCtx: ProjectResolverContext
|
||||
): KotlinSourceSetInfo {
|
||||
return KotlinSourceSetInfo(sourceSet).also {
|
||||
it.moduleId = getKotlinModuleId(gradleModule, sourceSet, resolverCtx)
|
||||
it.platform = sourceSet.platform
|
||||
it.isTestModule = sourceSet.isTestModule
|
||||
it.compilerArguments = createCompilerArguments(emptyList(), sourceSet.platform).also {
|
||||
return KotlinSourceSetInfo(sourceSet).also { info ->
|
||||
val languageSettings = sourceSet.languageSettings
|
||||
info.moduleId = getKotlinModuleId(gradleModule, sourceSet, resolverCtx)
|
||||
info.platform = sourceSet.platform
|
||||
info.isTestModule = sourceSet.isTestModule
|
||||
info.compilerArguments = createCompilerArguments(emptyList(), sourceSet.platform).also {
|
||||
it.multiPlatform = true
|
||||
it.languageVersion = languageSettings.languageVersion
|
||||
it.apiVersion = languageSettings.apiVersion
|
||||
it.progressiveMode = languageSettings.isProgressiveMode
|
||||
it.internalArguments = languageSettings.enabledLanguageFeatures.mapNotNull {
|
||||
val feature = LanguageFeature.fromString(it) ?: return@mapNotNull null
|
||||
val arg = "-XXLanguage:+$it"
|
||||
ManualLanguageFeatureSetting(feature, LanguageFeature.State.ENABLED, arg)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,11 +19,19 @@ interface KotlinModule : Serializable {
|
||||
}
|
||||
|
||||
interface KotlinSourceSet : KotlinModule {
|
||||
val languageSettings: KotlinLanguageSettings
|
||||
val sourceDirs: Set<File>
|
||||
val resourceDirs: Set<File>
|
||||
val dependsOnSourceSets: Set<String>
|
||||
}
|
||||
|
||||
interface KotlinLanguageSettings : Serializable {
|
||||
val languageVersion: String?
|
||||
val apiVersion: String?
|
||||
val isProgressiveMode: Boolean
|
||||
val enabledLanguageFeatures: Set<String>
|
||||
}
|
||||
|
||||
interface KotlinCompilationOutput : Serializable {
|
||||
val classesDirs: Set<File>
|
||||
val effectiveClassesDir: File?
|
||||
|
||||
@@ -75,15 +75,32 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService {
|
||||
project: Project
|
||||
): KotlinSourceSetImpl? {
|
||||
val sourceSetClass = gradleSourceSet.javaClass
|
||||
val getLanguageSettings = sourceSetClass.getMethodOrNull("getLanguageSettings") ?: return null
|
||||
val getSourceDirSet = sourceSetClass.getMethodOrNull("getKotlin") ?: return null
|
||||
val getResourceDirSet = sourceSetClass.getMethodOrNull("getResources") ?: return null
|
||||
val getDependsOn = sourceSetClass.getMethodOrNull("getDependsOn") ?: return null
|
||||
val languageSettings = getLanguageSettings(gradleSourceSet)?.let { buildLanguageSettings(it) } ?: return null
|
||||
val sourceDirs = (getSourceDirSet(gradleSourceSet) as? SourceDirectorySet)?.srcDirs ?: emptySet()
|
||||
val resourceDirs = (getResourceDirSet(gradleSourceSet) as? SourceDirectorySet)?.srcDirs ?: emptySet()
|
||||
val dependencies = buildSourceSetDependencies(gradleSourceSet, dependencyResolver, project)
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val dependsOnSourceSets = (getDependsOn(gradleSourceSet) as? Set<Named>)?.mapTo(LinkedHashSet()) { it.name } ?: emptySet<String>()
|
||||
return KotlinSourceSetImpl(gradleSourceSet.name, sourceDirs, resourceDirs, dependencies, dependsOnSourceSets)
|
||||
return KotlinSourceSetImpl(gradleSourceSet.name, languageSettings, sourceDirs, resourceDirs, dependencies, dependsOnSourceSets)
|
||||
}
|
||||
|
||||
private fun buildLanguageSettings(gradleLanguageSettings: Any): KotlinLanguageSettings? {
|
||||
val languageSettingsClass = gradleLanguageSettings.javaClass
|
||||
val getLanguageVersion = languageSettingsClass.getMethodOrNull("getLanguageVersion") ?: return null
|
||||
val getApiVersion = languageSettingsClass.getMethodOrNull("getApiVersion") ?: return null
|
||||
val getProgressiveMode = languageSettingsClass.getMethodOrNull("getProgressiveMode") ?: return null
|
||||
val getEnabledLanguageFeatures = languageSettingsClass.getMethodOrNull("getEnabledLanguageFeatures") ?: return null
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return KotlinLanguageSettingsImpl(
|
||||
getLanguageVersion(gradleLanguageSettings) as? String,
|
||||
getApiVersion(gradleLanguageSettings) as? String,
|
||||
getProgressiveMode(gradleLanguageSettings) as? Boolean ?: false,
|
||||
getEnabledLanguageFeatures(gradleLanguageSettings) as? Set<String> ?: emptySet()
|
||||
)
|
||||
}
|
||||
|
||||
private fun buildDependencies(
|
||||
|
||||
@@ -75,15 +75,32 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService {
|
||||
project: Project
|
||||
): KotlinSourceSetImpl? {
|
||||
val sourceSetClass = gradleSourceSet.javaClass
|
||||
val getLanguageSettings = sourceSetClass.getMethodOrNull("getLanguageSettings") ?: return null
|
||||
val getSourceDirSet = sourceSetClass.getMethodOrNull("getKotlin") ?: return null
|
||||
val getResourceDirSet = sourceSetClass.getMethodOrNull("getResources") ?: return null
|
||||
val getDependsOn = sourceSetClass.getMethodOrNull("getDependsOn") ?: return null
|
||||
val languageSettings = getLanguageSettings(gradleSourceSet)?.let { buildLanguageSettings(it) } ?: return null
|
||||
val sourceDirs = (getSourceDirSet(gradleSourceSet) as? SourceDirectorySet)?.srcDirs ?: emptySet()
|
||||
val resourceDirs = (getResourceDirSet(gradleSourceSet) as? SourceDirectorySet)?.srcDirs ?: emptySet()
|
||||
val dependencies = buildSourceSetDependencies(gradleSourceSet, dependencyResolver, project)
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val dependsOnSourceSets = (getDependsOn(gradleSourceSet) as? Set<Named>)?.mapTo(LinkedHashSet()) { it.name } ?: emptySet<String>()
|
||||
return KotlinSourceSetImpl(gradleSourceSet.name, sourceDirs, resourceDirs, dependencies, dependsOnSourceSets)
|
||||
return KotlinSourceSetImpl(gradleSourceSet.name, languageSettings, sourceDirs, resourceDirs, dependencies, dependsOnSourceSets)
|
||||
}
|
||||
|
||||
private fun buildLanguageSettings(gradleLanguageSettings: Any): KotlinLanguageSettings? {
|
||||
val languageSettingsClass = gradleLanguageSettings.javaClass
|
||||
val getLanguageVersion = languageSettingsClass.getMethodOrNull("getLanguageVersion") ?: return null
|
||||
val getApiVersion = languageSettingsClass.getMethodOrNull("getApiVersion") ?: return null
|
||||
val getProgressiveMode = languageSettingsClass.getMethodOrNull("getProgressiveMode") ?: return null
|
||||
val getEnabledLanguageFeatures = languageSettingsClass.getMethodOrNull("getEnabledLanguageFeatures") ?: return null
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return KotlinLanguageSettingsImpl(
|
||||
getLanguageVersion(gradleLanguageSettings) as? String,
|
||||
getApiVersion(gradleLanguageSettings) as? String,
|
||||
getProgressiveMode(gradleLanguageSettings) as? Boolean ?: false,
|
||||
getEnabledLanguageFeatures(gradleLanguageSettings) as? Set<String> ?: emptySet()
|
||||
)
|
||||
}
|
||||
|
||||
private fun buildDependencies(
|
||||
|
||||
@@ -9,6 +9,7 @@ import java.io.File
|
||||
|
||||
class KotlinSourceSetImpl(
|
||||
override val name: String,
|
||||
override val languageSettings: KotlinLanguageSettings,
|
||||
override val sourceDirs: Set<File>,
|
||||
override val resourceDirs: Set<File>,
|
||||
override val dependencies: Set<KotlinDependency>,
|
||||
@@ -23,6 +24,13 @@ class KotlinSourceSetImpl(
|
||||
override fun toString() = name
|
||||
}
|
||||
|
||||
class KotlinLanguageSettingsImpl(
|
||||
override val languageVersion: String?,
|
||||
override val apiVersion: String?,
|
||||
override val isProgressiveMode: Boolean,
|
||||
override val enabledLanguageFeatures: Set<String>
|
||||
) : KotlinLanguageSettings
|
||||
|
||||
class KotlinCompilationOutputImpl(
|
||||
override val classesDirs: Set<File>,
|
||||
override val effectiveClassesDir: File?,
|
||||
|
||||
Reference in New Issue
Block a user