MPP: Refactoring, extract IDE platform kinds, allow to add custom platforms

Original commit: d00f5b335a
This commit is contained in:
Yan Zhulanow
2018-08-30 18:46:59 +05:00
parent fd8083bb4b
commit dc022aef69
13 changed files with 284 additions and 82 deletions
@@ -10,16 +10,14 @@ import org.jetbrains.jps.model.ex.JpsElementChildRoleBase
import org.jetbrains.jps.model.java.JpsJavaExtensionService
import org.jetbrains.jps.model.module.JpsModule
import org.jetbrains.kotlin.cli.common.arguments.*
import org.jetbrains.kotlin.config.CompilerSettings
import org.jetbrains.kotlin.config.KotlinFacetSettings
import org.jetbrains.kotlin.config.KotlinModuleKind
import org.jetbrains.kotlin.config.TargetPlatformKind
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.platform.IdePlatform
val JpsModule.kotlinFacet: JpsKotlinFacetModuleExtension?
get() = container.getChild(JpsKotlinFacetModuleExtension.KIND)
val JpsModule.targetPlatform: TargetPlatformKind<*>?
get() = kotlinFacet?.settings?.targetPlatformKind
val JpsModule.platform: IdePlatform<*, *>?
get() = kotlinFacet?.settings?.platform
val JpsModule.kotlinKind: KotlinModuleKind
get() = kotlinFacet?.settings?.kind ?: KotlinModuleKind.DEFAULT
@@ -10,12 +10,13 @@ import org.jetbrains.jps.builders.ModuleBasedBuildTargetType
import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType
import org.jetbrains.jps.incremental.CompileContext
import org.jetbrains.jps.incremental.ModuleBuildTarget
import org.jetbrains.jps.model.java.JpsJavaModuleType
import org.jetbrains.jps.model.library.JpsOrderRootType
import org.jetbrains.jps.model.module.JpsModule
import org.jetbrains.jps.util.JpsPathUtil
import org.jetbrains.kotlin.config.TargetPlatformKind
import org.jetbrains.kotlin.jps.model.targetPlatform
import org.jetbrains.kotlin.jps.model.platform
import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider
import org.jetbrains.kotlin.platform.IdePlatformKind
import org.jetbrains.kotlin.platform.impl.*
import org.jetbrains.kotlin.utils.LibraryUtils
import java.util.concurrent.ConcurrentHashMap
@@ -25,9 +26,6 @@ fun ModuleBuildTarget(module: JpsModule, isTests: Boolean) =
val JpsModule.productionBuildTarget
get() = ModuleBuildTarget(this, false)
val JpsModule.testBuildTarget
get() = ModuleBuildTarget(this, true)
private val kotlinBuildTargetsCompileContextKey = Key<KotlinBuildTargets>("kotlinBuildTargets")
val CompileContext.kotlinBuildTargets: KotlinBuildTargets
@@ -59,10 +57,13 @@ class KotlinBuildTargets internal constructor(val compileContext: CompileContext
if (target.targetType !is ModuleBasedBuildTargetType) return null
return byJpsModuleBuildTarget.computeIfAbsent(target) {
when (target.module.targetPlatform ?: detectTargetPlatform(target)) {
is TargetPlatformKind.Common -> KotlinCommonModuleBuildTarget(compileContext, target)
is TargetPlatformKind.JavaScript -> KotlinJsModuleBuildTarget(compileContext, target)
is TargetPlatformKind.Jvm -> KotlinJvmModuleBuildTarget(compileContext, target)
val platform = target.module.platform?.kind ?: detectTargetPlatform(target)
when {
platform.isCommon -> KotlinCommonModuleBuildTarget(compileContext, target)
platform.isJavaScript -> KotlinJsModuleBuildTarget(compileContext, target)
platform.isJvm -> KotlinJvmModuleBuildTarget(compileContext, target)
else -> error("Invalid platform $platform")
}
}
}
@@ -71,10 +72,13 @@ class KotlinBuildTargets internal constructor(val compileContext: CompileContext
* Compatibility for KT-14082
* todo: remove when all projects migrated to facets
*/
private fun detectTargetPlatform(target: ModuleBuildTarget): TargetPlatformKind<*> {
if (hasJsStdLib(target)) return TargetPlatformKind.JavaScript
private fun detectTargetPlatform(target: ModuleBuildTarget): IdePlatformKind<*> {
if (hasJsStdLib(target)) {
return JsIdePlatformKind
}
return TargetPlatformKind.DEFAULT_PLATFORM
return JvmIdePlatformKind
return DefaultIdeTargetPlatformKindProvider.defaultPlatform.kind
}
private fun hasJsStdLib(target: ModuleBuildTarget): Boolean {