[Platform API] Remove IdePlatform, use TargetPlatform instead

This commit is contained in:
Dmitry Savvinov
2019-03-25 18:38:10 +03:00
parent 2ebdd7d2b9
commit 2d528c6396
53 changed files with 384 additions and 342 deletions
@@ -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<Module>
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<ModuleDescriptor>
get() {
val moduleInfo = getCapability(ModuleInfo.Capability)
@@ -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
@@ -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<JdkPlatform>())?.targetVersion
?: TargetPlatformVersion.NoVersion
is ScriptModuleInfo -> getLanguageSettingsForScripts(project, moduleInfo.scriptDefinition).targetPlatformVersion
is ScriptDependenciesInfo.ForFile -> getLanguageSettingsForScripts(project, moduleInfo.scriptDefinition).targetPlatformVersion
else -> TargetPlatformVersion.NoVersion
@@ -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<String>.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()
}
@@ -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<DummyLibraryProperties>("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<VirtualFile>): PersistentLibraryKind<*>? {
if (matchingResolution != null) return matchingResolution.libraryKind
return DefaultIdeTargetPlatformKindProvider.defaultPlatform.kind.resolution.libraryKind
return DefaultIdeTargetPlatformKindProvider.defaultPlatform.idePlatformKind.resolution.libraryKind
}
fun getLibraryJar(roots: Array<VirtualFile>, jarPattern: Pattern): VirtualFile? {
@@ -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<String>
): CommonCompilerArguments {
return platformKind.createArguments().also { parseCommandLineArguments(additionalArguments, it) }
return platformKind.createArguments { parseCommandLineArguments(additionalArguments, this) }
}
fun MutableMap<LanguageFeature, LanguageFeature.State>.configureCoroutinesSupport(
@@ -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<TargetPlatform> 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);
@@ -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
@@ -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<GradleSourceSetDat
?.let { findKotlinPluginVersion(it) }// ?: return null TODO: Fix in CLion or our plugin KT-27623
val platformKind = IdePlatformKindTooling.getTooling(kotlinSourceSet.platform).kind
// FIXME(dsavvinov): it seems to convert platforms back-and-forth, clean-up needed
val platform = when (platformKind) {
is JvmIdePlatformKind -> {
val target = JvmTarget.fromString(moduleData.targetCompatibility ?: "") ?: JvmTarget.DEFAULT
JvmIdePlatformKind.Platform(target)
JvmPlatforms.jvmPlatformByTargetVersion(target)
}
else -> platformKind.defaultPlatform
}
@@ -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<String> findNativeGradleBuildTasks(Collection<String> gradleTasks, String sourceSetName) {
@@ -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<String> findNativeGradleBuildTasks(Collection<String> gradleTasks, String sourceSetName) {
@@ -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<String> {
@@ -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)
@@ -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}'"
)
}
}
@@ -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)
}
@@ -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)
@@ -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())
@@ -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
}
@@ -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<Kind : IdePlatformKind<Kind>, 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
}
@@ -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<Kind : IdePlatformKind<Kind>> {
abstract val compilerPlatform: TargetPlatform
abstract val platforms: List<IdePlatform<Kind, *>>
abstract val platforms: List<TargetPlatform>
abstract val defaultPlatform: IdePlatform<Kind, *>
abstract val defaultPlatform: TargetPlatform
abstract fun platformByCompilerArguments(arguments: CommonCompilerArguments): IdePlatform<Kind, CommonCompilerArguments>?
abstract fun platformByCompilerArguments(arguments: CommonCompilerArguments): TargetPlatform?
abstract val argumentsClass: Class<out CommonCompilerArguments>
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<Kind : IdePlatformKind<Kind>> {
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 <Args : CommonCompilerArguments> platformByCompilerArguments(arguments: Args): IdePlatform<*, *>? =
fun <Args : CommonCompilerArguments> 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
}
get() = IdePlatformKind.IDE_PLATFORMS_BY_COMPILER_PLATFORMS[this] ?: error("Unknown platform $this")
@@ -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<CommonIdePlatformKind>() {
override fun platformByCompilerArguments(arguments: CommonCompilerArguments): IdePlatform<CommonIdePlatformKind, CommonCompilerArguments>? {
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<CommonIdePlatformKind, CommonCompilerArguments>() {
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
get() = this is CommonIdePlatformKind
@@ -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<JsIdePlatformKind>() {
override fun platformByCompilerArguments(arguments: CommonCompilerArguments): IdePlatform<JsIdePlatformKind, CommonCompilerArguments>? {
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<JsIdePlatformKind, K2JSCompilerArguments>() {
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
@@ -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<JvmIdePlatformKind>() {
override fun platformByCompilerArguments(arguments: CommonCompilerArguments): IdePlatform<JvmIdePlatformKind, CommonCompilerArguments>? {
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<JvmIdePlatformKind, K2JVMCompilerArguments>() {
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
@@ -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<NativeIdePlatformKind>() {
override fun platformByCompilerArguments(arguments: CommonCompilerArguments): IdePlatform<NativeIdePlatformKind, CommonCompilerArguments>? {
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<NativeIdePlatformKind, FakeK2NativeCompilerArguments>() {
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
@@ -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()
@@ -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!!)
)
}
@@ -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
}
}
}
@@ -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
@@ -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
}
@@ -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<String> {
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)
@@ -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<LibraryOrderEntry>().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<LibraryOrderEntry>().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)
}
}
@@ -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<DummyLibraryProperties>("kotlin.native"), KotlinLibraryKind {
override val compilerPlatform: TargetPlatform
get() = NativeIdePlatformKind.compilerPlatform
get() = KonanPlatforms.defaultKonanPlatform
override fun createDefaultProperties() = DummyLibraryProperties.INSTANCE!!
}
@@ -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) {
@@ -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<JvmIdePlatformKind, ?> jvm : JvmIdePlatformKind.INSTANCE.getPlatforms()) {
jvmVersionComboBox.addItem(jvm.getVersion().getDescription());
for (TargetPlatform jvm : JvmIdePlatformKind.INSTANCE.getPlatforms()) {
jvmVersionComboBox.addItem(PlatformUtilKt.subplatformOfType(jvm, JdkPlatform.class).getTargetVersion().getDescription());
}
}
@@ -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<IdePlatform<*, *>>
lateinit var targetPlatformComboBox: ComboBox<TargetPlatform>
private lateinit var projectSettingsLink: HoverHyperlinkLabel
@@ -91,7 +96,7 @@ class KotlinFacetEditorGeneralTab(
)
useProjectSettingsCheckBox = ThreeStateCheckBox("Use project settings").apply { isThirdStateEnabled = isMultiEditor }
targetPlatformComboBox = ComboBox<IdePlatform<*, *>>(IdePlatformKind.All_PLATFORMS.toTypedArray()).apply {
targetPlatformComboBox = ComboBox<TargetPlatform>(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 {
@@ -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<Boolean>("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
@@ -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()
@@ -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 {
@@ -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(
@@ -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))
}
@@ -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())
}
}
@@ -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)
@@ -300,7 +300,7 @@ private fun KotlinType.checkAccessibility(accessibleClasses: List<KtClassOrObjec
return
}
val declaration = DescriptorToSourceUtils.descriptorToDeclaration(classifierDescriptor)
if (declaration?.module?.platform?.kind?.isCommon == true) {
if (declaration?.module?.platform?.isCommon() == true) {
// Common classes are Ok again
return
}
@@ -44,6 +44,7 @@ import org.jetbrains.kotlin.platform.js.JsPlatforms
import org.jetbrains.kotlin.platform.js.isJs
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.platform.jvm.isJvm
import org.jetbrains.kotlin.platform.idePlatformKind
import org.jetbrains.kotlin.utils.PathUtil
class KotlinNonJvmSourceRootConverterProvider : ConverterProvider("kotlin-non-jvm-source-roots") {
@@ -141,7 +142,7 @@ class KotlinNonJvmSourceRootConverterProvider : ConverterProvider("kotlin-non-jv
getFacetElement(KotlinFacetType.ID)
?.getChild(JpsFacetSerializer.CONFIGURATION_TAG)
?.getFacetPlatformByConfigurationElement()
?.kind?.compilerPlatform
private fun ModuleSettings.detectPlatformByDependencies(): TargetPlatform? {
var hasCommonStdlib = false
@@ -34,8 +34,10 @@ import org.jetbrains.kotlin.idea.framework.LibraryEffectiveKindProviderKt;
import org.jetbrains.kotlin.idea.project.PlatformKt;
import org.jetbrains.kotlin.idea.util.Java9StructureUtilKt;
import org.jetbrains.kotlin.idea.versions.KotlinRuntimeLibraryUtilKt;
import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind;
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind;
import org.jetbrains.kotlin.config.JvmTarget;
import org.jetbrains.kotlin.platform.TargetPlatform;
import org.jetbrains.kotlin.platform.js.JsPlatforms;
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms;
import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleKt;
import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner;
import org.jetbrains.kotlin.utils.PathUtil;
@@ -206,7 +208,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
assertEquals(false, settings.getUseProjectSettings());
assertEquals("1.1", settings.getLanguageLevel().getDescription());
assertEquals("1.0", settings.getApiLevel().getDescription());
assertEquals(new JvmIdePlatformKind.Platform(JvmTarget.JVM_1_8), settings.getPlatform());
assertEquals(JvmPlatforms.INSTANCE.getJvm18(), settings.getPlatform());
assertEquals("1.1", arguments.getLanguageVersion());
assertEquals("1.0", arguments.getApiVersion());
assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, CoroutineSupport.byCompilerArguments(arguments));
@@ -221,7 +223,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
assertEquals(false, settings.getUseProjectSettings());
assertEquals("1.1", settings.getLanguageLevel().getDescription());
assertEquals("1.0", settings.getApiLevel().getDescription());
assertEquals(JsIdePlatformKind.Platform.INSTANCE, settings.getPlatform());
assertEquals(JsPlatforms.INSTANCE.getDefaultJsPlatform(), settings.getPlatform());
assertEquals("1.1", arguments.getLanguageVersion());
assertEquals("1.0", arguments.getApiVersion());
assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, CoroutineSupport.byCompilerArguments(arguments));
@@ -236,7 +238,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
assertEquals(false, settings.getUseProjectSettings());
assertEquals("1.1", settings.getLanguageLevel().getDescription());
assertEquals("1.0", settings.getApiLevel().getDescription());
assertEquals(new JvmIdePlatformKind.Platform(JvmTarget.JVM_1_8), settings.getPlatform());
assertEquals(JvmPlatforms.INSTANCE.getJvm18(), settings.getPlatform());
assertEquals("1.1", arguments.getLanguageVersion());
assertEquals("1.0", arguments.getApiVersion());
assertEquals(LanguageFeature.State.ENABLED, CoroutineSupport.byCompilerArguments(arguments));
@@ -251,7 +253,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
assertEquals(false, settings.getUseProjectSettings());
assertEquals("1.1", settings.getLanguageLevel().getDescription());
assertEquals("1.0", settings.getApiLevel().getDescription());
assertEquals(JsIdePlatformKind.Platform.INSTANCE, settings.getPlatform());
assertEquals(JsPlatforms.INSTANCE.getDefaultJsPlatform(), settings.getPlatform());
assertEquals("1.1", arguments.getLanguageVersion());
assertEquals("1.0", arguments.getApiVersion());
assertEquals(LanguageFeature.State.ENABLED_WITH_ERROR, CoroutineSupport.byCompilerArguments(arguments));
@@ -266,7 +268,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
assertEquals(false, settings.getUseProjectSettings());
assertEquals("1.1", settings.getLanguageLevel().getDescription());
assertEquals("1.0", settings.getApiLevel().getDescription());
assertEquals(new JvmIdePlatformKind.Platform(JvmTarget.JVM_1_8), settings.getPlatform());
assertEquals(JvmPlatforms.INSTANCE.getJvm18(), settings.getPlatform());
assertEquals("1.1", arguments.getLanguageVersion());
assertEquals("1.0", arguments.getApiVersion());
assertEquals(LanguageFeature.State.ENABLED, CoroutineSupport.byCompilerArguments(arguments));
@@ -276,7 +278,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
public void testJvmProjectWithJvmTarget11() {
KotlinFacetSettings settings = KotlinFacetSettingsProvider.Companion.getInstance(myProject).getInitializedSettings(getModule());
assertEquals(new JvmIdePlatformKind.Platform(JvmTarget.JVM_11), settings.getPlatform());
assertEquals(JvmPlatforms.INSTANCE.jvmPlatformByTargetVersion(JvmTarget.JVM_11), settings.getPlatform());
}
public void testImplementsDependency() {
@@ -342,7 +344,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
IdeModifiableModelsProviderImpl modelsProvider = new IdeModifiableModelsProviderImpl(getProject());
try {
KotlinFacet facet = FacetUtilsKt.getOrCreateFacet(getModule(), modelsProvider, false, null, false);
JvmIdePlatformKind.Platform platform = new JvmIdePlatformKind.Platform(jvmTarget);
TargetPlatform platform = JvmPlatforms.INSTANCE.jvmPlatformByTargetVersion(jvmTarget);
FacetUtilsKt.configureFacet(
facet,
"1.1",
@@ -370,7 +372,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
}
public void testProjectWithoutFacetWithJvmTarget18() {
assertEquals(new JvmIdePlatformKind.Platform(JvmTarget.JVM_1_8), PlatformKt.getPlatform(getModule()));
assertEquals(JvmPlatforms.INSTANCE.getJvm18(), PlatformKt.getPlatform(getModule()));
}
private static class LibraryCountingRootPolicy extends RootPolicy<Integer> {
@@ -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 {
@@ -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<String>): 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<String>): 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")
}
@@ -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
) {
@@ -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 -> {
@@ -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 {
@@ -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
@@ -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 {
@@ -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<BuildMetaInfo>(kotlinContext, jpsModuleBuildTarget) {
val kind = module.platform?.kind?.name
val kind = module.platform?.idePlatformKind?.name
private fun shouldNotBeCalled(): Nothing = error("Should not be called")