[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.
This commit is contained in:
Dmitry Savvinov
2019-04-24 11:59:07 +03:00
parent 451d14e504
commit d5fbe59a3e
162 changed files with 832 additions and 711 deletions
@@ -26,8 +26,8 @@ import org.jetbrains.kotlin.idea.configuration.hasKotlinJvmRuntimeInScope
import org.jetbrains.kotlin.idea.maven.PomFile
import org.jetbrains.kotlin.idea.versions.getDefaultJvmTarget
import org.jetbrains.kotlin.idea.versions.getStdlibArtifactId
import org.jetbrains.kotlin.resolve.TargetPlatform
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
class KotlinJavaMavenConfigurator : KotlinMavenConfigurator(
KotlinJavaMavenConfigurator.TEST_LIB_ID,
@@ -68,7 +68,7 @@ class KotlinJavaMavenConfigurator : KotlinMavenConfigurator(
}
override val targetPlatform: TargetPlatform
get() = JvmPlatform
get() = JvmPlatforms.defaultJvmPlatform
companion object {
private const val NAME = "maven"
@@ -21,8 +21,8 @@ import org.jetbrains.idea.maven.dom.model.MavenDomPlugin
import org.jetbrains.kotlin.idea.configuration.hasKotlinJsRuntimeInScope
import org.jetbrains.kotlin.idea.maven.PomFile
import org.jetbrains.kotlin.idea.versions.MAVEN_JS_STDLIB_ID
import org.jetbrains.kotlin.js.resolve.JsPlatform
import org.jetbrains.kotlin.resolve.TargetPlatform
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.js.JsPlatforms
class KotlinJavascriptMavenConfigurator :
KotlinMavenConfigurator(null, false, KotlinJavascriptMavenConfigurator.NAME, KotlinJavascriptMavenConfigurator.PRESENTABLE_TEXT) {
@@ -43,7 +43,7 @@ class KotlinJavascriptMavenConfigurator :
}
override val targetPlatform: TargetPlatform
get() = JsPlatform
get() = JsPlatforms.defaultJsPlatform
override fun getMinimumSupportedVersion() = "1.1.0"
@@ -46,13 +46,13 @@ import org.jetbrains.kotlin.idea.framework.JSLibraryKind
import org.jetbrains.kotlin.idea.framework.KotlinSdkType
import org.jetbrains.kotlin.idea.project.languageVersionSettings
import org.jetbrains.kotlin.idea.refactoring.toPsiFile
import org.jetbrains.kotlin.js.resolve.JsPlatform
import org.jetbrains.kotlin.platform.impl.*
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.TargetPlatform
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners
import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.js.JsPlatforms
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.junit.Assert
import org.junit.runner.RunWith
import java.io.File
@@ -2970,8 +2970,8 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertImporterStatePresent()
checkStableModuleName("project", "project", JvmPlatform, isProduction = true)
checkStableModuleName("project", "project", JvmPlatform, isProduction = false)
checkStableModuleName("project", "project", JvmPlatforms.defaultJvmPlatform, isProduction = true)
checkStableModuleName("project", "project", JvmPlatforms.defaultJvmPlatform, isProduction = false)
}
fun testStableModuleNameWhileUsngMaven_JS() {
@@ -3031,8 +3031,8 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
// Note that we check name induced by '-output-file' -- may be it's not the best
// decision, but we don't have a better one
checkStableModuleName("project", "test", JsPlatform, isProduction = true)
checkStableModuleName("project", "test", JsPlatform, isProduction = false)
checkStableModuleName("project", "test", JsPlatforms.defaultJsPlatform, isProduction = true)
checkStableModuleName("project", "test", JsPlatforms.defaultJsPlatform, isProduction = false)
}
private fun checkStableModuleName(projectName: String, expectedName: String, platform: TargetPlatform, isProduction: Boolean) {