From 2d528c6396428d5de325d17c67369418b8a47e57 Mon Sep 17 00:00:00 2001 From: Dmitry Savvinov Date: Mon, 25 Mar 2019 18:38:10 +0300 Subject: [PATCH] [Platform API] Remove IdePlatform, use TargetPlatform instead --- .../idea/caches/project/multiplatformUtil.kt | 7 ++- .../caches/resolve/KotlinCacheServiceImpl.kt | 2 +- .../compiler/IDELanguageSettingsProvider.kt | 5 +- .../idea/facet/KotlinVersionInfoProvider.kt | 3 +- .../kotlin/idea/framework/LibraryKinds.kt | 9 +-- .../jetbrains/kotlin/idea/project/Platform.kt | 25 ++++---- .../idea/project/ProjectStructureUtil.java | 6 +- .../idea/project/TargetPlatformDetector.java | 6 +- .../KotlinSourceSetDataService.kt | 5 +- .../KotlinMPPGradleProjectTaskRunner.java | 15 +++-- .../KotlinMPPGradleProjectTaskRunner.java.182 | 15 +++-- .../run/KotlinMPPGradleTestTasksProvider.kt | 3 +- .../NewMultiplatformProjectImportingTest.kt | 34 +++++------ .../kotlin/gradle/projectStructureDSL.kt | 7 ++- .../gradle/GradleFacetImportTest.kt | 48 +++++++-------- .../kotlin/config/KotlinFacetSettings.kt | 4 +- .../kotlin/config/facetSerialization.kt | 33 +++++++++-- .../DefaultIdeTargetPlatformKindProvider.kt | 20 ++++--- .../jetbrains/kotlin/platform/IdePlatform.kt | 21 ------- .../kotlin/platform/IdePlatformKind.kt | 28 +++++---- .../platform/impl/CommonIdePlatformKind.kt | 30 ++++------ .../kotlin/platform/impl/JsIdePlatformKind.kt | 28 ++++----- .../platform/impl/JvmIdePlatformKind.kt | 39 ++++++------- .../platform/impl/NativeIdePlatformKind.kt | 41 +++++++------ .../KotlinJavaModuleConfigurator.kt | 2 +- ...kLibraryValidatorWithDynamicDescription.kt | 11 ++-- .../platform/CommonIdePlatformKindTooling.kt | 3 +- .../run/KotlinMultiplatformJUnitRecognizer.kt | 4 +- .../jetbrains/kotlin/idea/run/jvmMppUtils.kt | 4 +- .../kotlin/idea/maven/KotlinMavenImporter.kt | 7 ++- .../idea/maven/KotlinMavenImporterTest.kt | 58 ++++++++++--------- .../ide/konan/NativeIdePlatformKindTooling.kt | 3 +- .../idea/CommonModuleResolveScopeEnlarger.kt | 8 +-- .../KotlinCompilerConfigurableTab.java | 9 ++- .../idea/facet/KotlinFacetEditorGeneralTab.kt | 27 +++++---- .../jetbrains/kotlin/idea/facet/facetUtils.kt | 18 +++--- .../idea/framework/CreateKotlinSdkActivity.kt | 5 +- .../idea/framework/TargetRetrieveActivity.kt | 17 +++--- .../hierarchy/KotlinTypeHierarchyProvider.kt | 4 +- .../KotlinRunLineMarkerContributor.kt | 3 +- .../KotlinTestRunLineMarkerContributor.kt | 3 +- .../org/jetbrains/kotlin/idea/js/jsUtils.kt | 4 +- .../expectactual/ExpectActualUtils.kt | 2 +- ...KotlinNonJvmSourceRootConverterProvider.kt | 3 +- .../configuration/ConfigureKotlinTest.java | 22 +++---- .../highlighter/Jsr305HighlightingTest.kt | 5 +- .../idea/multiplatform/multiPlatformSetup.kt | 45 +++++++------- .../idea/stubs/AbstractMultiModuleTest.kt | 4 +- .../jps/build/AbstractIncrementalJpsTest.kt | 3 +- .../jps/build/dependeciestxt/ModulesTxt.kt | 6 +- .../kotlin/jps/model/ModuleSettings.kt | 4 +- .../kotlin/jps/targets/KotlinTargetsIndex.kt | 5 +- .../KotlinUnsupportedModuleBuildTarget.kt | 3 +- 53 files changed, 384 insertions(+), 342 deletions(-) delete mode 100644 idea/idea-jps-common/src/org/jetbrains/kotlin/platform/IdePlatform.kt diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt index 0af8fb08770..fa70e290755 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/multiplatformUtil.kt @@ -40,7 +40,7 @@ val Module.sourceType: SourceType? val Module.isMPPModule: Boolean get() { val settings = facetSettings ?: return false - return settings.platform.isCommon || + return settings.platform.isCommon() || settings.implementedModuleNames.isNotEmpty() || settings.kind.isNewMPP } @@ -68,7 +68,7 @@ val Module.implementedModules: List CachedValueProvider.Result( if (isNewMPPModule) { rootManager.dependencies.filter { - it.isNewMPPModule && it.platform is CommonIdePlatformKind.Platform && it.externalProjectId == externalProjectId + it.isNewMPPModule && it.platform.isCommon() && it.externalProjectId == externalProjectId } } else { val modelsProvider = IdeModelsProviderImpl(project) @@ -105,6 +105,9 @@ private fun Module.toInfo(type: SourceType): ModuleSourceInfo? = when (type) { } +/** + * This function returns immediate parents in dependsOn graph + */ val ModuleDescriptor.implementedDescriptors: List get() { val moduleInfo = getCapability(ModuleInfo.Capability) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt index ba0003c4631..55699d2da60 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt @@ -98,7 +98,7 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService { ): ProjectResolutionFacade { val sdk = dependenciesModuleInfo.sdk val platform = /* Fallback to Common platform in CIDR (Java is not supported there) */ - DefaultIdeTargetPlatformKindProvider.defaultCompilerPlatform // TODO: Js scripts? + DefaultIdeTargetPlatformKindProvider.defaultPlatform // TODO: Js scripts? val settings = PlatformAnalysisSettings( platform, sdk, true, LanguageFeature.ReleaseCoroutines.defaultState == LanguageFeature.State.ENABLED diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IDELanguageSettingsProvider.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IDELanguageSettingsProvider.kt index 7870b826e52..23f40adbd2c 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IDELanguageSettingsProvider.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IDELanguageSettingsProvider.kt @@ -38,6 +38,8 @@ import org.jetbrains.kotlin.idea.project.getLanguageVersionSettings import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition +import org.jetbrains.kotlin.platform.jvm.JdkPlatform +import org.jetbrains.kotlin.platform.subplatformOfType import org.jetbrains.kotlin.utils.Jsr305State object IDELanguageSettingsProvider : LanguageSettingsProvider { @@ -75,7 +77,8 @@ object IDELanguageSettingsProvider : LanguageSettingsProvider { // TODO(dsavvinov): get rid of this method; instead store proper instance of TargetPlatformVersion in platform-instance override fun getTargetPlatform(moduleInfo: ModuleInfo, project: Project): TargetPlatformVersion = when (moduleInfo) { - is ModuleSourceInfo -> moduleInfo.module.platform?.version ?: TargetPlatformVersion.NoVersion + is ModuleSourceInfo -> (moduleInfo.module.platform?.subplatformOfType())?.targetVersion + ?: TargetPlatformVersion.NoVersion is ScriptModuleInfo -> getLanguageSettingsForScripts(project, moduleInfo.scriptDefinition).targetPlatformVersion is ScriptDependenciesInfo.ForFile -> getLanguageSettingsForScripts(project, moduleInfo.scriptDefinition).targetPlatformVersion else -> TargetPlatformVersion.NoVersion diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/facet/KotlinVersionInfoProvider.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/facet/KotlinVersionInfoProvider.kt index a227f51bb55..ed3f0ac0dca 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/facet/KotlinVersionInfoProvider.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/facet/KotlinVersionInfoProvider.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.platform.IdePlatformKind import org.jetbrains.kotlin.platform.orDefault import org.jetbrains.kotlin.config.VersionView +import org.jetbrains.kotlin.platform.idePlatformKind interface KotlinVersionInfoProvider { companion object { @@ -92,7 +93,7 @@ private fun Iterable.addReleaseVersionIfNecessary(shouldAdd: Boolean): I fun getRuntimeLibraryVersion(module: Module): String? { val targetPlatform = KotlinFacetSettingsProvider.getInstance(module.project).getInitializedSettings(module).platform - val versions = getRuntimeLibraryVersions(module, null, targetPlatform.orDefault().kind) + val versions = getRuntimeLibraryVersions(module, null, targetPlatform.orDefault().idePlatformKind) return versions.toSet().singleOrNull() } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/LibraryKinds.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/LibraryKinds.kt index 2eed2728606..346925766b5 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/LibraryKinds.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/framework/LibraryKinds.kt @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.idea.vfilefinder.getLibraryKindForJar import org.jetbrains.kotlin.platform.CommonPlatforms import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.idePlatformKind import org.jetbrains.kotlin.platform.js.JsPlatforms import org.jetbrains.kotlin.utils.PathUtil import java.util.jar.Attributes @@ -57,12 +58,12 @@ object CommonLibraryKind : PersistentLibraryKind("kotlin val PersistentLibraryKind<*>?.platform: TargetPlatform get() = when (this) { is KotlinLibraryKind -> this.compilerPlatform - else -> DefaultIdeTargetPlatformKindProvider.defaultCompilerPlatform + else -> DefaultIdeTargetPlatformKindProvider.defaultPlatform } fun getLibraryPlatform(project: Project, library: Library): TargetPlatform { - if (library !is LibraryEx) return DefaultIdeTargetPlatformKindProvider.defaultCompilerPlatform - if (library.isDisposed) return DefaultIdeTargetPlatformKindProvider.defaultCompilerPlatform + if (library !is LibraryEx) return DefaultIdeTargetPlatformKindProvider.defaultPlatform + if (library.isDisposed) return DefaultIdeTargetPlatformKindProvider.defaultPlatform return library.effectiveKind(project).platform } @@ -87,7 +88,7 @@ fun detectLibraryKind(roots: Array): PersistentLibraryKind<*>? { if (matchingResolution != null) return matchingResolution.libraryKind - return DefaultIdeTargetPlatformKindProvider.defaultPlatform.kind.resolution.libraryKind + return DefaultIdeTargetPlatformKindProvider.defaultPlatform.idePlatformKind.resolution.libraryKind } fun getLibraryJar(roots: Array, jarPattern: Pattern): VirtualFile? { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt index a5b9fdefffe..2aed8533746 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt @@ -42,15 +42,16 @@ import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCompilerSettings import org.jetbrains.kotlin.idea.facet.getLibraryLanguageLevel import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider -import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.IdePlatformKind -import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind -import org.jetbrains.kotlin.platform.impl.isCommon +import org.jetbrains.kotlin.platform.idePlatformKind +import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.UserDataProperty import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.impl.isCommon +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.utils.Jsr305State import java.io.File @@ -64,7 +65,7 @@ var KtFile.forcedTargetPlatform: TargetPlatform? by UserDataProperty(Key.create( fun Module.getAndCacheLanguageLevelByDependencies(): LanguageVersion { val facetSettings = KotlinFacetSettingsProvider.getInstance(project).getInitializedSettings(this) - val languageLevel = getLibraryLanguageLevel(this, null, facetSettings.platform?.kind) + val languageLevel = getLibraryLanguageLevel(this, null, facetSettings.platform?.idePlatformKind) // Preserve inferred version in facet/project settings if (facetSettings.useProjectSettings) { @@ -196,7 +197,7 @@ private fun Module.computeLanguageVersionSettings(): LanguageVersionSettings { val languageFeatures = facetSettings.mergedCompilerArguments?.configureLanguageFeatures(MessageCollector.NONE)?.apply { configureCoroutinesSupport(facetSettings.coroutineSupport, languageVersion) - configureMultiplatformSupport(facetSettings.platform?.kind, this@computeLanguageVersionSettings) + configureMultiplatformSupport(facetSettings.platform?.idePlatformKind, this@computeLanguageVersionSettings) configureNewInferenceSupportInIDE(project) }.orEmpty() @@ -210,26 +211,26 @@ private fun Module.computeLanguageVersionSettings(): LanguageVersionSettings { ) } -val Module.platform: IdePlatform<*, *>? +val Module.platform: TargetPlatform? get() = KotlinFacetSettingsProvider.getInstance(project).getInitializedSettings(this).platform ?: project.platform // FIXME(dsavvinov): this logic is clearly wrong in MPP environment; review and fix -val Project.platform: IdePlatform<*, *>? +val Project.platform: TargetPlatform? get() { val jvmTarget = Kotlin2JvmCompilerArgumentsHolder.getInstance(this).settings.jvmTarget ?: return null val version = JvmTarget.fromString(jvmTarget) ?: return null - return JvmIdePlatformKind.Platform(version) + return JvmPlatforms.jvmPlatformByTargetVersion(version) } private val Module.implementsCommonModule: Boolean - get() = !platform.isCommon - && ModuleRootManager.getInstance(this).dependencies.any { it.platform.isCommon } + get() = !platform.isCommon() // FIXME(dsavvinov): this doesn't seems right, in multilevel-MPP 'common' modules can implement other commons + && ModuleRootManager.getInstance(this).dependencies.any { it.platform.isCommon() } private fun parseArguments( - platformKind: IdePlatform<*, *>, + platformKind: TargetPlatform, additionalArguments: List ): CommonCompilerArguments { - return platformKind.createArguments().also { parseCommandLineArguments(additionalArguments, it) } + return platformKind.createArguments { parseCommandLineArguments(additionalArguments, this) } } fun MutableMap.configureCoroutinesSupport( diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ProjectStructureUtil.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ProjectStructureUtil.java index 850d80ac068..40632e76ef0 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ProjectStructureUtil.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ProjectStructureUtil.java @@ -23,7 +23,7 @@ import com.intellij.psi.util.CachedValue; import com.intellij.psi.util.CachedValueProvider; import com.intellij.psi.util.CachedValuesManager; import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.platform.IdePlatform; +import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProviderKt; import org.jetbrains.kotlin.platform.IdePlatformKindUtil; import org.jetbrains.kotlin.platform.TargetPlatform; @@ -38,8 +38,8 @@ public class ProjectStructureUtil { CachedValue result = module.getUserData(PLATFORM_FOR_MODULE); if (result == null) { result = CachedValuesManager.getManager(module.getProject()).createCachedValue(() -> { - IdePlatform platform = IdePlatformKindUtil.orDefault(PlatformKt.getPlatform(module)); - return CachedValueProvider.Result.create(platform.getKind().getCompilerPlatform(), + TargetPlatform platform = DefaultIdeTargetPlatformKindProviderKt.orDefault(PlatformKt.getPlatform(module)); + return CachedValueProvider.Result.create(platform, ProjectRootModificationTracker.getInstance(module.getProject())); }, false); diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java index 5c8242466c5..d5ee25b0e01 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/TargetPlatformDetector.java @@ -25,7 +25,6 @@ import com.intellij.psi.PsiFile; import kotlin.collections.CollectionsKt; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider; -import org.jetbrains.kotlin.platform.IdePlatform; import org.jetbrains.kotlin.platform.IdePlatformKind; import org.jetbrains.kotlin.platform.jvm.JvmPlatforms; import org.jetbrains.kotlin.psi.KtCodeFragment; @@ -66,8 +65,7 @@ public class TargetPlatformDetector { KotlinScriptDefinition scriptDefinition = DefinitionsKt.scriptDefinition(file); if (scriptDefinition != null) { String platformNameFromScriptDefinition = scriptDefinition.getPlatform(); - for (IdePlatform platform : IdePlatformKind.Companion.getAll_PLATFORMS()) { - TargetPlatform compilerPlatform = platform.getKind().getCompilerPlatform(); + for (TargetPlatform compilerPlatform : IdePlatformKind.Companion.getAll_PLATFORMS()) { // FIXME(dsavvinov): get rid of matching by name SimplePlatform simplePlatform = CollectionsKt.single(compilerPlatform); if (simplePlatform.getPlatformName().equals(platformNameFromScriptDefinition)) { @@ -85,7 +83,7 @@ public class TargetPlatformDetector { } } - return DefaultIdeTargetPlatformKindProvider.Companion.getDefaultCompilerPlatform(); + return DefaultIdeTargetPlatformKindProvider.Companion.getDefaultPlatform(); } @NotNull diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinSourceSetDataService.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinSourceSetDataService.kt index ae88cd88b50..022d9d2ab9d 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinSourceSetDataService.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinSourceSetDataService.kt @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.idea.inspections.gradle.findKotlinPluginVersion import org.jetbrains.kotlin.idea.platform.IdePlatformKindTooling import org.jetbrains.kotlin.idea.roots.migrateNonJvmSourceFolders import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.plugins.gradle.model.data.BuildScriptClasspathData import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData @@ -99,10 +100,12 @@ class KotlinSourceSetDataService : AbstractProjectDataService { val target = JvmTarget.fromString(moduleData.targetCompatibility ?: "") ?: JvmTarget.DEFAULT - JvmIdePlatformKind.Platform(target) + JvmPlatforms.jvmPlatformByTargetVersion(target) } else -> platformKind.defaultPlatform } diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/gradle/execution/KotlinMPPGradleProjectTaskRunner.java b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/gradle/execution/KotlinMPPGradleProjectTaskRunner.java index be80713e15e..20e66b23b6f 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/gradle/execution/KotlinMPPGradleProjectTaskRunner.java +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/gradle/execution/KotlinMPPGradleProjectTaskRunner.java @@ -36,9 +36,14 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.config.KotlinFacetSettings; import org.jetbrains.kotlin.idea.facet.KotlinFacet; -import org.jetbrains.kotlin.platform.IdePlatform; +import org.jetbrains.kotlin.konan.target.KonanTargetKt; +import org.jetbrains.kotlin.platform.IdePlatformKindUtil; +import org.jetbrains.kotlin.platform.TargetPlatformKt; import org.jetbrains.kotlin.platform.impl.CommonIdePlatformUtil; import org.jetbrains.kotlin.platform.impl.NativeIdePlatformUtil; +import org.jetbrains.kotlin.platform.TargetPlatform; +import org.jetbrains.kotlin.platform.PlatformUtilKt; +import org.jetbrains.kotlin.platform.konan.KonanPlatformKt; import org.jetbrains.plugins.gradle.execution.build.CachedModuleDataFinder; import org.jetbrains.plugins.gradle.execution.build.GradleProjectTaskRunner; import org.jetbrains.plugins.gradle.service.project.GradleBuildSrcProjectsResolver; @@ -292,10 +297,10 @@ class KotlinMPPGradleProjectTaskRunner extends ProjectTaskRunner final KotlinFacet kotlinFacet = KotlinFacet.Companion.get(module); if (kotlinFacet == null) return false; - final IdePlatform platform = kotlinFacet.getConfiguration().getSettings().getPlatform(); + final TargetPlatform platform = kotlinFacet.getConfiguration().getSettings().getPlatform(); if (platform == null) return false; - return NativeIdePlatformUtil.isKotlinNative(platform); + return KonanPlatformKt.isNative(platform); } private static boolean isCommonProductionSourceModule(Module module) { @@ -305,10 +310,10 @@ class KotlinMPPGradleProjectTaskRunner extends ProjectTaskRunner final KotlinFacetSettings facetSettings = kotlinFacet.getConfiguration().getSettings(); if (facetSettings.isTestModule()) return false; - final IdePlatform platform = facetSettings.getPlatform(); + final TargetPlatform platform = facetSettings.getPlatform(); if (platform == null) return false; - return CommonIdePlatformUtil.isCommon(platform); + return TargetPlatformKt.isCommon(platform); } private static Collection findNativeGradleBuildTasks(Collection gradleTasks, String sourceSetName) { diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/gradle/execution/KotlinMPPGradleProjectTaskRunner.java.182 b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/gradle/execution/KotlinMPPGradleProjectTaskRunner.java.182 index 85d50ebc4ab..4b4402e00e8 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/gradle/execution/KotlinMPPGradleProjectTaskRunner.java.182 +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/gradle/execution/KotlinMPPGradleProjectTaskRunner.java.182 @@ -36,9 +36,14 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.config.KotlinFacetSettings; import org.jetbrains.kotlin.idea.facet.KotlinFacet; -import org.jetbrains.kotlin.platform.IdePlatform; +import org.jetbrains.kotlin.konan.target.KonanTargetKt; +import org.jetbrains.kotlin.platform.IdePlatformKindUtil; +import org.jetbrains.kotlin.platform.TargetPlatformKt; import org.jetbrains.kotlin.platform.impl.CommonIdePlatformUtil; import org.jetbrains.kotlin.platform.impl.NativeIdePlatformUtil; +import org.jetbrains.kotlin.platform.TargetPlatform; +import org.jetbrains.kotlin.platform.PlatformUtilKt; +import org.jetbrains.kotlin.platform.konan.KonanPlatformKt; import org.jetbrains.plugins.gradle.execution.build.CachedModuleDataFinder; import org.jetbrains.plugins.gradle.execution.build.GradleProjectTaskRunner; import org.jetbrains.plugins.gradle.service.project.GradleBuildSrcProjectsResolver; @@ -291,10 +296,10 @@ class KotlinMPPGradleProjectTaskRunner extends ProjectTaskRunner final KotlinFacet kotlinFacet = KotlinFacet.Companion.get(module); if (kotlinFacet == null) return false; - final IdePlatform platform = kotlinFacet.getConfiguration().getSettings().getPlatform(); + final TargetPlatform platform = kotlinFacet.getConfiguration().getSettings().getPlatform(); if (platform == null) return false; - return NativeIdePlatformUtil.isKotlinNative(platform); + return KonanPlatformKt.isNative(platform); } private static boolean isCommonProductionSourceModule(Module module) { @@ -304,10 +309,10 @@ class KotlinMPPGradleProjectTaskRunner extends ProjectTaskRunner final KotlinFacetSettings facetSettings = kotlinFacet.getConfiguration().getSettings(); if (facetSettings.isTestModule()) return false; - final IdePlatform platform = facetSettings.getPlatform(); + final TargetPlatform platform = facetSettings.getPlatform(); if (platform == null) return false; - return CommonIdePlatformUtil.isCommon(platform); + return TargetPlatformKt.isCommon(platform); } private static Collection findNativeGradleBuildTasks(Collection gradleTasks, String sourceSetName) { diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/run/KotlinMPPGradleTestTasksProvider.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/run/KotlinMPPGradleTestTasksProvider.kt index 31bd1473481..78d8f043c59 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/run/KotlinMPPGradleTestTasksProvider.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/run/KotlinMPPGradleTestTasksProvider.kt @@ -13,6 +13,7 @@ import com.intellij.openapi.module.Module import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider import org.jetbrains.kotlin.idea.configuration.KotlinTargetData import org.jetbrains.kotlin.platform.impl.isCommon +import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.plugins.gradle.execution.test.runner.GradleTestTasksProvider import org.jetbrains.plugins.gradle.service.project.GradleProjectResolverUtil import org.jetbrains.plugins.gradle.util.GradleConstants @@ -51,7 +52,7 @@ class KotlinMPPGradleTestTasksProvider : GradleTestTasksProvider { private fun isTestCommonModule(module: Module): Boolean { val settings = KotlinFacetSettingsProvider.getInstance(module.project).getInitializedSettings(module) - return settings.platform.isCommon && settings.isTestModule + return settings.platform.isCommon() && settings.isTestModule } private fun getTaskNames(task: TaskData, namePrefix: String): List { diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt index 04d8a279ed6..0b0b7dfab16 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt @@ -11,9 +11,9 @@ import org.jetbrains.jps.model.java.JavaSourceRootType import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.idea.codeInsight.gradle.ExternalSystemImportingTestCase import org.jetbrains.kotlin.idea.codeInsight.gradle.MultiplePluginVersionGradleImportingTestCase -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.CommonPlatforms +import org.jetbrains.kotlin.platform.js.JsPlatforms +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.test.KotlinTestUtils import org.junit.After import org.junit.Before @@ -60,7 +60,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin module("project") module("app") module("app_commonMain") { - platform(CommonIdePlatformKind.Platform) + platform(CommonPlatforms.defaultCommonPlatform) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE) moduleDependency("lib_commonMain", DependencyScope.COMPILE) sourceFolder("app/src/commonMain/kotlin", SourceKotlinRootType) @@ -68,7 +68,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin inheritProjectOutput() } module("app_commonTest") { - platform(CommonIdePlatformKind.Platform) + platform(CommonPlatforms.defaultCommonPlatform) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST) moduleDependency("lib_commonMain", DependencyScope.TEST) moduleDependency("app_commonMain", DependencyScope.TEST) @@ -77,7 +77,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin inheritProjectOutput() } module("app_jsMain") { - platform(JsIdePlatformKind.Platform) + platform(JsPlatforms.defaultJsPlatform) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-js:${kotlinVersion()}", DependencyScope.COMPILE) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE) moduleDependency("lib_jsMain", DependencyScope.COMPILE) @@ -88,7 +88,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin outputPath("app/build/classes/kotlin/js/main", true) } module("app_jsTest") { - platform(JsIdePlatformKind.Platform) + platform(JsPlatforms.defaultJsPlatform) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-js:${kotlinVersion()}", DependencyScope.TEST) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST) moduleDependency("lib_jsMain", DependencyScope.TEST) @@ -101,7 +101,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin outputPath("app/build/classes/kotlin/js/test", false) } module("app_jvmMain") { - platform(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6)) + platform(JvmPlatforms.jvm16) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion()}", DependencyScope.COMPILE) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE) libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.COMPILE) @@ -114,7 +114,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin outputPath("app/build/classes/kotlin/jvm/main", true) } module("app_jvmTest") { - platform(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6)) + platform(JvmPlatforms.jvm16) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion()}", DependencyScope.TEST) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST) libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.TEST) @@ -129,7 +129,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin outputPath("app/build/classes/kotlin/jvm/test", false) } module("app_main") { - platform(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_8)) + platform(JvmPlatforms.jvm18) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion()}", DependencyScope.COMPILE) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE) libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.COMPILE) @@ -140,7 +140,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin inheritProjectOutput() } module("app_test") { - platform(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_8)) + platform(JvmPlatforms.jvm18) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion()}", DependencyScope.TEST) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST) libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.TEST) @@ -153,14 +153,14 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin } module("lib") module("lib_commonMain") { - platform(CommonIdePlatformKind.Platform) + platform(CommonPlatforms.defaultCommonPlatform) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE) sourceFolder("lib/src/commonMain/kotlin", SourceKotlinRootType) sourceFolder("lib/src/commonMain/resources", ResourceKotlinRootType) inheritProjectOutput() } module("lib_commonTest") { - platform(CommonIdePlatformKind.Platform) + platform(CommonPlatforms.defaultCommonPlatform) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST) moduleDependency("lib_commonMain", DependencyScope.TEST) sourceFolder("lib/src/commonTest/kotlin", TestSourceKotlinRootType) @@ -168,7 +168,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin inheritProjectOutput() } module("lib_jsMain") { - platform(JsIdePlatformKind.Platform) + platform(JsPlatforms.defaultJsPlatform) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-js:${kotlinVersion()}", DependencyScope.COMPILE) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE) moduleDependency("lib_commonMain", DependencyScope.COMPILE) @@ -177,7 +177,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin outputPath("lib/build/classes/kotlin/js/main", true) } module("lib_jsTest") { - platform(JsIdePlatformKind.Platform) + platform(JsPlatforms.defaultJsPlatform) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-js:${kotlinVersion()}", DependencyScope.TEST) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST) moduleDependency("lib_commonMain", DependencyScope.TEST) @@ -188,7 +188,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin outputPath("lib/build/classes/kotlin/js/test", false) } module("lib_jvmMain") { - platform(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6)) + platform(JvmPlatforms.jvm16) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion()}", DependencyScope.COMPILE) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE) libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.COMPILE) @@ -198,7 +198,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin outputPath("lib/build/classes/kotlin/jvm/main", true) } module("lib_jvmTest") { - platform(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6)) + platform(JvmPlatforms.jvm16) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion()}", DependencyScope.TEST) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST) libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.TEST) diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/projectStructureDSL.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/projectStructureDSL.kt index 3f96fde9d28..4e347ab54bc 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/projectStructureDSL.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/projectStructureDSL.kt @@ -17,7 +17,8 @@ import org.jetbrains.jps.util.JpsPathUtil import org.jetbrains.kotlin.idea.facet.KotlinFacet import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.project.platform -import org.jetbrains.kotlin.platform.IdePlatform +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.presentableDescription class MessageCollector { private val builder = StringBuilder() @@ -109,11 +110,11 @@ class ModuleInfo( } } - fun platform(platform: IdePlatform<*, *>) { + fun platform(platform: TargetPlatform) { val actualPlatform = module.platform if (actualPlatform != platform) { projectInfo.messageCollector.report( - "Module '${module.name}': expected platform '${platform.description}' but found '${actualPlatform?.description}'" + "Module '${module.name}': expected platform '${platform.presentableDescription}' but found '${actualPlatform?.presentableDescription}'" ) } } diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt index b293c340ac4..5e893f8ca08 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt @@ -53,6 +53,8 @@ import org.jetbrains.kotlin.platform.impl.isCommon import org.jetbrains.kotlin.platform.impl.isJavaScript import org.jetbrains.kotlin.platform.js.JsPlatforms import org.jetbrains.kotlin.platform.jvm.JvmPlatforms +import org.jetbrains.kotlin.platform.js.isJs +import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.test.KotlinTestUtils import org.junit.Assert import org.junit.Ignore @@ -104,7 +106,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { Assert.assertEquals("1.1", apiLevel!!.versionString) Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) - Assert.assertEquals(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_8), platform) + Assert.assertEquals(JvmPlatforms.jvm18, platform) Assert.assertEquals("1.7", (compilerArguments as K2JVMCompilerArguments).jvmTarget) Assert.assertEquals( "-Xdump-declarations-to=tmp -Xsingle-module", @@ -116,7 +118,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { Assert.assertEquals("1.0", apiLevel!!.versionString) Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) - Assert.assertEquals(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6), platform) + Assert.assertEquals(JvmPlatforms.jvm16, platform) Assert.assertEquals("1.6", (compilerArguments as K2JVMCompilerArguments).jvmTarget) Assert.assertEquals( "-Xdump-declarations-to=tmpTest", @@ -160,7 +162,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { with(facetSettings) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString) - Assert.assertEquals(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_8), platform) + Assert.assertEquals(JvmPlatforms.jvm18, platform) Assert.assertEquals("1.7", (compilerArguments as K2JVMCompilerArguments).jvmTarget) Assert.assertEquals( "-Xdump-declarations-to=tmp -Xsingle-module", @@ -170,7 +172,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { with(testFacetSettings) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.0", apiLevel!!.versionString) - Assert.assertEquals(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6), platform) + Assert.assertEquals(JvmPlatforms.jvm16, platform) Assert.assertEquals("1.6", (compilerArguments as K2JVMCompilerArguments).jvmTarget) Assert.assertEquals( "-Xdump-declarations-to=tmpTest", @@ -204,7 +206,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { with(facetSettings("project_myMain")) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString) - Assert.assertEquals(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_8), platform) + Assert.assertEquals(JvmPlatforms.jvm18, platform) Assert.assertEquals("1.7", (compilerArguments as K2JVMCompilerArguments).jvmTarget) Assert.assertEquals( "-Xdump-declarations-to=tmp -Xsingle-module", @@ -214,7 +216,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { with(facetSettings("project_myTest")) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.0", apiLevel!!.versionString) - Assert.assertEquals(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6), platform) + Assert.assertEquals(JvmPlatforms.jvm16, platform) Assert.assertEquals("1.6", (compilerArguments as K2JVMCompilerArguments).jvmTarget) Assert.assertEquals( "-Xdump-declarations-to=tmpTest", @@ -250,7 +252,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { with(facetSettings("project_myMain")) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString) - Assert.assertEquals(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_8), platform) + Assert.assertEquals(JvmPlatforms.jvm18, platform) Assert.assertEquals("1.7", (compilerArguments as K2JVMCompilerArguments).jvmTarget) Assert.assertEquals( "-Xdump-declarations-to=tmp -Xsingle-module", @@ -260,7 +262,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { with(facetSettings("project_myTest")) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.0", apiLevel!!.versionString) - Assert.assertEquals(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6), platform) + Assert.assertEquals(JvmPlatforms.jvm16, platform) Assert.assertEquals("1.6", (compilerArguments as K2JVMCompilerArguments).jvmTarget) Assert.assertEquals( "-Xdump-declarations-to=tmpTest", @@ -316,7 +318,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { Assert.assertEquals("1.1", apiLevel!!.versionString) Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) - Assert.assertTrue(platform.isJavaScript) + Assert.assertTrue(platform.isJs()) with(compilerArguments as K2JSCompilerArguments) { Assert.assertEquals(true, sourceMap) Assert.assertEquals("plain", moduleKind) @@ -332,7 +334,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { Assert.assertEquals("1.0", apiLevel!!.versionString) Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) - Assert.assertTrue(platform.isJavaScript) + Assert.assertTrue(platform.isJs()) with(compilerArguments as K2JSCompilerArguments) { Assert.assertEquals(false, sourceMap) Assert.assertEquals("umd", moduleKind) @@ -378,7 +380,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { with(facetSettings) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString) - Assert.assertTrue(platform.isJavaScript) + Assert.assertTrue(platform.isJs()) } val rootManager = ModuleRootManager.getInstance(getModule("project_main")) @@ -416,7 +418,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { with(facetSettings("project_myMain")) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString) - Assert.assertTrue(platform.isJavaScript) + Assert.assertTrue(platform.isJs()) with(compilerArguments as K2JSCompilerArguments) { Assert.assertEquals(true, sourceMap) Assert.assertEquals("plain", moduleKind) @@ -430,7 +432,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { with(facetSettings("project_myTest")) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.0", apiLevel!!.versionString) - Assert.assertTrue(platform.isJavaScript) + Assert.assertTrue(platform.isJs()) with(compilerArguments as K2JSCompilerArguments) { Assert.assertEquals(false, sourceMap) Assert.assertEquals("umd", moduleKind) @@ -467,7 +469,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { importProject() with(facetSettings) { - Assert.assertTrue(platform.isJavaScript) + Assert.assertTrue(platform.isJs()) } } @@ -479,7 +481,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { with(facetSettings) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString) - Assert.assertEquals(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6), platform) + Assert.assertEquals(JvmPlatforms.jvm16, platform) } Assert.assertEquals( @@ -508,7 +510,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { with(facetSettings) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString) - Assert.assertTrue(platform.isJavaScript) + Assert.assertTrue(platform.isJs()) } val rootManager = ModuleRootManager.getInstance(getModule("project_main")) @@ -542,7 +544,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { with(facetSettings) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString) - Assert.assertTrue(platform.isCommon) + Assert.assertTrue(platform.isCommon()) } val rootManager = ModuleRootManager.getInstance(getModule("project_main")) @@ -575,7 +577,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { with(facetSettings("project")) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString) - Assert.assertTrue(platform.isCommon) + Assert.assertTrue(platform.isCommon()) } val rootManager = ModuleRootManager.getInstance(getModule("project")) @@ -603,7 +605,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { with(facetSettings) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString) - Assert.assertEquals(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6), platform) + Assert.assertEquals(JvmPlatforms.jvm16, platform) } Assert.assertEquals( @@ -632,7 +634,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { with(facetSettings) { Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString) - Assert.assertTrue(platform.isJavaScript) + Assert.assertTrue(platform.isJs()) } Assert.assertEquals( @@ -721,7 +723,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { importProject() with(facetSettings("js-module")) { - Assert.assertTrue(platform.isJavaScript) + Assert.assertTrue(platform.isJs()) } val rootManager = ModuleRootManager.getInstance(getModule("js-module")) @@ -871,7 +873,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { Assert.assertEquals("1.0", apiLevel!!.versionString) Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) - Assert.assertTrue(platform.isCommon) + Assert.assertTrue(platform.isCommon()) Assert.assertEquals("my/classpath", (compilerArguments as K2MetadataCompilerArguments).classpath) Assert.assertEquals("my/destination", (compilerArguments as K2MetadataCompilerArguments).destination) } @@ -881,7 +883,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { Assert.assertEquals("1.0", apiLevel!!.versionString) Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) - Assert.assertTrue(platform.isCommon) + Assert.assertTrue(platform.isCommon()) Assert.assertEquals("my/test/classpath", (compilerArguments as K2MetadataCompilerArguments).classpath) Assert.assertEquals("my/test/destination", (compilerArguments as K2MetadataCompilerArguments).destination) } diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt index aaa4ea66c9a..d24e1d9d5ca 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt @@ -22,9 +22,9 @@ import com.intellij.openapi.project.Project import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments 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.platform.TargetPlatform import org.jetbrains.kotlin.utils.DescriptionAware @Deprecated("Use IdePlatformKind instead.", level = DeprecationLevel.ERROR) @@ -188,7 +188,7 @@ class KotlinFacetSettings { compilerArguments!!.apiVersion = value?.versionString } - val platform: IdePlatform<*, *>? + val platform: TargetPlatform? get() { val compilerArguments = this.compilerArguments ?: return null return IdePlatformKind.platformByCompilerArguments(compilerArguments) diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt index 6350b21a315..31ac6783852 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt @@ -25,10 +25,17 @@ import org.jdom.Element import org.jdom.Text import org.jetbrains.kotlin.cli.common.arguments.* import org.jetbrains.kotlin.load.java.JvmAbi -import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.IdePlatformKind +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.impl.FakeK2NativeCompilerArguments import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind +import org.jetbrains.kotlin.platform.js.JsPlatform +import org.jetbrains.kotlin.platform.jvm.JdkPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatform +import org.jetbrains.kotlin.platform.konan.KonanPlatform +import org.jetbrains.kotlin.platform.oldFashionedDescription import org.jetbrains.kotlin.platform.orDefault +import org.jetbrains.kotlin.resolve.* import java.lang.reflect.Modifier import kotlin.reflect.KClass import kotlin.reflect.full.superclasses @@ -39,6 +46,20 @@ private fun Element.getOptionValue(name: String) = getOption(name)?.getAttribute private fun Element.getOptionBody(name: String) = getOption(name)?.children?.firstOrNull() +fun TargetPlatform.createArguments(init: (CommonCompilerArguments).() -> Unit = {}): CommonCompilerArguments { + return when (val singlePlatform = singleOrNull()) { + null -> K2MetadataCompilerArguments().apply { init() } + is JvmPlatform -> K2JVMCompilerArguments().apply { + init() + // TODO(dsavvinov): review this + jvmTarget = (singlePlatform as? JdkPlatform)?.targetVersion?.description ?: JvmTarget.DEFAULT.description + } + is JsPlatform -> K2JSCompilerArguments().apply { init() } + is KonanPlatform -> FakeK2NativeCompilerArguments().apply { init() } + else -> error("Unknown platform $singlePlatform") + } +} + private fun readV1Config(element: Element): KotlinFacetSettings { return KotlinFacetSettings().apply { val useProjectSettings = element.getOptionValue("useProjectSettings")?.toBoolean() @@ -48,8 +69,8 @@ private fun readV1Config(element: Element): KotlinFacetSettings { val languageLevel = versionInfoElement?.getOptionValue("languageLevel") val apiLevel = versionInfoElement?.getOptionValue("apiLevel") val targetPlatform = IdePlatformKind.All_PLATFORMS - .firstOrNull { it.description == targetPlatformName } - ?: JvmIdePlatformKind.defaultPlatform + .firstOrNull { it.oldFashionedDescription == targetPlatformName } + ?: JvmIdePlatformKind.defaultPlatform // FIXME(dsavvinov): choose proper default val compilerInfoElement = element.getOptionBody("compilerInfo") @@ -98,10 +119,10 @@ private fun readV1Config(element: Element): KotlinFacetSettings { } } -fun Element.getFacetPlatformByConfigurationElement(): IdePlatform<*, *> { +fun Element.getFacetPlatformByConfigurationElement(): TargetPlatform { val platformName = getAttributeValue("platform") return IdePlatformKind.All_PLATFORMS - .firstOrNull { it.description == platformName } + .firstOrNull { it.oldFashionedDescription == platformName } .orDefault() } @@ -268,7 +289,7 @@ private fun KotlinFacetSettings.writeLatestConfig(element: Element) { val filter = SkipDefaultsSerializationFilter() platform?.let { - element.setAttribute("platform", it.description) + element.setAttribute("platform", it.oldFashionedDescription) } if (!useProjectSettings) { element.setAttribute("useProjectSettings", useProjectSettings.toString()) diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/DefaultIdeTargetPlatformKindProvider.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/DefaultIdeTargetPlatformKindProvider.kt index 47b73516883..47f69690e16 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/DefaultIdeTargetPlatformKindProvider.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/DefaultIdeTargetPlatformKindProvider.kt @@ -7,23 +7,29 @@ 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.platform.jvm.JvmPlatforms +import org.jetbrains.kotlin.platform.TargetPlatform interface DefaultIdeTargetPlatformKindProvider { - val defaultPlatform: IdePlatform<*, *> + val defaultPlatform: TargetPlatform companion object { - val defaultPlatform: IdePlatform<*, *> + val defaultPlatform: TargetPlatform get() { if (isJps) { // TODO support passing custom platforms in JPS - return JvmIdePlatformKind.defaultPlatform + return JvmPlatforms.defaultJvmPlatform } return ServiceManager.getService(DefaultIdeTargetPlatformKindProvider::class.java).defaultPlatform } - - val defaultCompilerPlatform: TargetPlatform - get() = defaultPlatform.kind.compilerPlatform } +} + +fun TargetPlatform?.orDefault(): TargetPlatform { + return this ?: DefaultIdeTargetPlatformKindProvider.defaultPlatform +} + +fun IdePlatformKind<*>?.orDefault(): IdePlatformKind<*> { + return this ?: DefaultIdeTargetPlatformKindProvider.defaultPlatform.idePlatformKind } \ No newline at end of file diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/IdePlatform.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/IdePlatform.kt deleted file mode 100644 index c0aee27190c..00000000000 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/IdePlatform.kt +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.platform - -import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments -import org.jetbrains.kotlin.utils.DescriptionAware - -abstract class IdePlatform, out Arguments : CommonCompilerArguments> : DescriptionAware { - abstract val kind: Kind - abstract val version: TargetPlatformVersion - - abstract fun createArguments(init: Arguments.() -> Unit = {}): Arguments - - override val description - get() = kind.name + " " + version.description - - override fun toString() = description -} diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/IdePlatformKind.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/IdePlatformKind.kt index 06c2f46e77e..62fe6a4ad79 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/IdePlatformKind.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/IdePlatformKind.kt @@ -13,20 +13,22 @@ 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.platform.TargetPlatform import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult abstract class IdePlatformKind> { - abstract val compilerPlatform: TargetPlatform - abstract val platforms: List> + abstract val platforms: List - abstract val defaultPlatform: IdePlatform + abstract val defaultPlatform: TargetPlatform - abstract fun platformByCompilerArguments(arguments: CommonCompilerArguments): IdePlatform? + abstract fun platformByCompilerArguments(arguments: CommonCompilerArguments): TargetPlatform? abstract val argumentsClass: Class abstract val name: String + abstract fun createArguments(): CommonCompilerArguments + override fun equals(other: Any?): Boolean = javaClass == other?.javaClass override fun hashCode(): Int = javaClass.hashCode() @@ -56,21 +58,17 @@ abstract class IdePlatformKind> { val All_PLATFORMS by lazy { ALL_KINDS.flatMap { it.platforms } } - val IDE_PLATFORMS_BY_COMPILER_PLATFORMS by lazy { ALL_KINDS.map { it.compilerPlatform to it }.toMap() } + val IDE_PLATFORMS_BY_COMPILER_PLATFORMS by lazy { + ALL_KINDS.flatMap { idePlatformKind -> + idePlatformKind.platforms.map { compilerPlatform -> compilerPlatform to idePlatformKind } + }.toMap() + } - fun platformByCompilerArguments(arguments: Args): IdePlatform<*, *>? = + fun platformByCompilerArguments(arguments: Args): TargetPlatform? = ALL_KINDS.firstNotNullResult { it.platformByCompilerArguments(arguments) } } } val TargetPlatform.idePlatformKind: IdePlatformKind<*> - get() = IdePlatformKind.IDE_PLATFORMS_BY_COMPILER_PLATFORMS[this] ?: error("Unknown platform $this") - -fun IdePlatformKind<*>?.orDefault(): IdePlatformKind<*> { - return this ?: DefaultIdeTargetPlatformKindProvider.defaultPlatform.kind -} - -fun IdePlatform<*, *>?.orDefault(): IdePlatform<*, *> { - return this ?: DefaultIdeTargetPlatformKindProvider.defaultPlatform -} \ No newline at end of file + get() = IdePlatformKind.IDE_PLATFORMS_BY_COMPILER_PLATFORMS[this] ?: error("Unknown platform $this") \ No newline at end of file diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/CommonIdePlatformKind.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/CommonIdePlatformKind.kt index edcc1a4355a..78573f2887c 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/CommonIdePlatformKind.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/CommonIdePlatformKind.kt @@ -9,35 +9,29 @@ package org.jetbrains.kotlin.platform.impl import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments import org.jetbrains.kotlin.platform.CommonPlatforms -import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.IdePlatformKind -import org.jetbrains.kotlin.platform.TargetPlatformVersion +import org.jetbrains.kotlin.platform.TargetPlatform object CommonIdePlatformKind : IdePlatformKind() { - override fun platformByCompilerArguments(arguments: CommonCompilerArguments): IdePlatform? { - return if (arguments is K2MetadataCompilerArguments) Platform - else null + override fun platformByCompilerArguments(arguments: CommonCompilerArguments): TargetPlatform? { + return if (arguments is K2MetadataCompilerArguments) + CommonPlatforms.defaultCommonPlatform + else + null } - override val compilerPlatform get() = CommonPlatforms.defaultCommonPlatform + override fun createArguments(): CommonCompilerArguments { + return K2MetadataCompilerArguments() // TODO(dsavvinov): review that, as now MPP !== K2Metadata + } - override val platforms get() = listOf(Platform) - override val defaultPlatform get() = Platform + override val platforms get() = listOf(CommonPlatforms.defaultCommonPlatform) + override val defaultPlatform get() = CommonPlatforms.defaultCommonPlatform override val argumentsClass get() = K2MetadataCompilerArguments::class.java override val name get() = "Common (experimental)" - - object Platform : IdePlatform() { - override val kind get() = CommonIdePlatformKind - override val version get() = TargetPlatformVersion.NoVersion - override fun createArguments(init: CommonCompilerArguments.() -> Unit) = K2MetadataCompilerArguments().apply(init) - } } val IdePlatformKind<*>?.isCommon - get() = this is CommonIdePlatformKind - -val IdePlatform<*, *>?.isCommon - get() = this is CommonIdePlatformKind.Platform \ No newline at end of file + get() = this is CommonIdePlatformKind \ No newline at end of file diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/JsIdePlatformKind.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/JsIdePlatformKind.kt index 19b30a8932c..a6b284144a3 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/JsIdePlatformKind.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/JsIdePlatformKind.kt @@ -8,36 +8,30 @@ 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.platform.TargetPlatformVersion -import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.IdePlatformKind +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.js.JsPlatforms object JsIdePlatformKind : IdePlatformKind() { - override fun platformByCompilerArguments(arguments: CommonCompilerArguments): IdePlatform? { - return if (arguments is K2JSCompilerArguments) Platform - else null + override fun platformByCompilerArguments(arguments: CommonCompilerArguments): TargetPlatform? { + return if (arguments is K2JSCompilerArguments) + JsPlatforms.defaultJsPlatform + else + null } - override val compilerPlatform get() = JsPlatforms.defaultJsPlatform + override val platforms get() = listOf(JsPlatforms.defaultJsPlatform) + override val defaultPlatform get() = JsPlatforms.defaultJsPlatform - override val platforms get() = listOf(Platform) - override val defaultPlatform get() = Platform + override fun createArguments(): CommonCompilerArguments { + return K2JSCompilerArguments() + } override val argumentsClass get() = K2JSCompilerArguments::class.java override val name get() = "JavaScript" - - object Platform : IdePlatform() { - override val kind get() = JsIdePlatformKind - override val version get() = TargetPlatformVersion.NoVersion - override fun createArguments(init: K2JSCompilerArguments.() -> Unit) = K2JSCompilerArguments().apply(init) - } } val IdePlatformKind<*>?.isJavaScript get() = this is JsIdePlatformKind - -val IdePlatform<*, *>?.isJavaScript - get() = this is JsIdePlatformKind.Platform diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/JvmIdePlatformKind.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/JvmIdePlatformKind.kt index 16ee456012d..8293ec6ac5a 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/JvmIdePlatformKind.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/JvmIdePlatformKind.kt @@ -11,41 +11,36 @@ import com.intellij.util.text.VersionComparatorUtil import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments 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.platform.TargetPlatform import org.jetbrains.kotlin.platform.jvm.JvmPlatforms object JvmIdePlatformKind : IdePlatformKind() { - override fun platformByCompilerArguments(arguments: CommonCompilerArguments): IdePlatform? { - return if (arguments is K2JVMCompilerArguments) { - val jvmTarget = arguments.jvmTarget ?: JvmTarget.DEFAULT.description - platforms.firstOrNull { platform -> - VersionComparatorUtil.COMPARATOR.compare(platform.version.description, jvmTarget) >= 0 - } - } else null + override fun platformByCompilerArguments(arguments: CommonCompilerArguments): TargetPlatform? { + if (arguments !is K2JVMCompilerArguments) return null + + val jvmTargetDescription = arguments.jvmTarget + ?: return JvmPlatforms.defaultJvmPlatform + + val jvmTarget = JvmTarget.values() + .firstOrNull { VersionComparatorUtil.COMPARATOR.compare(it.description, jvmTargetDescription) >= 0 } + ?: return JvmPlatforms.defaultJvmPlatform + + return JvmPlatforms.jvmPlatformByTargetVersion(jvmTarget) } - override val compilerPlatform get() = JvmPlatforms.defaultJvmPlatform + override fun createArguments(): CommonCompilerArguments { + return K2JVMCompilerArguments() + } - override val platforms = JvmTarget.values().map { ver -> Platform(ver) } - override val defaultPlatform get() = Platform(JvmTarget.DEFAULT) + override val platforms = JvmTarget.values().map { ver -> JvmPlatforms.jvmPlatformByTargetVersion(ver) } + override val defaultPlatform get() = JvmPlatforms.defaultJvmPlatform override val argumentsClass get() = K2JVMCompilerArguments::class.java override val name get() = "JVM" - - data class Platform(override val version: JvmTarget) : IdePlatform() { - override val kind get() = JvmIdePlatformKind - - override fun createArguments(init: K2JVMCompilerArguments.() -> Unit) = K2JVMCompilerArguments() - .apply(init) - .apply { jvmTarget = this@Platform.version.description } - } } val IdePlatformKind<*>?.isJvm get() = this is JvmIdePlatformKind - -val IdePlatform<*, *>?.isJvm - get() = this is JvmIdePlatformKind.Platform \ No newline at end of file diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/NativeIdePlatformKind.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/NativeIdePlatformKind.kt index 57006df588b..2c5c803c0b1 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/NativeIdePlatformKind.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/platform/impl/NativeIdePlatformKind.kt @@ -7,32 +7,34 @@ package org.jetbrains.kotlin.platform.impl import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments -import org.jetbrains.kotlin.platform.TargetPlatformVersion -import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.IdePlatformKind +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.konan.KonanPlatforms object NativeIdePlatformKind : IdePlatformKind() { - override fun platformByCompilerArguments(arguments: CommonCompilerArguments): IdePlatform? { - return if (arguments is FakeK2NativeCompilerArguments) Platform - else null + override fun platformByCompilerArguments(arguments: CommonCompilerArguments): TargetPlatform? { + return if (arguments is FakeK2NativeCompilerArguments) + KonanPlatforms.defaultKonanPlatform + else + null } - override val compilerPlatform get() = KonanPlatforms.defaultKonanPlatform - - override val platforms get() = listOf(Platform) - override val defaultPlatform get() = Platform - - override val argumentsClass get() = FakeK2NativeCompilerArguments::class.java - - override val name get() = "Native" - - object Platform : IdePlatform() { - override val kind get() = NativeIdePlatformKind - override val version get() = TargetPlatformVersion.NoVersion - override fun createArguments(init: FakeK2NativeCompilerArguments.() -> Unit) = FakeK2NativeCompilerArguments().apply(init) + override fun createArguments(): CommonCompilerArguments { + return FakeK2NativeCompilerArguments() } + + override val defaultPlatform: TargetPlatform + get() = KonanPlatforms.defaultKonanPlatform + + override val platforms + get() = listOf(KonanPlatforms.defaultKonanPlatform) + + override val argumentsClass + get() = FakeK2NativeCompilerArguments::class.java + + override val name + get() = "Native" } // These are fake compiler arguments for Kotlin/Native - only for usage within IDEA plugin: @@ -40,6 +42,3 @@ class FakeK2NativeCompilerArguments : CommonCompilerArguments() val IdePlatformKind<*>?.isKotlinNative get() = this is NativeIdePlatformKind - -val IdePlatform<*, *>?.isKotlinNative - get() = this is NativeIdePlatformKind.Platform diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.kt index d23f74344c5..092ec95b5f0 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/configuration/KotlinJavaModuleConfigurator.kt @@ -113,7 +113,7 @@ open class KotlinJavaModuleConfigurator protected constructor() : KotlinWithLibr try { val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false, commitModel = true) val facetSettings = facet.configuration.settings - facetSettings.initializeIfNeeded(module, null, JvmIdePlatformKind.Platform(JvmTarget.JVM_1_8)) + facetSettings.initializeIfNeeded(module, null, JvmPlatforms.jvm18) (facetSettings.compilerArguments as? K2JVMCompilerArguments)?.jvmTarget = "1.8" } finally { modelsProvider.dispose() diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/facet/FrameworkLibraryValidatorWithDynamicDescription.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/facet/FrameworkLibraryValidatorWithDynamicDescription.kt index 8708e0f6d7d..6ca2b6e8960 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/facet/FrameworkLibraryValidatorWithDynamicDescription.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/facet/FrameworkLibraryValidatorWithDynamicDescription.kt @@ -26,8 +26,9 @@ import com.intellij.openapi.roots.ui.configuration.libraries.AddCustomLibraryDia import com.intellij.openapi.roots.ui.configuration.libraries.CustomLibraryDescription import com.intellij.openapi.roots.ui.configuration.libraries.LibraryPresentationManager import org.jetbrains.kotlin.idea.platform.tooling -import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.IdePlatformKind +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.idePlatformKind import org.jetbrains.kotlin.platform.impl.isCommon import javax.swing.JComponent @@ -36,7 +37,7 @@ class FrameworkLibraryValidatorWithDynamicDescription( private val context: LibrariesValidatorContext, private val validatorsManager: FacetValidatorsManager, private val libraryCategoryName: String, - private val getPlatform: () -> IdePlatform<*, *> + private val getPlatform: () -> TargetPlatform ) : FrameworkLibraryValidator() { private val IdePlatformKind<*>.libraryDescription: CustomLibraryDescription? get() = this.tooling.getLibraryDescription(context.module.project) @@ -70,10 +71,10 @@ class FrameworkLibraryValidatorWithDynamicDescription( override fun check(): ValidationResult { val targetPlatform = getPlatform() - if (checkLibraryIsConfigured(targetPlatform.kind)) { + if (checkLibraryIsConfigured(targetPlatform.idePlatformKind)) { val conflictingPlatforms = IdePlatformKind.ALL_KINDS .filter { - !it.isCommon && it.name != targetPlatform.kind.name + !it.isCommon && it.name != targetPlatform.idePlatformKind.name && it.libraryDescription != null && checkLibraryIsConfigured(it) } @@ -87,7 +88,7 @@ class FrameworkLibraryValidatorWithDynamicDescription( return ValidationResult( IdeBundle.message("label.missed.libraries.text", libraryCategoryName), - LibrariesQuickFix(targetPlatform.kind.libraryDescription!!) + LibrariesQuickFix(targetPlatform.idePlatformKind.libraryDescription!!) ) } diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/platform/CommonIdePlatformKindTooling.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/platform/CommonIdePlatformKindTooling.kt index 99afed64ee4..36db142639c 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/platform/CommonIdePlatformKindTooling.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/platform/CommonIdePlatformKindTooling.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.idea.platform.IdePlatformKindTooling import org.jetbrains.kotlin.idea.platform.tooling import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.util.module +import org.jetbrains.kotlin.platform.idePlatformKind import org.jetbrains.kotlin.platform.impl.CommonIdePlatformKind import org.jetbrains.kotlin.platform.impl.isCommon import org.jetbrains.kotlin.psi.KtFunction @@ -62,7 +63,7 @@ object CommonIdePlatformKindTooling : IdePlatformKindTooling() { override fun acceptsAsEntryPoint(function: KtFunction): Boolean { val module = function.containingKtFile.module ?: return false return module.implementingModules.any { implementingModule -> - implementingModule.platform?.kind?.takeIf { !it.isCommon }?.tooling?.acceptsAsEntryPoint(function) ?: false + implementingModule.platform?.idePlatformKind?.takeIf { !it.isCommon }?.tooling?.acceptsAsEntryPoint(function) ?: false } } } \ No newline at end of file diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinMultiplatformJUnitRecognizer.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinMultiplatformJUnitRecognizer.kt index 93785800acd..869de83c52d 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinMultiplatformJUnitRecognizer.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinMultiplatformJUnitRecognizer.kt @@ -27,7 +27,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.util.module -import org.jetbrains.kotlin.platform.impl.isCommon +import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass import org.jetbrains.kotlin.resolve.descriptorUtil.classId import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe @@ -38,7 +38,7 @@ class KotlinMultiplatformJUnitRecognizer : JUnitRecognizer() { override fun isTestAnnotated(method: PsiMethod): Boolean { if (method !is KtLightMethod) return false val origin = method.kotlinOrigin ?: return false - if (!origin.module?.platform.isCommon) return false + if (!origin.module?.platform.isCommon()) return false val moduleDescriptor = origin.containingKtFile.findModuleDescriptor() val implModules = moduleDescriptor.implementingDescriptors diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/jvmMppUtils.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/jvmMppUtils.kt index 9daf8d92e7b..cab0ecbf439 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/jvmMppUtils.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/jvmMppUtils.kt @@ -7,10 +7,10 @@ package org.jetbrains.kotlin.idea.run import com.intellij.openapi.module.Module import org.jetbrains.kotlin.idea.project.platform -import org.jetbrains.kotlin.platform.impl.isJvm +import org.jetbrains.kotlin.platform.jvm.isJvm fun Module.asJvmModule(): Module? { - if (platform.isJvm) return this + if (platform.isJvm()) return this return null } diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/KotlinMavenImporter.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/KotlinMavenImporter.kt index 7148fb65718..b62c0f155e5 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/KotlinMavenImporter.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/KotlinMavenImporter.kt @@ -45,12 +45,13 @@ import org.jetbrains.kotlin.idea.framework.KotlinSdkType import org.jetbrains.kotlin.idea.framework.detectLibraryKind import org.jetbrains.kotlin.idea.maven.configuration.KotlinMavenConfigurator import org.jetbrains.kotlin.idea.platform.tooling -import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.IdePlatformKind +import org.jetbrains.kotlin.platform.TargetPlatform 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.isCommon +import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.utils.SmartList import org.jetbrains.kotlin.utils.addIfNotNull import java.io.File @@ -179,7 +180,7 @@ class KotlinMavenImporter : MavenImporter(KOTLIN_PLUGIN_GROUP_ID, KOTLIN_PLUGIN_ private fun getCompilerArgumentsByConfigurationElement( mavenProject: MavenProject, configuration: Element?, - platform: IdePlatform<*, *> + platform: TargetPlatform ): List { val arguments = platform.createArguments() @@ -369,7 +370,7 @@ class KotlinMavenImporter : MavenImporter(KOTLIN_PLUGIN_GROUP_ID, KOTLIN_PLUGIN_ }.distinct() private fun setImplementedModuleName(kotlinFacet: KotlinFacet, mavenProject: MavenProject, module: Module) { - if (kotlinFacet.configuration.settings.platform.isCommon) { + if (kotlinFacet.configuration.settings.platform.isCommon()) { kotlinFacet.configuration.settings.implementedModuleNames = emptyList() } else { val manager = MavenProjectsManager.getInstance(module.project) diff --git a/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt b/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt index 6342aaa8c99..6afb86bb54d 100644 --- a/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt +++ b/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt @@ -50,7 +50,11 @@ import org.jetbrains.kotlin.platform.impl.* import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.JUnit3RunnerWithInners import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner +import org.jetbrains.kotlin.platform.CommonPlatforms import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.isCommon +import org.jetbrains.kotlin.platform.js.isJs +import org.jetbrains.kotlin.platform.oldFashionedDescription import org.jetbrains.kotlin.platform.js.JsPlatforms import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.junit.Assert @@ -635,7 +639,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) Assert.assertEquals(true, compilerArguments!!.suppressWarnings) Assert.assertEquals(LanguageFeature.State.ENABLED, coroutineSupport) - Assert.assertEquals("JVM 1.8", platform!!.description) + Assert.assertEquals("JVM 1.8", platform!!.oldFashionedDescription) Assert.assertEquals("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget) Assert.assertEquals("foobar.jar", (compilerArguments as K2JVMCompilerArguments).classpath) Assert.assertEquals( @@ -756,7 +760,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { Assert.assertEquals("1.0", compilerArguments!!.languageVersion) Assert.assertEquals("1.0", apiLevel!!.versionString) Assert.assertEquals("1.0", compilerArguments!!.apiVersion) - Assert.assertEquals("JVM 1.8", platform!!.description) + Assert.assertEquals("JVM 1.8", platform!!.oldFashionedDescription) Assert.assertEquals("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget) } @@ -831,7 +835,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) Assert.assertEquals(true, compilerArguments!!.suppressWarnings) Assert.assertEquals(LanguageFeature.State.ENABLED, coroutineSupport) - Assert.assertTrue(platform.isJavaScript) + Assert.assertTrue(platform.isJs()) with(compilerArguments as K2JSCompilerArguments) { Assert.assertEquals(true, sourceMap) Assert.assertEquals("commonjs", moduleKind) @@ -986,7 +990,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { Assert.assertEquals("1.0", compilerArguments!!.apiVersion) Assert.assertEquals(true, compilerArguments!!.suppressWarnings) Assert.assertEquals(LanguageFeature.State.ENABLED, coroutineSupport) - Assert.assertEquals("JVM 1.8", platform!!.description) + Assert.assertEquals("JVM 1.8", platform!!.oldFashionedDescription) Assert.assertEquals("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget) Assert.assertEquals("foobar.jar", (compilerArguments as K2JVMCompilerArguments).classpath) Assert.assertEquals("-version", compilerSettings!!.additionalArguments) @@ -1046,7 +1050,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertImporterStatePresent() with(facetSettings) { - Assert.assertEquals("JVM 1.8", platform!!.description) + Assert.assertEquals("JVM 1.8", platform!!.oldFashionedDescription) Assert.assertEquals("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget) Assert.assertEquals(LanguageFeature.State.ENABLED, coroutineSupport) Assert.assertEquals("c:/program files/jdk1.8", (compilerArguments as K2JVMCompilerArguments).classpath) @@ -1102,7 +1106,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertImporterStatePresent() with(facetSettings) { - Assert.assertEquals("JVM 1.8", platform!!.description) + Assert.assertEquals("JVM 1.8", platform!!.oldFashionedDescription) Assert.assertEquals("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget) Assert.assertEquals(LanguageFeature.State.ENABLED, coroutineSupport) Assert.assertEquals("c:/program files/jdk1.8", (compilerArguments as K2JVMCompilerArguments).classpath) @@ -1156,7 +1160,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertModules("project") assertImporterStatePresent() - Assert.assertEquals(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6), facetSettings.platform) + Assert.assertEquals(JvmPlatforms.jvm16, facetSettings.platform) assertContentFolders("project", JavaSourceRootType.SOURCE, "src/main/kotlin") assertContentFolders("project", JavaSourceRootType.TEST_SOURCE, "src/test/java") @@ -1211,7 +1215,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertModules("project") assertImporterStatePresent() - Assert.assertEquals(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6), facetSettings.platform) + Assert.assertEquals(JvmPlatforms.jvm16, facetSettings.platform) } fun testJvmDetectionByGoalWithCommonStdlib() { @@ -1261,7 +1265,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertModules("project") assertImporterStatePresent() - Assert.assertEquals(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6), facetSettings.platform) + Assert.assertEquals(JvmPlatforms.jvm16, facetSettings.platform) assertContentFolders("project", JavaSourceRootType.SOURCE, "src/main/kotlin") assertContentFolders("project", JavaSourceRootType.TEST_SOURCE, "src/test/java") @@ -1316,7 +1320,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertModules("project") assertImporterStatePresent() - Assert.assertTrue(facetSettings.platform.isJavaScript) + Assert.assertTrue(facetSettings.platform.isJs()) Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType) @@ -1373,7 +1377,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertModules("project") assertImporterStatePresent() - Assert.assertTrue(facetSettings.platform.isJavaScript) + Assert.assertTrue(facetSettings.platform.isJs()) Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType) @@ -1430,7 +1434,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertModules("project") assertImporterStatePresent() - Assert.assertTrue(facetSettings.platform.isJavaScript) + Assert.assertTrue(facetSettings.platform.isJs()) Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType) @@ -1492,7 +1496,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertModules("project") assertImporterStatePresent() - Assert.assertTrue(facetSettings.platform.isJavaScript) + Assert.assertTrue(facetSettings.platform.isJs()) val rootManager = ModuleRootManager.getInstance(getModule("project")) val libraries = rootManager.orderEntries.filterIsInstance().map { it.library as LibraryEx } @@ -1546,7 +1550,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertModules("project") assertImporterStatePresent() - Assert.assertTrue(facetSettings.platform.isCommon) + Assert.assertTrue(facetSettings.platform.isCommon()) Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType) @@ -1597,7 +1601,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertModules("project") assertImporterStatePresent() - Assert.assertTrue(facetSettings.platform.isCommon) + Assert.assertTrue(facetSettings.platform.isCommon()) Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType) @@ -1648,7 +1652,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertModules("project") assertImporterStatePresent() - Assert.assertTrue(facetSettings.platform.isCommon) + Assert.assertTrue(facetSettings.platform.isCommon()) val rootManager = ModuleRootManager.getInstance(getModule("project")) val stdlib = rootManager.orderEntries.filterIsInstance().single().library @@ -1709,7 +1713,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertModules("project") assertImporterStatePresent() - Assert.assertEquals(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6), facetSettings.platform) + Assert.assertEquals(JvmPlatforms.jvm16, facetSettings.platform) assertContentFolders("project", SourceKotlinRootType, "src/main/kotlin") assertContentFolders("project", TestSourceKotlinRootType, "src/test/java") @@ -1764,7 +1768,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertModules("project") assertImporterStatePresent() - Assert.assertTrue(facetSettings.platform.isJavaScript) + Assert.assertTrue(facetSettings.platform.isJs()) assertContentFolders("project", SourceKotlinRootType, "src/main/kotlin") assertContentFolders("project", TestSourceKotlinRootType, "src/test/java") @@ -1819,7 +1823,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertModules("project") assertImporterStatePresent() - Assert.assertTrue(facetSettings.platform.isCommon) + Assert.assertTrue(facetSettings.platform.isCommon()) assertContentFolders("project", SourceKotlinRootType, "src/main/kotlin") assertContentFolders("project", TestSourceKotlinRootType, "src/test/java") @@ -2033,7 +2037,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertImporterStatePresent() with(facetSettings) { - Assert.assertEquals("JVM 1.8", platform!!.description) + Assert.assertEquals("JVM 1.8", platform!!.oldFashionedDescription) Assert.assertEquals("1.1", languageLevel!!.description) Assert.assertEquals("1.1", apiLevel!!.description) Assert.assertEquals("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget) @@ -2256,7 +2260,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertImporterStatePresent() with(facetSettings("myModule1")) { - Assert.assertEquals("JVM 1.8", platform!!.description) + Assert.assertEquals("JVM 1.8", platform!!.oldFashionedDescription) Assert.assertEquals("1.1", languageLevel!!.description) Assert.assertEquals("1.0", apiLevel!!.description) Assert.assertEquals("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget) @@ -2267,7 +2271,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { } with(facetSettings("myModule2")) { - Assert.assertEquals("JVM 1.8", platform!!.description) + Assert.assertEquals("JVM 1.8", platform!!.oldFashionedDescription) Assert.assertEquals("1.1", languageLevel!!.description) Assert.assertEquals("1.0", apiLevel!!.description) Assert.assertEquals("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget) @@ -2278,7 +2282,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { } with(facetSettings("myModule3")) { - Assert.assertEquals("JVM 1.8", platform!!.description) + Assert.assertEquals("JVM 1.8", platform!!.oldFashionedDescription) Assert.assertEquals(LanguageVersion.LATEST_STABLE, languageLevel) Assert.assertEquals(LanguageVersion.LATEST_STABLE, apiLevel) Assert.assertEquals("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget) @@ -2517,20 +2521,20 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertImporterStatePresent() with(facetSettings("my-common-module1")) { - Assert.assertEquals(CommonIdePlatformKind.Platform.description, platform!!.description) + Assert.assertEquals(CommonPlatforms.defaultCommonPlatform, platform) } with(facetSettings("my-common-module2")) { - Assert.assertEquals(CommonIdePlatformKind.Platform.description, platform!!.description) + Assert.assertEquals(CommonPlatforms.defaultCommonPlatform, platform) } with(facetSettings("my-jvm-module")) { - Assert.assertEquals(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6).description, platform!!.description) + Assert.assertEquals(JvmPlatforms.defaultJvmPlatform, platform) Assert.assertEquals(listOf("my-common-module1", "my-common-module2"), implementedModuleNames) } with(facetSettings("my-js-module")) { - Assert.assertEquals(JsIdePlatformKind.Platform.description, platform!!.description) + Assert.assertEquals(JsPlatforms.defaultJsPlatform, platform) Assert.assertEquals(listOf("my-common-module1"), implementedModuleNames) } } diff --git a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeIdePlatformKindTooling.kt b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeIdePlatformKindTooling.kt index 937d0bcecb1..f4e98ee9e53 100644 --- a/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeIdePlatformKindTooling.kt +++ b/idea/idea-native/src/org/jetbrains/kotlin/ide/konan/NativeIdePlatformKindTooling.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.platform.impl.NativeIdePlatformKind import org.jetbrains.kotlin.psi.KtFunction import org.jetbrains.kotlin.psi.KtNamedDeclaration import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.konan.KonanPlatforms import javax.swing.Icon class NativeIdePlatformKindTooling : IdePlatformKindTooling() { @@ -45,7 +46,7 @@ class NativeIdePlatformKindTooling : IdePlatformKindTooling() { object NativeLibraryKind : PersistentLibraryKind("kotlin.native"), KotlinLibraryKind { override val compilerPlatform: TargetPlatform - get() = NativeIdePlatformKind.compilerPlatform + get() = KonanPlatforms.defaultKonanPlatform override fun createDefaultProperties() = DummyLibraryProperties.INSTANCE!! } diff --git a/idea/src/org/jetbrains/kotlin/idea/CommonModuleResolveScopeEnlarger.kt b/idea/src/org/jetbrains/kotlin/idea/CommonModuleResolveScopeEnlarger.kt index 20bcfeace92..e753f264755 100644 --- a/idea/src/org/jetbrains/kotlin/idea/CommonModuleResolveScopeEnlarger.kt +++ b/idea/src/org/jetbrains/kotlin/idea/CommonModuleResolveScopeEnlarger.kt @@ -16,15 +16,15 @@ import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.SearchScope import org.jetbrains.kotlin.idea.caches.project.implementingModules import org.jetbrains.kotlin.idea.project.platform -import org.jetbrains.kotlin.platform.impl.isCommon -import org.jetbrains.kotlin.platform.impl.isJvm +import org.jetbrains.kotlin.platform.isCommon +import org.jetbrains.kotlin.platform.jvm.isJvm class CommonModuleResolveScopeEnlarger : ResolveScopeEnlarger() { override fun getAdditionalResolveScope(file: VirtualFile, project: Project): SearchScope? { val module = ProjectFileIndex.getInstance(project).getModuleForFile(file) ?: return null - if (!module.platform.isCommon) return null + if (!module.platform.isCommon()) return null - val implementingModule = module.implementingModules.find { it.platform.isJvm } ?: return null + val implementingModule = module.implementingModules.find { it.platform.isJvm() } ?: return null var result = GlobalSearchScope.EMPTY_SCOPE for (entry in ModuleRootManager.getInstance(implementingModule).orderEntries) { diff --git a/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java b/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java index ea81ca3df89..4a79fb7a5e7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java +++ b/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java @@ -43,11 +43,14 @@ import org.jetbrains.kotlin.idea.project.NewInferenceForIDEAnalysisComponent; import org.jetbrains.kotlin.idea.roots.RootUtilsKt; import org.jetbrains.kotlin.idea.util.CidrUtil; import org.jetbrains.kotlin.idea.util.application.ApplicationUtilsKt; -import org.jetbrains.kotlin.platform.IdePlatform; import org.jetbrains.kotlin.platform.IdePlatformKind; +import org.jetbrains.kotlin.platform.PlatformUtilKt; import org.jetbrains.kotlin.platform.impl.JsIdePlatformUtil; import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind; import org.jetbrains.kotlin.platform.impl.JvmIdePlatformUtil; +import org.jetbrains.kotlin.config.JvmTarget; +import org.jetbrains.kotlin.platform.jvm.JdkPlatform; +import org.jetbrains.kotlin.platform.TargetPlatform; import javax.swing.*; import java.util.*; @@ -360,8 +363,8 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co @SuppressWarnings("unchecked") private void fillJvmVersionList() { - for (IdePlatform jvm : JvmIdePlatformKind.INSTANCE.getPlatforms()) { - jvmVersionComboBox.addItem(jvm.getVersion().getDescription()); + for (TargetPlatform jvm : JvmIdePlatformKind.INSTANCE.getPlatforms()) { + jvmVersionComboBox.addItem(PlatformUtilKt.subplatformOfType(jvm, JdkPlatform.class).getTargetVersion().getDescription()); } } diff --git a/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt b/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt index 86534500715..ac2e885613c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt +++ b/idea/src/org/jetbrains/kotlin/idea/facet/KotlinFacetEditorGeneralTab.kt @@ -25,14 +25,19 @@ import com.intellij.util.ui.FormBuilder import com.intellij.util.ui.ThreeStateCheckBox import org.jetbrains.kotlin.cli.common.arguments.* import org.jetbrains.kotlin.config.CompilerSettings +import org.jetbrains.kotlin.config.createArguments import org.jetbrains.kotlin.config.splitArgumentString import org.jetbrains.kotlin.idea.compiler.configuration.* import org.jetbrains.kotlin.idea.util.onTextChange -import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.IdePlatformKind +import org.jetbrains.kotlin.platform.idePlatformKind import org.jetbrains.kotlin.platform.impl.isCommon import org.jetbrains.kotlin.platform.impl.isJavaScript import org.jetbrains.kotlin.platform.impl.isJvm +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.isCommon +import org.jetbrains.kotlin.platform.js.isJs +import org.jetbrains.kotlin.platform.jvm.isJvm import java.awt.BorderLayout import javax.swing.* import javax.swing.border.EmptyBorder @@ -60,7 +65,7 @@ class KotlinFacetEditorGeneralTab( lateinit var useProjectSettingsCheckBox: ThreeStateCheckBox - lateinit var targetPlatformComboBox: ComboBox> + lateinit var targetPlatformComboBox: ComboBox private lateinit var projectSettingsLink: HoverHyperlinkLabel @@ -91,7 +96,7 @@ class KotlinFacetEditorGeneralTab( ) useProjectSettingsCheckBox = ThreeStateCheckBox("Use project settings").apply { isThirdStateEnabled = isMultiEditor } - targetPlatformComboBox = ComboBox>(IdePlatformKind.All_PLATFORMS.toTypedArray()).apply { + targetPlatformComboBox = ComboBox(IdePlatformKind.All_PLATFORMS.toTypedArray()).apply { setRenderer(DescriptionListCellRenderer()) } projectSettingsLink = HoverHyperlinkLabel("Edit project settings").apply { @@ -130,7 +135,7 @@ class KotlinFacetEditorGeneralTab( internal fun updateCompilerConfigurable() { val useProjectSettings = useProjectSettingsCheckBox.isSelected - compilerConfigurable.setTargetPlatform(chosenPlatform?.kind) + compilerConfigurable.setTargetPlatform(chosenPlatform?.idePlatformKind) compilerConfigurable.setEnabled(!useProjectSettings) if (useProjectSettings) { compilerConfigurable.commonCompilerArguments = KotlinCommonCompilerArgumentsHolder.getInstance(project).settings.unfrozen() as CommonCompilerArguments? @@ -147,14 +152,14 @@ class KotlinFacetEditorGeneralTab( compilerConfigurable.reset() } - val chosenPlatform: IdePlatform<*, *>? + val chosenPlatform: TargetPlatform? get() = targetPlatformComboBox.selectedItemTyped } inner class ArgumentConsistencyValidator : FacetEditorValidator() { override fun check(): ValidationResult { val platform = editor.chosenPlatform ?: return ValidationResult.OK - val primaryArguments = platform.createArguments().apply { + val primaryArguments = platform.createArguments { editor.compilerConfigurable.applyTo( this, this as? K2JVMCompilerArguments ?: K2JVMCompilerArguments(), @@ -169,9 +174,9 @@ class KotlinFacetEditorGeneralTab( } val emptyArguments = argumentClass.newInstance() val fieldNamesToCheck = when { - platform.isJvm -> jvmUIExposedFields - platform.isJavaScript -> jsUIExposedFields - platform.isCommon -> metadataUIExposedFields + platform.isJvm() -> jvmUIExposedFields + platform.isJs() -> jsUIExposedFields + platform.isCommon() -> metadataUIExposedFields else -> commonUIExposedFields } @@ -306,8 +311,8 @@ class KotlinFacetEditorGeneralTab( editor.chosenPlatform?.let { if (it != platform) { val platformArguments = when { - it.isJvm -> editor.compilerConfigurable.k2jvmCompilerArguments - it.isJavaScript -> editor.compilerConfigurable.k2jsCompilerArguments + it.isJvm() -> editor.compilerConfigurable.k2jvmCompilerArguments + it.isJs() -> editor.compilerConfigurable.k2jsCompilerArguments else -> null } compilerArguments = it.createArguments { diff --git a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt index cf2e93b0abb..217a375aa0c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt @@ -40,19 +40,21 @@ import org.jetbrains.kotlin.idea.framework.KotlinSdkType import org.jetbrains.kotlin.idea.platform.tooling import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider -import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.IdePlatformKind +import org.jetbrains.kotlin.platform.idePlatformKind import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind import org.jetbrains.kotlin.psi.NotNullableUserDataProperty +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import kotlin.reflect.KProperty1 var Module.hasExternalSdkConfiguration: Boolean by NotNullableUserDataProperty(Key.create("HAS_EXTERNAL_SDK_CONFIGURATION"), false) -private fun getDefaultTargetPlatform(module: Module, rootModel: ModuleRootModel?): IdePlatform<*, *> { +private fun getDefaultTargetPlatform(module: Module, rootModel: ModuleRootModel?): TargetPlatform { val platformKind = IdePlatformKind.ALL_KINDS.firstOrNull { getRuntimeLibraryVersions(module, rootModel, it).isNotEmpty() - } ?: DefaultIdeTargetPlatformKindProvider.defaultPlatform.kind + } ?: DefaultIdeTargetPlatformKindProvider.defaultPlatform.idePlatformKind if (platformKind == JvmIdePlatformKind) { var jvmTarget = Kotlin2JvmCompilerArgumentsHolder.getInstance(module.project).settings.jvmTarget?.let { JvmTarget.fromString(it) } if (jvmTarget == null) { @@ -62,7 +64,7 @@ private fun getDefaultTargetPlatform(module: Module, rootModel: ModuleRootModel? jvmTarget = JvmTarget.JVM_1_8 } } - return if (jvmTarget != null) JvmIdePlatformKind.Platform(jvmTarget) else JvmIdePlatformKind.defaultPlatform + return if (jvmTarget != null) JvmPlatforms.jvmPlatformByTargetVersion(jvmTarget) else JvmPlatforms.defaultJvmPlatform } return platformKind.defaultPlatform } @@ -70,7 +72,7 @@ private fun getDefaultTargetPlatform(module: Module, rootModel: ModuleRootModel? fun KotlinFacetSettings.initializeIfNeeded( module: Module, rootModel: ModuleRootModel?, - platform: IdePlatform<*, *>? = null, // if null, detect by module dependencies + platform: TargetPlatform? = null, // if null, detect by module dependencies compilerVersion: String? = null ) { val project = module.project @@ -87,7 +89,7 @@ fun KotlinFacetSettings.initializeIfNeeded( if (compilerArguments == null) { val targetPlatform = platform ?: getDefaultTargetPlatform(module, rootModel) compilerArguments = targetPlatform.createArguments { - targetPlatform.kind.tooling.compilerArgumentsForProject(module.project)?.let { mergeBeans(it, this) } + targetPlatform.idePlatformKind.tooling.compilerArgumentsForProject(module.project)?.let { mergeBeans(it, this) } mergeBeans(commonArguments, this) } } @@ -105,7 +107,7 @@ fun KotlinFacetSettings.initializeIfNeeded( getLibraryLanguageLevel( module, rootModel, - this.platform?.kind, + this.platform?.idePlatformKind, coerceRuntimeLibraryVersionToReleased = compilerVersion == null ) ) @@ -146,7 +148,7 @@ fun Module.getOrCreateFacet( fun KotlinFacet.configureFacet( compilerVersion: String?, coroutineSupport: LanguageFeature.State, - platform: IdePlatform<*, *>?, // if null, detect by module dependencies + platform: TargetPlatform?, // if null, detect by module dependencies modelsProvider: IdeModifiableModelsProvider ) { val module = module diff --git a/idea/src/org/jetbrains/kotlin/idea/framework/CreateKotlinSdkActivity.kt b/idea/src/org/jetbrains/kotlin/idea/framework/CreateKotlinSdkActivity.kt index 8b42324b92c..ec60deae681 100644 --- a/idea/src/org/jetbrains/kotlin/idea/framework/CreateKotlinSdkActivity.kt +++ b/idea/src/org/jetbrains/kotlin/idea/framework/CreateKotlinSdkActivity.kt @@ -10,7 +10,8 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.startup.StartupActivity import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.util.projectStructure.allModules -import org.jetbrains.kotlin.platform.impl.isJvm +import org.jetbrains.kotlin.platform.isCommon +import org.jetbrains.kotlin.platform.js.isJs /** * This StartupActivity creates KotlinSdk for projects containing non-jvm modules. @@ -21,7 +22,7 @@ class CreateKotlinSdkActivity : StartupActivity, DumbAware { override fun runActivity(project: Project) { val kotlinSdkIsRequired = project.allModules().any { - !it.platform.isJvm + it.platform.isJs() || it.platform.isCommon() } if (kotlinSdkIsRequired) { KotlinSdkType.setUpIfNeeded() diff --git a/idea/src/org/jetbrains/kotlin/idea/framework/TargetRetrieveActivity.kt b/idea/src/org/jetbrains/kotlin/idea/framework/TargetRetrieveActivity.kt index 027102d0f4f..8db0e3148b8 100644 --- a/idea/src/org/jetbrains/kotlin/idea/framework/TargetRetrieveActivity.kt +++ b/idea/src/org/jetbrains/kotlin/idea/framework/TargetRetrieveActivity.kt @@ -13,21 +13,22 @@ import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.statistics.FUSEventGroups import org.jetbrains.kotlin.idea.statistics.KotlinFUSLogger import org.jetbrains.kotlin.idea.util.projectStructure.allModules -import org.jetbrains.kotlin.platform.impl.isCommon -import org.jetbrains.kotlin.platform.impl.isJavaScript -import org.jetbrains.kotlin.platform.impl.isJvm -import org.jetbrains.kotlin.platform.impl.isKotlinNative +import org.jetbrains.kotlin.platform.isCommon +import org.jetbrains.kotlin.platform.js.isJs +import org.jetbrains.kotlin.platform.jvm.isJvm +import org.jetbrains.kotlin.platform.konan.isNative class TargetRetrieveActivity : StartupActivity { override fun runActivity(project: Project) { project.allModules().forEach { val buildSystem = it.getBuildSystemType() + // TODO(dsavvinov): review that val platform = when { - it.platform.isJvm -> "jvm" - it.platform.isJavaScript -> "js" - it.platform.isCommon -> "common" - it.platform.isKotlinNative -> "native" + it.platform.isJvm() -> "jvm" + it.platform.isJs() -> "js" + it.platform.isCommon() -> "common" + it.platform.isNative() -> "native" else -> "unknown" } when { diff --git a/idea/src/org/jetbrains/kotlin/idea/hierarchy/KotlinTypeHierarchyProvider.kt b/idea/src/org/jetbrains/kotlin/idea/hierarchy/KotlinTypeHierarchyProvider.kt index bc43cb4f0d9..0f2d7d1ff34 100644 --- a/idea/src/org/jetbrains/kotlin/idea/hierarchy/KotlinTypeHierarchyProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/hierarchy/KotlinTypeHierarchyProvider.kt @@ -35,7 +35,7 @@ import org.jetbrains.kotlin.idea.search.allScope import org.jetbrains.kotlin.idea.stubindex.KotlinClassShortNameIndex import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.idea.util.module -import org.jetbrains.kotlin.platform.impl.isJvm +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtConstructor import org.jetbrains.kotlin.psi.KtNamedFunction @@ -46,7 +46,7 @@ import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class KotlinTypeHierarchyProvider : JavaTypeHierarchyProvider() { private fun getOriginalPsiClassOrCreateLightClass(classOrObject: KtClassOrObject, module: Module?): PsiClass? { val fqName = classOrObject.fqName - if (fqName != null && module?.platform.isJvm) { + if (fqName != null && module?.platform.isJvm()) { val javaClassId = JavaToKotlinClassMap.mapKotlinToJava(fqName.toUnsafe()) if (javaClassId != null) { return JavaPsiFacade.getInstance(classOrObject.project).findClass( diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinRunLineMarkerContributor.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinRunLineMarkerContributor.kt index 3929403f90e..69068d30e99 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinRunLineMarkerContributor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinRunLineMarkerContributor.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.idea.isMainFunction import org.jetbrains.kotlin.idea.platform.tooling import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.util.module +import org.jetbrains.kotlin.platform.idePlatformKind import org.jetbrains.kotlin.psi.KtNamedFunction class KotlinRunLineMarkerContributor : RunLineMarkerContributor() { @@ -34,7 +35,7 @@ class KotlinRunLineMarkerContributor : RunLineMarkerContributor() { if (function.isMainFunction()) { val platform = function.containingKtFile.module?.platform ?: return null - if (!platform.kind.tooling.acceptsAsEntryPoint(function)) return null + if (!platform.idePlatformKind.tooling.acceptsAsEntryPoint(function)) return null return Info(AllIcons.RunConfigurations.TestState.Run, null, ExecutorAction.getActions(0)) } diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinTestRunLineMarkerContributor.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinTestRunLineMarkerContributor.kt index 2314d00a48f..c7b5810bf72 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinTestRunLineMarkerContributor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinTestRunLineMarkerContributor.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.platform.tooling import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.util.projectStructure.module +import org.jetbrains.kotlin.platform.idePlatformKind import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtNamedDeclaration import org.jetbrains.kotlin.psi.KtNamedFunction @@ -62,7 +63,7 @@ class KotlinTestRunLineMarkerContributor : RunLineMarkerContributor() { val descriptor = declaration.resolveToDescriptorIfAny() ?: return null val targetPlatform = declaration.module?.platform ?: return null - val icon = targetPlatform.kind.tooling.getTestIcon(declaration, descriptor) ?: return null + val icon = targetPlatform.idePlatformKind.tooling.getTestIcon(declaration, descriptor) ?: return null return Info(icon, { "Run Test" }, ExecutorAction.getActions()) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/js/jsUtils.kt b/idea/src/org/jetbrains/kotlin/idea/js/jsUtils.kt index 3c521d6589a..0aa204f5466 100644 --- a/idea/src/org/jetbrains/kotlin/idea/js/jsUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/js/jsUtils.kt @@ -22,7 +22,7 @@ import org.jetbrains.jps.util.JpsPathUtil import org.jetbrains.kotlin.idea.facet.KotlinFacet import org.jetbrains.kotlin.idea.framework.isGradleModule import org.jetbrains.kotlin.idea.project.platform -import org.jetbrains.kotlin.platform.impl.isJavaScript +import org.jetbrains.kotlin.platform.js.isJs import org.jetbrains.plugins.gradle.settings.GradleSystemRunningSettings val Module.jsTestOutputFilePath: String? @@ -47,7 +47,7 @@ val Module.jsProductionOutputFilePath: String? return JpsPathUtil.urlToPath("$outputDir/$name.js") } -fun Module.asJsModule(): Module? = takeIf { it.platform.isJavaScript } +fun Module.asJsModule(): Module? = takeIf { it.platform.isJs() } val Module.shouldUseJpsOutput: Boolean get() = !(isGradleModule() && GradleSystemRunningSettings.getInstance().isUseGradleAwareMake) \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/ExpectActualUtils.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/ExpectActualUtils.kt index 192cb2875e4..b4e7a540d5d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/ExpectActualUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/expectactual/ExpectActualUtils.kt @@ -300,7 +300,7 @@ private fun KotlinType.checkAccessibility(accessibleClasses: List { diff --git a/idea/tests/org/jetbrains/kotlin/idea/highlighter/Jsr305HighlightingTest.kt b/idea/tests/org/jetbrains/kotlin/idea/highlighter/Jsr305HighlightingTest.kt index 44ee42dcf42..8feebea460c 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/highlighter/Jsr305HighlightingTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/highlighter/Jsr305HighlightingTest.kt @@ -9,13 +9,12 @@ import com.intellij.openapi.module.Module import com.intellij.openapi.roots.ModifiableRootModel import com.intellij.testFramework.LightProjectDescriptor import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime -import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider import org.jetbrains.kotlin.idea.stubs.createFacet import org.jetbrains.kotlin.idea.test.KotlinJdkAndLibraryProjectDescriptor import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase -import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.test.MockLibraryUtil import org.jetbrains.kotlin.utils.ReportLevel import org.junit.runner.RunWith @@ -35,7 +34,7 @@ class Jsr305HighlightingTest : KotlinLightCodeInsightFixtureTestCase() { ) { override fun configureModule(module: Module, model: ModifiableRootModel) { super.configureModule(module, model) - module.createFacet(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_8)) + module.createFacet(JvmPlatforms.jvm18) val facetSettings = KotlinFacetSettingsProvider.getInstance(project).getInitializedSettings(module) facetSettings.apply { diff --git a/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt b/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt index adc58640ccf..d58a66f5a79 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt @@ -20,9 +20,12 @@ import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest import org.jetbrains.kotlin.idea.stubs.createFacet import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil import org.jetbrains.kotlin.idea.test.PluginTestCaseBase -import org.jetbrains.kotlin.platform.IdePlatform -import org.jetbrains.kotlin.platform.impl.* import org.jetbrains.kotlin.test.TestJdkKind +import org.jetbrains.kotlin.platform.* +import org.jetbrains.kotlin.platform.js.JsPlatforms +import org.jetbrains.kotlin.platform.jvm.isJvm +import org.jetbrains.kotlin.platform.js.isJs +import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import java.io.File // allows to configure a test mpp project @@ -45,11 +48,11 @@ fun AbstractMultiModuleTest.setupMppProjectFromDirStructure(testRoot: File) { is ModuleDependency -> module.addDependency(modulesById[it.moduleId]!!) is StdlibDependency -> { when { - platform.isCommon -> module.addLibrary( + platform.isCommon() -> module.addLibrary( ForTestCompileRuntime.stdlibCommonForTests(), kind = CommonLibraryKind ) - platform.isJvm -> module.addLibrary(ForTestCompileRuntime.runtimeJarForTests()) - platform.isJavaScript -> module.addLibrary(ForTestCompileRuntime.stdlibJsForTests(), kind = JSLibraryKind) + platform.isJvm() -> module.addLibrary(ForTestCompileRuntime.runtimeJarForTests()) + platform.isJs() -> module.addLibrary(ForTestCompileRuntime.stdlibJsForTests(), kind = JSLibraryKind) else -> error("Unknown platform $this") } } @@ -60,8 +63,8 @@ fun AbstractMultiModuleTest.setupMppProjectFromDirStructure(testRoot: File) { } is CoroutinesDependency -> module.enableCoroutines() is KotlinTestDependency -> when { - platform.isJvm -> module.addLibrary(ForTestCompileRuntime.kotlinTestJUnitJarForTests()) - platform.isJavaScript -> module.addLibrary(ForTestCompileRuntime.kotlinTestJsJarForTests(), kind = JSLibraryKind) + platform.isJvm() -> module.addLibrary(ForTestCompileRuntime.kotlinTestJUnitJarForTests()) + platform.isJs() -> module.addLibrary(ForTestCompileRuntime.kotlinTestJsJarForTests(), kind = JSLibraryKind) } } } @@ -70,9 +73,9 @@ fun AbstractMultiModuleTest.setupMppProjectFromDirStructure(testRoot: File) { modulesById.forEach { (nameAndPlatform, module) -> val (name, platform) = nameAndPlatform when { - platform.isCommon -> module.createFacet(platform, useProjectSettings = false) + platform.isCommon() -> module.createFacet(platform, useProjectSettings = false) else -> { - val commonModuleId = ModuleId(name, CommonIdePlatformKind.Platform) + val commonModuleId = ModuleId(name, CommonPlatforms.defaultCommonPlatform) module.createFacet(platform, implementedModuleName = commonModuleId.ideaModuleName()) module.enableMultiPlatform() @@ -93,7 +96,7 @@ private fun AbstractMultiModuleTest.createModuleWithRoots( for ((_, isTestRoot, moduleRoot) in infos) { addRoot(module, moduleRoot, isTestRoot) - if (moduleId.platform.isJavaScript && isTestRoot) { + if (moduleId.platform.isJs() && isTestRoot) { setupJsTestOutput(module) } } @@ -126,11 +129,11 @@ private fun AbstractMultiModuleTest.createModule(name: String): Module { private val testSuffixes = setOf("test", "tests") private val platformNames = mapOf( - listOf("header", "common", "expect") to CommonIdePlatformKind.Platform, - listOf("java", "jvm") to JvmIdePlatformKind.defaultPlatform, - listOf("java8", "jvm8") to JvmIdePlatformKind.Platform(JvmTarget.JVM_1_8), - listOf("java6", "jvm6") to JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6), - listOf("js", "javascript") to JsIdePlatformKind.Platform + listOf("header", "common", "expect") to CommonPlatforms.defaultCommonPlatform, + listOf("java", "jvm") to JvmPlatforms.defaultJvmPlatform, + listOf("java8", "jvm8") to JvmPlatforms.jvm18, + listOf("java6", "jvm6") to JvmPlatforms.jvm16, + listOf("js", "javascript") to JsPlatforms.defaultJsPlatform ) private fun parseDirName(dir: File): RootInfo { @@ -159,7 +162,7 @@ private fun parseModuleId(parts: List): ModuleId { val platform = parsePlatform(parts) val name = parseModuleName(parts) val id = parseIndex(parts) ?: 0 - assert(id == 0 || !platform.isCommon) + assert(id == 0 || !platform.isCommon()) return ModuleId(name, platform, id) } @@ -182,7 +185,7 @@ private fun parseIndex(parts: List): Int? { private data class ModuleId( val groupName: String, - val platform: IdePlatform<*, *>, + val platform: TargetPlatform, val index: Int = 0 ) { fun ideaModuleName(): String { @@ -191,11 +194,11 @@ private data class ModuleId( } } -private val IdePlatform<*, *>.presentableName: String +private val TargetPlatform.presentableName: String get() = when { - isCommon -> "Common" - isJvm -> "JVM" - isJavaScript -> "JS" + isCommon() -> "Common" + isJvm() -> "JVM" + isJs() -> "JS" else -> error("Unknown platform $this") } diff --git a/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt b/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt index 5523ba0c96f..d9ea51267b2 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt @@ -31,7 +31,7 @@ import org.jetbrains.kotlin.idea.facet.initializeIfNeeded import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil import org.jetbrains.kotlin.idea.test.KotlinJdkAndLibraryProjectDescriptor import org.jetbrains.kotlin.idea.test.PluginTestCaseBase -import org.jetbrains.kotlin.platform.IdePlatform +import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.TestJdkKind import org.junit.Assert @@ -131,7 +131,7 @@ abstract class AbstractMultiModuleTest : DaemonAnalyzerTestCase() { } fun Module.createFacet( - platformKind: IdePlatform<*, *>? = null, + platformKind: TargetPlatform? = null, useProjectSettings: Boolean = true, implementedModuleName: String? = null ) { diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt index 5dd8dcf9ad6..09e9fc3020a 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt @@ -55,6 +55,7 @@ import org.jetbrains.kotlin.jps.incremental.* import org.jetbrains.kotlin.jps.model.JpsKotlinFacetModuleExtension import org.jetbrains.kotlin.jps.model.kotlinFacet import org.jetbrains.kotlin.jps.targets.KotlinModuleBuildTarget +import org.jetbrains.kotlin.platform.idePlatformKind import org.jetbrains.kotlin.platform.impl.isJavaScript import org.jetbrains.kotlin.platform.impl.isJvm import org.jetbrains.kotlin.platform.orDefault @@ -468,7 +469,7 @@ abstract class AbstractIncrementalJpsTest( private fun configureRequiredLibraries() { myProject.modules.forEach { module -> - val platformKind = module.kotlinFacet?.settings?.platform?.kind.orDefault() + val platformKind = module.kotlinFacet?.settings?.platform?.idePlatformKind.orDefault() when { platformKind.isJvm -> { diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/dependeciestxt/ModulesTxt.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/dependeciestxt/ModulesTxt.kt index cdc4039f46b..0d6ee77ac47 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/dependeciestxt/ModulesTxt.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/dependeciestxt/ModulesTxt.kt @@ -18,6 +18,8 @@ import org.jetbrains.kotlin.jps.build.dependeciestxt.ModulesTxt.Dependency.Kind. import org.jetbrains.kotlin.platform.impl.FakeK2NativeCompilerArguments import org.jetbrains.kotlin.platform.impl.isCommon import org.jetbrains.kotlin.platform.impl.isJvm +import org.jetbrains.kotlin.platform.isCommon +import org.jetbrains.kotlin.platform.jvm.isJvm import java.io.File import kotlin.reflect.KMutableProperty1 import kotlin.reflect.full.findAnnotation @@ -52,11 +54,11 @@ data class ModulesTxt( val isCommonModule get() = - kotlinFacetSettings?.platform.isCommon || + kotlinFacetSettings?.platform.isCommon() || kotlinFacetSettings?.kind == SOURCE_SET_HOLDER val isJvmModule - get() = kotlinFacetSettings?.platform.isJvm + get() = kotlinFacetSettings?.platform.isJvm() val expectedBy get() = dependencies.filter { diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/model/ModuleSettings.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/model/ModuleSettings.kt index 3d8d7876832..52458e2db0b 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/model/ModuleSettings.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/model/ModuleSettings.kt @@ -11,12 +11,12 @@ 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.* -import org.jetbrains.kotlin.platform.IdePlatform +import org.jetbrains.kotlin.platform.TargetPlatform val JpsModule.kotlinFacet: JpsKotlinFacetModuleExtension? get() = container.getChild(JpsKotlinFacetModuleExtension.KIND) -val JpsModule.platform: IdePlatform<*, *>? +val JpsModule.platform: TargetPlatform? get() = kotlinFacet?.settings?.platform val JpsModule.kotlinKind: KotlinModuleKind diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinTargetsIndex.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinTargetsIndex.kt index 3c82531d728..7457f3fe9dc 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinTargetsIndex.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinTargetsIndex.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.jps.build.ModuleBuildTarget import org.jetbrains.kotlin.jps.model.platform import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider import org.jetbrains.kotlin.platform.IdePlatformKind +import org.jetbrains.kotlin.platform.idePlatformKind import org.jetbrains.kotlin.platform.impl.* import org.jetbrains.kotlin.utils.LibraryUtils import kotlin.system.measureTimeMillis @@ -134,7 +135,7 @@ internal class KotlinTargetsIndexBuilder internal constructor( private fun ensureLoaded(target: ModuleBuildTarget): KotlinModuleBuildTarget<*> { return byJpsModuleBuildTarget.computeIfAbsent(target) { - val platform = target.module.platform?.kind ?: detectTargetPlatform(target) + val platform = target.module.platform?.idePlatformKind ?: detectTargetPlatform(target) when { platform.isCommon -> KotlinCommonModuleBuildTarget(uninitializedContext, target) @@ -152,7 +153,7 @@ internal class KotlinTargetsIndexBuilder internal constructor( private fun detectTargetPlatform(target: ModuleBuildTarget): IdePlatformKind<*> { if (hasJsStdLib(target)) return JsIdePlatformKind - return DefaultIdeTargetPlatformKindProvider.defaultPlatform.kind + return DefaultIdeTargetPlatformKindProvider.defaultPlatform.idePlatformKind } private fun hasJsStdLib(target: ModuleBuildTarget): Boolean { diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinUnsupportedModuleBuildTarget.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinUnsupportedModuleBuildTarget.kt index 6a5c5c3123f..a1154e6fc1c 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinUnsupportedModuleBuildTarget.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinUnsupportedModuleBuildTarget.kt @@ -15,12 +15,13 @@ import org.jetbrains.kotlin.jps.build.KotlinCompileContext import org.jetbrains.kotlin.jps.build.KotlinDirtySourceFilesHolder import org.jetbrains.kotlin.jps.incremental.JpsIncrementalCache import org.jetbrains.kotlin.jps.model.platform +import org.jetbrains.kotlin.platform.idePlatformKind class KotlinUnsupportedModuleBuildTarget( kotlinContext: KotlinCompileContext, jpsModuleBuildTarget: ModuleBuildTarget ) : KotlinModuleBuildTarget(kotlinContext, jpsModuleBuildTarget) { - val kind = module.platform?.kind?.name + val kind = module.platform?.idePlatformKind?.name private fun shouldNotBeCalled(): Nothing = error("Should not be called")