Multi-platform Projects: Enable multi-platform projects for platform modules which depend on common modules

Original commit: 332d1f6405
This commit is contained in:
Alexey Sedunov
2016-12-16 15:08:24 +03:00
parent e48af8ca1a
commit cfe9f0d579
@@ -20,6 +20,7 @@ import org.jetbrains.jps.model.JpsProject
import org.jetbrains.jps.model.ex.JpsElementBase
import org.jetbrains.jps.model.ex.JpsElementChildRoleBase
import org.jetbrains.jps.model.module.JpsModule
import org.jetbrains.jps.model.module.JpsModuleDependency
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
@@ -61,15 +62,27 @@ class JpsKotlinCompilerSettings : JpsElementBase<JpsKotlinCompilerSettings>() {
return settings
}
private val JpsModule.targetPlatform: TargetPlatformKind<*>?
get() {
val facetSettings = kotlinFacetExtension?.settings ?: return TargetPlatformKind.Default
if (facetSettings.useProjectSettings) return TargetPlatformKind.Default
return facetSettings.versionInfo.targetPlatformKind
}
fun getCommonCompilerArguments(module: JpsModule): CommonCompilerArguments {
val defaultArguments = getSettings(module.project).commonCompilerArguments
val facetSettings = module.kotlinFacetExtension?.settings ?: return defaultArguments
if (facetSettings.useProjectSettings) return defaultArguments
val (languageLevel, apiLevel) = facetSettings.versionInfo
return facetSettings.compilerInfo.commonCompilerArguments?.apply {
val facetArguments = facetSettings.compilerInfo.commonCompilerArguments ?: return defaultArguments
return copyBean(facetArguments).apply {
languageVersion = languageLevel?.description
apiVersion = apiLevel?.description
} ?: defaultArguments
multiPlatform = module
.dependenciesList
.dependencies
.any { (it as? JpsModuleDependency)?.module?.targetPlatform == TargetPlatformKind.Default }
}
}
fun setCommonCompilerArguments(project: JpsProject, commonCompilerSettings: CommonCompilerArguments) {