From 7deb18da0b9947b8c7085d51d1b08728086882ae Mon Sep 17 00:00:00 2001 From: Dmitry Savvinov Date: Wed, 24 Apr 2019 11:59:07 +0300 Subject: [PATCH] [Platform API] Introduce fundamental abstraction of Platform This is a large commit, which introduces general API for working with abstraction of Platform. - Add new abstraction to 'core' - SimplePlatform - which represents exactly one platform - Clients are strongly prohibited to create instances of SimplePlatform by hand, instead, corresponding *Platforms abstraction should be used (e.g. JvmPlatforms, JsPlatforms, KonanPlatforms) - Move TargetPlatform to 'core', it represents now a collection of SimplePlatforms - Clients are strongly encouraged to use TargetPlatform (not SimplePlatform) in API, to enforce checks for multiplatform - Provide a helper-extensions to work with TargetPlatform (in particular, for getting a specific component platform) - Remove MultiTargetPlatform in favour of TargetPlatform - Notably, this commit leaves another widely used duplicated abstraction, namely, IdePlatform. For the sake sanity, removal of IdePlatform is extracted in the separate commit. Original commit: d5fbe59a3e4990f597de7e245e907db186ba5928 --- .../src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt | 1 + .../kotlin/platform/DefaultIdeTargetPlatformKindProvider.kt | 1 - .../src/org/jetbrains/kotlin/platform/IdePlatform.kt | 1 - .../src/org/jetbrains/kotlin/platform/IdePlatformKind.kt | 1 - .../jetbrains/kotlin/platform/impl/CommonIdePlatformKind.kt | 6 +++--- .../org/jetbrains/kotlin/platform/impl/JsIdePlatformKind.kt | 6 +++--- .../jetbrains/kotlin/platform/impl/JvmIdePlatformKind.kt | 4 ++-- .../jetbrains/kotlin/platform/impl/NativeIdePlatformKind.kt | 6 +++--- 8 files changed, 12 insertions(+), 14 deletions(-) diff --git a/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt b/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt index 05e89af0508..aaa4ea66c9a 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt +++ b/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.cli.common.arguments.copyBean import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.IdePlatformKind +import org.jetbrains.kotlin.platform.TargetPlatformVersion import org.jetbrains.kotlin.utils.DescriptionAware @Deprecated("Use IdePlatformKind instead.", level = DeprecationLevel.ERROR) diff --git a/jps/jps-common/src/org/jetbrains/kotlin/platform/DefaultIdeTargetPlatformKindProvider.kt b/jps/jps-common/src/org/jetbrains/kotlin/platform/DefaultIdeTargetPlatformKindProvider.kt index 4ce422fdba7..47b73516883 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/platform/DefaultIdeTargetPlatformKindProvider.kt +++ b/jps/jps-common/src/org/jetbrains/kotlin/platform/DefaultIdeTargetPlatformKindProvider.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.platform import com.intellij.openapi.components.ServiceManager import org.jetbrains.kotlin.config.isJps import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind -import org.jetbrains.kotlin.resolve.TargetPlatform interface DefaultIdeTargetPlatformKindProvider { val defaultPlatform: IdePlatform<*, *> diff --git a/jps/jps-common/src/org/jetbrains/kotlin/platform/IdePlatform.kt b/jps/jps-common/src/org/jetbrains/kotlin/platform/IdePlatform.kt index 7778fdbc343..c0aee27190c 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/platform/IdePlatform.kt +++ b/jps/jps-common/src/org/jetbrains/kotlin/platform/IdePlatform.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.platform import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments -import org.jetbrains.kotlin.config.TargetPlatformVersion import org.jetbrains.kotlin.utils.DescriptionAware abstract class IdePlatform, out Arguments : CommonCompilerArguments> : DescriptionAware { diff --git a/jps/jps-common/src/org/jetbrains/kotlin/platform/IdePlatformKind.kt b/jps/jps-common/src/org/jetbrains/kotlin/platform/IdePlatformKind.kt index 7c7b7adaf00..06c2f46e77e 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/platform/IdePlatformKind.kt +++ b/jps/jps-common/src/org/jetbrains/kotlin/platform/IdePlatformKind.kt @@ -13,7 +13,6 @@ import org.jetbrains.kotlin.platform.impl.CommonIdePlatformKind import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind import org.jetbrains.kotlin.platform.impl.NativeIdePlatformKind -import org.jetbrains.kotlin.resolve.TargetPlatform import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult abstract class IdePlatformKind> { diff --git a/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/CommonIdePlatformKind.kt b/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/CommonIdePlatformKind.kt index 48f8018be6b..edcc1a4355a 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/CommonIdePlatformKind.kt +++ b/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/CommonIdePlatformKind.kt @@ -6,12 +6,12 @@ @file:JvmName("CommonIdePlatformUtil") package org.jetbrains.kotlin.platform.impl -import org.jetbrains.kotlin.analyzer.common.CommonPlatform import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments -import org.jetbrains.kotlin.config.TargetPlatformVersion +import org.jetbrains.kotlin.platform.CommonPlatforms import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.IdePlatformKind +import org.jetbrains.kotlin.platform.TargetPlatformVersion object CommonIdePlatformKind : IdePlatformKind() { @@ -20,7 +20,7 @@ object CommonIdePlatformKind : IdePlatformKind() { else null } - override val compilerPlatform get() = CommonPlatform + override val compilerPlatform get() = CommonPlatforms.defaultCommonPlatform override val platforms get() = listOf(Platform) override val defaultPlatform get() = Platform diff --git a/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/JsIdePlatformKind.kt b/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/JsIdePlatformKind.kt index 26f86068749..19b30a8932c 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/JsIdePlatformKind.kt +++ b/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/JsIdePlatformKind.kt @@ -8,10 +8,10 @@ package org.jetbrains.kotlin.platform.impl import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments -import org.jetbrains.kotlin.config.TargetPlatformVersion -import org.jetbrains.kotlin.js.resolve.JsPlatform +import org.jetbrains.kotlin.platform.TargetPlatformVersion import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.IdePlatformKind +import org.jetbrains.kotlin.platform.js.JsPlatforms object JsIdePlatformKind : IdePlatformKind() { @@ -20,7 +20,7 @@ object JsIdePlatformKind : IdePlatformKind() { else null } - override val compilerPlatform get() = JsPlatform + override val compilerPlatform get() = JsPlatforms.defaultJsPlatform override val platforms get() = listOf(Platform) override val defaultPlatform get() = Platform diff --git a/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/JvmIdePlatformKind.kt b/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/JvmIdePlatformKind.kt index f3dccb02eab..16ee456012d 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/JvmIdePlatformKind.kt +++ b/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/JvmIdePlatformKind.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.IdePlatformKind -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms object JvmIdePlatformKind : IdePlatformKind() { @@ -26,7 +26,7 @@ object JvmIdePlatformKind : IdePlatformKind() { } else null } - override val compilerPlatform get() = JvmPlatform + override val compilerPlatform get() = JvmPlatforms.defaultJvmPlatform override val platforms = JvmTarget.values().map { ver -> Platform(ver) } override val defaultPlatform get() = Platform(JvmTarget.DEFAULT) diff --git a/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/NativeIdePlatformKind.kt b/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/NativeIdePlatformKind.kt index 1d766132e7a..57006df588b 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/NativeIdePlatformKind.kt +++ b/jps/jps-common/src/org/jetbrains/kotlin/platform/impl/NativeIdePlatformKind.kt @@ -7,10 +7,10 @@ package org.jetbrains.kotlin.platform.impl import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments -import org.jetbrains.kotlin.config.TargetPlatformVersion +import org.jetbrains.kotlin.platform.TargetPlatformVersion import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.IdePlatformKind -import org.jetbrains.kotlin.resolve.konan.platform.KonanPlatform +import org.jetbrains.kotlin.platform.konan.KonanPlatforms object NativeIdePlatformKind : IdePlatformKind() { @@ -19,7 +19,7 @@ object NativeIdePlatformKind : IdePlatformKind() { else null } - override val compilerPlatform get() = KonanPlatform + override val compilerPlatform get() = KonanPlatforms.defaultKonanPlatform override val platforms get() = listOf(Platform) override val defaultPlatform get() = Platform