[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: d5fbe59a3e
This commit is contained in:
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.cli.common.arguments.copyBean
|
|||||||
import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments
|
import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments
|
||||||
import org.jetbrains.kotlin.platform.IdePlatform
|
import org.jetbrains.kotlin.platform.IdePlatform
|
||||||
import org.jetbrains.kotlin.platform.IdePlatformKind
|
import org.jetbrains.kotlin.platform.IdePlatformKind
|
||||||
|
import org.jetbrains.kotlin.platform.TargetPlatformVersion
|
||||||
import org.jetbrains.kotlin.utils.DescriptionAware
|
import org.jetbrains.kotlin.utils.DescriptionAware
|
||||||
|
|
||||||
@Deprecated("Use IdePlatformKind instead.", level = DeprecationLevel.ERROR)
|
@Deprecated("Use IdePlatformKind instead.", level = DeprecationLevel.ERROR)
|
||||||
|
|||||||
-1
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.platform
|
|||||||
import com.intellij.openapi.components.ServiceManager
|
import com.intellij.openapi.components.ServiceManager
|
||||||
import org.jetbrains.kotlin.config.isJps
|
import org.jetbrains.kotlin.config.isJps
|
||||||
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind
|
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind
|
||||||
import org.jetbrains.kotlin.resolve.TargetPlatform
|
|
||||||
|
|
||||||
interface DefaultIdeTargetPlatformKindProvider {
|
interface DefaultIdeTargetPlatformKindProvider {
|
||||||
val defaultPlatform: IdePlatform<*, *>
|
val defaultPlatform: IdePlatform<*, *>
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.platform
|
package org.jetbrains.kotlin.platform
|
||||||
|
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
||||||
import org.jetbrains.kotlin.config.TargetPlatformVersion
|
|
||||||
import org.jetbrains.kotlin.utils.DescriptionAware
|
import org.jetbrains.kotlin.utils.DescriptionAware
|
||||||
|
|
||||||
abstract class IdePlatform<Kind : IdePlatformKind<Kind>, out Arguments : CommonCompilerArguments> : DescriptionAware {
|
abstract class IdePlatform<Kind : IdePlatformKind<Kind>, out Arguments : CommonCompilerArguments> : DescriptionAware {
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.platform.impl.CommonIdePlatformKind
|
|||||||
import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind
|
import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind
|
||||||
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind
|
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind
|
||||||
import org.jetbrains.kotlin.platform.impl.NativeIdePlatformKind
|
import org.jetbrains.kotlin.platform.impl.NativeIdePlatformKind
|
||||||
import org.jetbrains.kotlin.resolve.TargetPlatform
|
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult
|
import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult
|
||||||
|
|
||||||
abstract class IdePlatformKind<Kind : IdePlatformKind<Kind>> {
|
abstract class IdePlatformKind<Kind : IdePlatformKind<Kind>> {
|
||||||
|
|||||||
@@ -6,12 +6,12 @@
|
|||||||
@file:JvmName("CommonIdePlatformUtil")
|
@file:JvmName("CommonIdePlatformUtil")
|
||||||
package org.jetbrains.kotlin.platform.impl
|
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.CommonCompilerArguments
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments
|
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.IdePlatform
|
||||||
import org.jetbrains.kotlin.platform.IdePlatformKind
|
import org.jetbrains.kotlin.platform.IdePlatformKind
|
||||||
|
import org.jetbrains.kotlin.platform.TargetPlatformVersion
|
||||||
|
|
||||||
object CommonIdePlatformKind : IdePlatformKind<CommonIdePlatformKind>() {
|
object CommonIdePlatformKind : IdePlatformKind<CommonIdePlatformKind>() {
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ object CommonIdePlatformKind : IdePlatformKind<CommonIdePlatformKind>() {
|
|||||||
else null
|
else null
|
||||||
}
|
}
|
||||||
|
|
||||||
override val compilerPlatform get() = CommonPlatform
|
override val compilerPlatform get() = CommonPlatforms.defaultCommonPlatform
|
||||||
|
|
||||||
override val platforms get() = listOf(Platform)
|
override val platforms get() = listOf(Platform)
|
||||||
override val defaultPlatform get() = Platform
|
override val defaultPlatform get() = Platform
|
||||||
|
|||||||
@@ -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.CommonCompilerArguments
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
||||||
import org.jetbrains.kotlin.config.TargetPlatformVersion
|
import org.jetbrains.kotlin.platform.TargetPlatformVersion
|
||||||
import org.jetbrains.kotlin.js.resolve.JsPlatform
|
|
||||||
import org.jetbrains.kotlin.platform.IdePlatform
|
import org.jetbrains.kotlin.platform.IdePlatform
|
||||||
import org.jetbrains.kotlin.platform.IdePlatformKind
|
import org.jetbrains.kotlin.platform.IdePlatformKind
|
||||||
|
import org.jetbrains.kotlin.platform.js.JsPlatforms
|
||||||
|
|
||||||
object JsIdePlatformKind : IdePlatformKind<JsIdePlatformKind>() {
|
object JsIdePlatformKind : IdePlatformKind<JsIdePlatformKind>() {
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ object JsIdePlatformKind : IdePlatformKind<JsIdePlatformKind>() {
|
|||||||
else null
|
else null
|
||||||
}
|
}
|
||||||
|
|
||||||
override val compilerPlatform get() = JsPlatform
|
override val compilerPlatform get() = JsPlatforms.defaultJsPlatform
|
||||||
|
|
||||||
override val platforms get() = listOf(Platform)
|
override val platforms get() = listOf(Platform)
|
||||||
override val defaultPlatform get() = Platform
|
override val defaultPlatform get() = Platform
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
|
|||||||
import org.jetbrains.kotlin.config.JvmTarget
|
import org.jetbrains.kotlin.config.JvmTarget
|
||||||
import org.jetbrains.kotlin.platform.IdePlatform
|
import org.jetbrains.kotlin.platform.IdePlatform
|
||||||
import org.jetbrains.kotlin.platform.IdePlatformKind
|
import org.jetbrains.kotlin.platform.IdePlatformKind
|
||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
|
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||||
|
|
||||||
object JvmIdePlatformKind : IdePlatformKind<JvmIdePlatformKind>() {
|
object JvmIdePlatformKind : IdePlatformKind<JvmIdePlatformKind>() {
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ object JvmIdePlatformKind : IdePlatformKind<JvmIdePlatformKind>() {
|
|||||||
} else null
|
} else null
|
||||||
}
|
}
|
||||||
|
|
||||||
override val compilerPlatform get() = JvmPlatform
|
override val compilerPlatform get() = JvmPlatforms.defaultJvmPlatform
|
||||||
|
|
||||||
override val platforms = JvmTarget.values().map { ver -> Platform(ver) }
|
override val platforms = JvmTarget.values().map { ver -> Platform(ver) }
|
||||||
override val defaultPlatform get() = Platform(JvmTarget.DEFAULT)
|
override val defaultPlatform get() = Platform(JvmTarget.DEFAULT)
|
||||||
|
|||||||
@@ -7,10 +7,10 @@
|
|||||||
package org.jetbrains.kotlin.platform.impl
|
package org.jetbrains.kotlin.platform.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
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.IdePlatform
|
||||||
import org.jetbrains.kotlin.platform.IdePlatformKind
|
import org.jetbrains.kotlin.platform.IdePlatformKind
|
||||||
import org.jetbrains.kotlin.resolve.konan.platform.KonanPlatform
|
import org.jetbrains.kotlin.platform.konan.KonanPlatforms
|
||||||
|
|
||||||
object NativeIdePlatformKind : IdePlatformKind<NativeIdePlatformKind>() {
|
object NativeIdePlatformKind : IdePlatformKind<NativeIdePlatformKind>() {
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ object NativeIdePlatformKind : IdePlatformKind<NativeIdePlatformKind>() {
|
|||||||
else null
|
else null
|
||||||
}
|
}
|
||||||
|
|
||||||
override val compilerPlatform get() = KonanPlatform
|
override val compilerPlatform get() = KonanPlatforms.defaultKonanPlatform
|
||||||
|
|
||||||
override val platforms get() = listOf(Platform)
|
override val platforms get() = listOf(Platform)
|
||||||
override val defaultPlatform get() = Platform
|
override val defaultPlatform get() = Platform
|
||||||
|
|||||||
Reference in New Issue
Block a user