[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 val Module.isMPPModule: Boolean
get() { get() {
val settings = facetSettings ?: return false val settings = facetSettings ?: return false
return settings.platform.isCommon || return settings.platform.isCommon() ||
settings.implementedModuleNames.isNotEmpty() || settings.implementedModuleNames.isNotEmpty() ||
settings.kind.isNewMPP settings.kind.isNewMPP
} }
@@ -68,7 +68,7 @@ val Module.implementedModules: List<Module>
CachedValueProvider.Result( CachedValueProvider.Result(
if (isNewMPPModule) { if (isNewMPPModule) {
rootManager.dependencies.filter { rootManager.dependencies.filter {
it.isNewMPPModule && it.platform is CommonIdePlatformKind.Platform && it.externalProjectId == externalProjectId it.isNewMPPModule && it.platform.isCommon() && it.externalProjectId == externalProjectId
} }
} else { } else {
val modelsProvider = IdeModelsProviderImpl(project) 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> val ModuleDescriptor.implementedDescriptors: List<ModuleDescriptor>
get() { get() {
val moduleInfo = getCapability(ModuleInfo.Capability) val moduleInfo = getCapability(ModuleInfo.Capability)
@@ -98,7 +98,7 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService {
): ProjectResolutionFacade { ): ProjectResolutionFacade {
val sdk = dependenciesModuleInfo.sdk val sdk = dependenciesModuleInfo.sdk
val platform = /* Fallback to Common platform in CIDR (Java is not supported there) */ 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( val settings = PlatformAnalysisSettings(
platform, sdk, true, platform, sdk, true,
LanguageFeature.ReleaseCoroutines.defaultState == LanguageFeature.State.ENABLED 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.languageVersionSettings
import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.project.platform
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition 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 import org.jetbrains.kotlin.utils.Jsr305State
object IDELanguageSettingsProvider : LanguageSettingsProvider { 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 // TODO(dsavvinov): get rid of this method; instead store proper instance of TargetPlatformVersion in platform-instance
override fun getTargetPlatform(moduleInfo: ModuleInfo, project: Project): TargetPlatformVersion = override fun getTargetPlatform(moduleInfo: ModuleInfo, project: Project): TargetPlatformVersion =
when (moduleInfo) { 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 ScriptModuleInfo -> getLanguageSettingsForScripts(project, moduleInfo.scriptDefinition).targetPlatformVersion
is ScriptDependenciesInfo.ForFile -> getLanguageSettingsForScripts(project, moduleInfo.scriptDefinition).targetPlatformVersion is ScriptDependenciesInfo.ForFile -> getLanguageSettingsForScripts(project, moduleInfo.scriptDefinition).targetPlatformVersion
else -> TargetPlatformVersion.NoVersion else -> TargetPlatformVersion.NoVersion
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.platform.IdePlatformKind import org.jetbrains.kotlin.platform.IdePlatformKind
import org.jetbrains.kotlin.platform.orDefault import org.jetbrains.kotlin.platform.orDefault
import org.jetbrains.kotlin.config.VersionView import org.jetbrains.kotlin.config.VersionView
import org.jetbrains.kotlin.platform.idePlatformKind
interface KotlinVersionInfoProvider { interface KotlinVersionInfoProvider {
companion object { companion object {
@@ -92,7 +93,7 @@ private fun Iterable<String>.addReleaseVersionIfNecessary(shouldAdd: Boolean): I
fun getRuntimeLibraryVersion(module: Module): String? { fun getRuntimeLibraryVersion(module: Module): String? {
val targetPlatform = KotlinFacetSettingsProvider.getInstance(module.project).getInitializedSettings(module).platform 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() 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.CommonPlatforms
import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider
import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.idePlatformKind
import org.jetbrains.kotlin.platform.js.JsPlatforms import org.jetbrains.kotlin.platform.js.JsPlatforms
import org.jetbrains.kotlin.utils.PathUtil import org.jetbrains.kotlin.utils.PathUtil
import java.util.jar.Attributes import java.util.jar.Attributes
@@ -57,12 +58,12 @@ object CommonLibraryKind : PersistentLibraryKind<DummyLibraryProperties>("kotlin
val PersistentLibraryKind<*>?.platform: TargetPlatform val PersistentLibraryKind<*>?.platform: TargetPlatform
get() = when (this) { get() = when (this) {
is KotlinLibraryKind -> this.compilerPlatform is KotlinLibraryKind -> this.compilerPlatform
else -> DefaultIdeTargetPlatformKindProvider.defaultCompilerPlatform else -> DefaultIdeTargetPlatformKindProvider.defaultPlatform
} }
fun getLibraryPlatform(project: Project, library: Library): TargetPlatform { fun getLibraryPlatform(project: Project, library: Library): TargetPlatform {
if (library !is LibraryEx) return DefaultIdeTargetPlatformKindProvider.defaultCompilerPlatform if (library !is LibraryEx) return DefaultIdeTargetPlatformKindProvider.defaultPlatform
if (library.isDisposed) return DefaultIdeTargetPlatformKindProvider.defaultCompilerPlatform if (library.isDisposed) return DefaultIdeTargetPlatformKindProvider.defaultPlatform
return library.effectiveKind(project).platform return library.effectiveKind(project).platform
} }
@@ -87,7 +88,7 @@ fun detectLibraryKind(roots: Array<VirtualFile>): PersistentLibraryKind<*>? {
if (matchingResolution != null) return matchingResolution.libraryKind 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? { 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.idea.facet.getLibraryLanguageLevel
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider 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.platform.idePlatformKind
import org.jetbrains.kotlin.platform.impl.isCommon import org.jetbrains.kotlin.platform.isCommon
import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.UserDataProperty import org.jetbrains.kotlin.psi.UserDataProperty
import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.platform.TargetPlatform 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 org.jetbrains.kotlin.utils.Jsr305State
import java.io.File import java.io.File
@@ -64,7 +65,7 @@ var KtFile.forcedTargetPlatform: TargetPlatform? by UserDataProperty(Key.create(
fun Module.getAndCacheLanguageLevelByDependencies(): LanguageVersion { fun Module.getAndCacheLanguageLevelByDependencies(): LanguageVersion {
val facetSettings = KotlinFacetSettingsProvider.getInstance(project).getInitializedSettings(this) 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 // Preserve inferred version in facet/project settings
if (facetSettings.useProjectSettings) { if (facetSettings.useProjectSettings) {
@@ -196,7 +197,7 @@ private fun Module.computeLanguageVersionSettings(): LanguageVersionSettings {
val languageFeatures = facetSettings.mergedCompilerArguments?.configureLanguageFeatures(MessageCollector.NONE)?.apply { val languageFeatures = facetSettings.mergedCompilerArguments?.configureLanguageFeatures(MessageCollector.NONE)?.apply {
configureCoroutinesSupport(facetSettings.coroutineSupport, languageVersion) configureCoroutinesSupport(facetSettings.coroutineSupport, languageVersion)
configureMultiplatformSupport(facetSettings.platform?.kind, this@computeLanguageVersionSettings) configureMultiplatformSupport(facetSettings.platform?.idePlatformKind, this@computeLanguageVersionSettings)
configureNewInferenceSupportInIDE(project) configureNewInferenceSupportInIDE(project)
}.orEmpty() }.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 get() = KotlinFacetSettingsProvider.getInstance(project).getInitializedSettings(this).platform ?: project.platform
// FIXME(dsavvinov): this logic is clearly wrong in MPP environment; review and fix // FIXME(dsavvinov): this logic is clearly wrong in MPP environment; review and fix
val Project.platform: IdePlatform<*, *>? val Project.platform: TargetPlatform?
get() { get() {
val jvmTarget = Kotlin2JvmCompilerArgumentsHolder.getInstance(this).settings.jvmTarget ?: return null val jvmTarget = Kotlin2JvmCompilerArgumentsHolder.getInstance(this).settings.jvmTarget ?: return null
val version = JvmTarget.fromString(jvmTarget) ?: return null val version = JvmTarget.fromString(jvmTarget) ?: return null
return JvmIdePlatformKind.Platform(version) return JvmPlatforms.jvmPlatformByTargetVersion(version)
} }
private val Module.implementsCommonModule: Boolean private val Module.implementsCommonModule: Boolean
get() = !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 } && ModuleRootManager.getInstance(this).dependencies.any { it.platform.isCommon() }
private fun parseArguments( private fun parseArguments(
platformKind: IdePlatform<*, *>, platformKind: TargetPlatform,
additionalArguments: List<String> additionalArguments: List<String>
): CommonCompilerArguments { ): CommonCompilerArguments {
return platformKind.createArguments().also { parseCommandLineArguments(additionalArguments, it) } return platformKind.createArguments { parseCommandLineArguments(additionalArguments, this) }
} }
fun MutableMap<LanguageFeature, LanguageFeature.State>.configureCoroutinesSupport( 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.CachedValueProvider;
import com.intellij.psi.util.CachedValuesManager; import com.intellij.psi.util.CachedValuesManager;
import org.jetbrains.annotations.NotNull; 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.IdePlatformKindUtil;
import org.jetbrains.kotlin.platform.TargetPlatform; import org.jetbrains.kotlin.platform.TargetPlatform;
@@ -38,8 +38,8 @@ public class ProjectStructureUtil {
CachedValue<TargetPlatform> result = module.getUserData(PLATFORM_FOR_MODULE); CachedValue<TargetPlatform> result = module.getUserData(PLATFORM_FOR_MODULE);
if (result == null) { if (result == null) {
result = CachedValuesManager.getManager(module.getProject()).createCachedValue(() -> { result = CachedValuesManager.getManager(module.getProject()).createCachedValue(() -> {
IdePlatform<?, ?> platform = IdePlatformKindUtil.orDefault(PlatformKt.getPlatform(module)); TargetPlatform platform = DefaultIdeTargetPlatformKindProviderKt.orDefault(PlatformKt.getPlatform(module));
return CachedValueProvider.Result.create(platform.getKind().getCompilerPlatform(), return CachedValueProvider.Result.create(platform,
ProjectRootModificationTracker.getInstance(module.getProject())); ProjectRootModificationTracker.getInstance(module.getProject()));
}, false); }, false);
@@ -25,7 +25,6 @@ import com.intellij.psi.PsiFile;
import kotlin.collections.CollectionsKt; import kotlin.collections.CollectionsKt;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider; 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.jvm.JvmPlatforms; import org.jetbrains.kotlin.platform.jvm.JvmPlatforms;
import org.jetbrains.kotlin.psi.KtCodeFragment; import org.jetbrains.kotlin.psi.KtCodeFragment;
@@ -66,8 +65,7 @@ public class TargetPlatformDetector {
KotlinScriptDefinition scriptDefinition = DefinitionsKt.scriptDefinition(file); KotlinScriptDefinition scriptDefinition = DefinitionsKt.scriptDefinition(file);
if (scriptDefinition != null) { if (scriptDefinition != null) {
String platformNameFromScriptDefinition = scriptDefinition.getPlatform(); String platformNameFromScriptDefinition = scriptDefinition.getPlatform();
for (IdePlatform platform : IdePlatformKind.Companion.getAll_PLATFORMS()) { for (TargetPlatform compilerPlatform : IdePlatformKind.Companion.getAll_PLATFORMS()) {
TargetPlatform compilerPlatform = platform.getKind().getCompilerPlatform();
// FIXME(dsavvinov): get rid of matching by name // FIXME(dsavvinov): get rid of matching by name
SimplePlatform simplePlatform = CollectionsKt.single(compilerPlatform); SimplePlatform simplePlatform = CollectionsKt.single(compilerPlatform);
if (simplePlatform.getPlatformName().equals(platformNameFromScriptDefinition)) { if (simplePlatform.getPlatformName().equals(platformNameFromScriptDefinition)) {
@@ -85,7 +83,7 @@ public class TargetPlatformDetector {
} }
} }
return DefaultIdeTargetPlatformKindProvider.Companion.getDefaultCompilerPlatform(); return DefaultIdeTargetPlatformKindProvider.Companion.getDefaultPlatform();
} }
@NotNull @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.platform.IdePlatformKindTooling
import org.jetbrains.kotlin.idea.roots.migrateNonJvmSourceFolders import org.jetbrains.kotlin.idea.roots.migrateNonJvmSourceFolders
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind 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.BuildScriptClasspathData
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData 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 ?.let { findKotlinPluginVersion(it) }// ?: return null TODO: Fix in CLion or our plugin KT-27623
val platformKind = IdePlatformKindTooling.getTooling(kotlinSourceSet.platform).kind val platformKind = IdePlatformKindTooling.getTooling(kotlinSourceSet.platform).kind
// FIXME(dsavvinov): it seems to convert platforms back-and-forth, clean-up needed
val platform = when (platformKind) { val platform = when (platformKind) {
is JvmIdePlatformKind -> { is JvmIdePlatformKind -> {
val target = JvmTarget.fromString(moduleData.targetCompatibility ?: "") ?: JvmTarget.DEFAULT val target = JvmTarget.fromString(moduleData.targetCompatibility ?: "") ?: JvmTarget.DEFAULT
JvmIdePlatformKind.Platform(target) JvmPlatforms.jvmPlatformByTargetVersion(target)
} }
else -> platformKind.defaultPlatform else -> platformKind.defaultPlatform
} }
@@ -36,9 +36,14 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.config.KotlinFacetSettings; import org.jetbrains.kotlin.config.KotlinFacetSettings;
import org.jetbrains.kotlin.idea.facet.KotlinFacet; 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.CommonIdePlatformUtil;
import org.jetbrains.kotlin.platform.impl.NativeIdePlatformUtil; 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.CachedModuleDataFinder;
import org.jetbrains.plugins.gradle.execution.build.GradleProjectTaskRunner; import org.jetbrains.plugins.gradle.execution.build.GradleProjectTaskRunner;
import org.jetbrains.plugins.gradle.service.project.GradleBuildSrcProjectsResolver; import org.jetbrains.plugins.gradle.service.project.GradleBuildSrcProjectsResolver;
@@ -292,10 +297,10 @@ class KotlinMPPGradleProjectTaskRunner extends ProjectTaskRunner
final KotlinFacet kotlinFacet = KotlinFacet.Companion.get(module); final KotlinFacet kotlinFacet = KotlinFacet.Companion.get(module);
if (kotlinFacet == null) return false; if (kotlinFacet == null) return false;
final IdePlatform platform = kotlinFacet.getConfiguration().getSettings().getPlatform(); final TargetPlatform platform = kotlinFacet.getConfiguration().getSettings().getPlatform();
if (platform == null) return false; if (platform == null) return false;
return NativeIdePlatformUtil.isKotlinNative(platform); return KonanPlatformKt.isNative(platform);
} }
private static boolean isCommonProductionSourceModule(Module module) { private static boolean isCommonProductionSourceModule(Module module) {
@@ -305,10 +310,10 @@ class KotlinMPPGradleProjectTaskRunner extends ProjectTaskRunner
final KotlinFacetSettings facetSettings = kotlinFacet.getConfiguration().getSettings(); final KotlinFacetSettings facetSettings = kotlinFacet.getConfiguration().getSettings();
if (facetSettings.isTestModule()) return false; if (facetSettings.isTestModule()) return false;
final IdePlatform platform = facetSettings.getPlatform(); final TargetPlatform platform = facetSettings.getPlatform();
if (platform == null) return false; if (platform == null) return false;
return CommonIdePlatformUtil.isCommon(platform); return TargetPlatformKt.isCommon(platform);
} }
private static Collection<String> findNativeGradleBuildTasks(Collection<String> gradleTasks, String sourceSetName) { 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.annotations.Nullable;
import org.jetbrains.kotlin.config.KotlinFacetSettings; import org.jetbrains.kotlin.config.KotlinFacetSettings;
import org.jetbrains.kotlin.idea.facet.KotlinFacet; 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.CommonIdePlatformUtil;
import org.jetbrains.kotlin.platform.impl.NativeIdePlatformUtil; 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.CachedModuleDataFinder;
import org.jetbrains.plugins.gradle.execution.build.GradleProjectTaskRunner; import org.jetbrains.plugins.gradle.execution.build.GradleProjectTaskRunner;
import org.jetbrains.plugins.gradle.service.project.GradleBuildSrcProjectsResolver; import org.jetbrains.plugins.gradle.service.project.GradleBuildSrcProjectsResolver;
@@ -291,10 +296,10 @@ class KotlinMPPGradleProjectTaskRunner extends ProjectTaskRunner
final KotlinFacet kotlinFacet = KotlinFacet.Companion.get(module); final KotlinFacet kotlinFacet = KotlinFacet.Companion.get(module);
if (kotlinFacet == null) return false; if (kotlinFacet == null) return false;
final IdePlatform platform = kotlinFacet.getConfiguration().getSettings().getPlatform(); final TargetPlatform platform = kotlinFacet.getConfiguration().getSettings().getPlatform();
if (platform == null) return false; if (platform == null) return false;
return NativeIdePlatformUtil.isKotlinNative(platform); return KonanPlatformKt.isNative(platform);
} }
private static boolean isCommonProductionSourceModule(Module module) { private static boolean isCommonProductionSourceModule(Module module) {
@@ -304,10 +309,10 @@ class KotlinMPPGradleProjectTaskRunner extends ProjectTaskRunner
final KotlinFacetSettings facetSettings = kotlinFacet.getConfiguration().getSettings(); final KotlinFacetSettings facetSettings = kotlinFacet.getConfiguration().getSettings();
if (facetSettings.isTestModule()) return false; if (facetSettings.isTestModule()) return false;
final IdePlatform platform = facetSettings.getPlatform(); final TargetPlatform platform = facetSettings.getPlatform();
if (platform == null) return false; if (platform == null) return false;
return CommonIdePlatformUtil.isCommon(platform); return TargetPlatformKt.isCommon(platform);
} }
private static Collection<String> findNativeGradleBuildTasks(Collection<String> gradleTasks, String sourceSetName) { 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.config.KotlinFacetSettingsProvider
import org.jetbrains.kotlin.idea.configuration.KotlinTargetData import org.jetbrains.kotlin.idea.configuration.KotlinTargetData
import org.jetbrains.kotlin.platform.impl.isCommon 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.execution.test.runner.GradleTestTasksProvider
import org.jetbrains.plugins.gradle.service.project.GradleProjectResolverUtil import org.jetbrains.plugins.gradle.service.project.GradleProjectResolverUtil
import org.jetbrains.plugins.gradle.util.GradleConstants import org.jetbrains.plugins.gradle.util.GradleConstants
@@ -51,7 +52,7 @@ class KotlinMPPGradleTestTasksProvider : GradleTestTasksProvider {
private fun isTestCommonModule(module: Module): Boolean { private fun isTestCommonModule(module: Module): Boolean {
val settings = KotlinFacetSettingsProvider.getInstance(module.project).getInitializedSettings(module) 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> { 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.config.*
import org.jetbrains.kotlin.idea.codeInsight.gradle.ExternalSystemImportingTestCase import org.jetbrains.kotlin.idea.codeInsight.gradle.ExternalSystemImportingTestCase
import org.jetbrains.kotlin.idea.codeInsight.gradle.MultiplePluginVersionGradleImportingTestCase import org.jetbrains.kotlin.idea.codeInsight.gradle.MultiplePluginVersionGradleImportingTestCase
import org.jetbrains.kotlin.platform.impl.CommonIdePlatformKind import org.jetbrains.kotlin.platform.CommonPlatforms
import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind import org.jetbrains.kotlin.platform.js.JsPlatforms
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.junit.After import org.junit.After
import org.junit.Before import org.junit.Before
@@ -60,7 +60,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
module("project") module("project")
module("app") module("app")
module("app_commonMain") { module("app_commonMain") {
platform(CommonIdePlatformKind.Platform) platform(CommonPlatforms.defaultCommonPlatform)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE)
moduleDependency("lib_commonMain", DependencyScope.COMPILE) moduleDependency("lib_commonMain", DependencyScope.COMPILE)
sourceFolder("app/src/commonMain/kotlin", SourceKotlinRootType) sourceFolder("app/src/commonMain/kotlin", SourceKotlinRootType)
@@ -68,7 +68,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
inheritProjectOutput() inheritProjectOutput()
} }
module("app_commonTest") { module("app_commonTest") {
platform(CommonIdePlatformKind.Platform) platform(CommonPlatforms.defaultCommonPlatform)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST)
moduleDependency("lib_commonMain", DependencyScope.TEST) moduleDependency("lib_commonMain", DependencyScope.TEST)
moduleDependency("app_commonMain", DependencyScope.TEST) moduleDependency("app_commonMain", DependencyScope.TEST)
@@ -77,7 +77,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
inheritProjectOutput() inheritProjectOutput()
} }
module("app_jsMain") { 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-js:${kotlinVersion()}", DependencyScope.COMPILE)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE)
moduleDependency("lib_jsMain", DependencyScope.COMPILE) moduleDependency("lib_jsMain", DependencyScope.COMPILE)
@@ -88,7 +88,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
outputPath("app/build/classes/kotlin/js/main", true) outputPath("app/build/classes/kotlin/js/main", true)
} }
module("app_jsTest") { 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-js:${kotlinVersion()}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST)
moduleDependency("lib_jsMain", DependencyScope.TEST) moduleDependency("lib_jsMain", DependencyScope.TEST)
@@ -101,7 +101,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
outputPath("app/build/classes/kotlin/js/test", false) outputPath("app/build/classes/kotlin/js/test", false)
} }
module("app_jvmMain") { 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:${kotlinVersion()}", DependencyScope.COMPILE)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE)
libraryDependency("Gradle: org.jetbrains:annotations:13.0", 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) outputPath("app/build/classes/kotlin/jvm/main", true)
} }
module("app_jvmTest") { 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:${kotlinVersion()}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains:annotations:13.0", 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) outputPath("app/build/classes/kotlin/jvm/test", false)
} }
module("app_main") { 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:${kotlinVersion()}", DependencyScope.COMPILE)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE)
libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.COMPILE) libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.COMPILE)
@@ -140,7 +140,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
inheritProjectOutput() inheritProjectOutput()
} }
module("app_test") { 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:${kotlinVersion()}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.TEST) libraryDependency("Gradle: org.jetbrains:annotations:13.0", DependencyScope.TEST)
@@ -153,14 +153,14 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
} }
module("lib") module("lib")
module("lib_commonMain") { module("lib_commonMain") {
platform(CommonIdePlatformKind.Platform) platform(CommonPlatforms.defaultCommonPlatform)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE)
sourceFolder("lib/src/commonMain/kotlin", SourceKotlinRootType) sourceFolder("lib/src/commonMain/kotlin", SourceKotlinRootType)
sourceFolder("lib/src/commonMain/resources", ResourceKotlinRootType) sourceFolder("lib/src/commonMain/resources", ResourceKotlinRootType)
inheritProjectOutput() inheritProjectOutput()
} }
module("lib_commonTest") { module("lib_commonTest") {
platform(CommonIdePlatformKind.Platform) platform(CommonPlatforms.defaultCommonPlatform)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST)
moduleDependency("lib_commonMain", DependencyScope.TEST) moduleDependency("lib_commonMain", DependencyScope.TEST)
sourceFolder("lib/src/commonTest/kotlin", TestSourceKotlinRootType) sourceFolder("lib/src/commonTest/kotlin", TestSourceKotlinRootType)
@@ -168,7 +168,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
inheritProjectOutput() inheritProjectOutput()
} }
module("lib_jsMain") { 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-js:${kotlinVersion()}", DependencyScope.COMPILE)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE)
moduleDependency("lib_commonMain", DependencyScope.COMPILE) moduleDependency("lib_commonMain", DependencyScope.COMPILE)
@@ -177,7 +177,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
outputPath("lib/build/classes/kotlin/js/main", true) outputPath("lib/build/classes/kotlin/js/main", true)
} }
module("lib_jsTest") { 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-js:${kotlinVersion()}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST)
moduleDependency("lib_commonMain", DependencyScope.TEST) moduleDependency("lib_commonMain", DependencyScope.TEST)
@@ -188,7 +188,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
outputPath("lib/build/classes/kotlin/js/test", false) outputPath("lib/build/classes/kotlin/js/test", false)
} }
module("lib_jvmMain") { 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:${kotlinVersion()}", DependencyScope.COMPILE)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.COMPILE)
libraryDependency("Gradle: org.jetbrains:annotations:13.0", 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) outputPath("lib/build/classes/kotlin/jvm/main", true)
} }
module("lib_jvmTest") { 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:${kotlinVersion()}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST) libraryDependency("Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:${kotlinVersion()}", DependencyScope.TEST)
libraryDependency("Gradle: org.jetbrains:annotations:13.0", 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.facet.KotlinFacet
import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.project.languageVersionSettings
import org.jetbrains.kotlin.idea.project.platform 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 { class MessageCollector {
private val builder = StringBuilder() private val builder = StringBuilder()
@@ -109,11 +110,11 @@ class ModuleInfo(
} }
} }
fun platform(platform: IdePlatform<*, *>) { fun platform(platform: TargetPlatform) {
val actualPlatform = module.platform val actualPlatform = module.platform
if (actualPlatform != platform) { if (actualPlatform != platform) {
projectInfo.messageCollector.report( 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.impl.isJavaScript
import org.jetbrains.kotlin.platform.js.JsPlatforms import org.jetbrains.kotlin.platform.js.JsPlatforms
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms 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.jetbrains.kotlin.test.KotlinTestUtils
import org.junit.Assert import org.junit.Assert
import org.junit.Ignore import org.junit.Ignore
@@ -104,7 +106,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
Assert.assertEquals("1.1", apiLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString)
Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion)
Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) 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("1.7", (compilerArguments as K2JVMCompilerArguments).jvmTarget)
Assert.assertEquals( Assert.assertEquals(
"-Xdump-declarations-to=tmp -Xsingle-module", "-Xdump-declarations-to=tmp -Xsingle-module",
@@ -116,7 +118,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
Assert.assertEquals("1.0", apiLevel!!.versionString) Assert.assertEquals("1.0", apiLevel!!.versionString)
Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion)
Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) 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("1.6", (compilerArguments as K2JVMCompilerArguments).jvmTarget)
Assert.assertEquals( Assert.assertEquals(
"-Xdump-declarations-to=tmpTest", "-Xdump-declarations-to=tmpTest",
@@ -160,7 +162,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
with(facetSettings) { with(facetSettings) {
Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", languageLevel!!.versionString)
Assert.assertEquals("1.1", apiLevel!!.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("1.7", (compilerArguments as K2JVMCompilerArguments).jvmTarget)
Assert.assertEquals( Assert.assertEquals(
"-Xdump-declarations-to=tmp -Xsingle-module", "-Xdump-declarations-to=tmp -Xsingle-module",
@@ -170,7 +172,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
with(testFacetSettings) { with(testFacetSettings) {
Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", languageLevel!!.versionString)
Assert.assertEquals("1.0", apiLevel!!.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("1.6", (compilerArguments as K2JVMCompilerArguments).jvmTarget)
Assert.assertEquals( Assert.assertEquals(
"-Xdump-declarations-to=tmpTest", "-Xdump-declarations-to=tmpTest",
@@ -204,7 +206,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
with(facetSettings("project_myMain")) { with(facetSettings("project_myMain")) {
Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", languageLevel!!.versionString)
Assert.assertEquals("1.1", apiLevel!!.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("1.7", (compilerArguments as K2JVMCompilerArguments).jvmTarget)
Assert.assertEquals( Assert.assertEquals(
"-Xdump-declarations-to=tmp -Xsingle-module", "-Xdump-declarations-to=tmp -Xsingle-module",
@@ -214,7 +216,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
with(facetSettings("project_myTest")) { with(facetSettings("project_myTest")) {
Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", languageLevel!!.versionString)
Assert.assertEquals("1.0", apiLevel!!.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("1.6", (compilerArguments as K2JVMCompilerArguments).jvmTarget)
Assert.assertEquals( Assert.assertEquals(
"-Xdump-declarations-to=tmpTest", "-Xdump-declarations-to=tmpTest",
@@ -250,7 +252,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
with(facetSettings("project_myMain")) { with(facetSettings("project_myMain")) {
Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", languageLevel!!.versionString)
Assert.assertEquals("1.1", apiLevel!!.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("1.7", (compilerArguments as K2JVMCompilerArguments).jvmTarget)
Assert.assertEquals( Assert.assertEquals(
"-Xdump-declarations-to=tmp -Xsingle-module", "-Xdump-declarations-to=tmp -Xsingle-module",
@@ -260,7 +262,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
with(facetSettings("project_myTest")) { with(facetSettings("project_myTest")) {
Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", languageLevel!!.versionString)
Assert.assertEquals("1.0", apiLevel!!.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("1.6", (compilerArguments as K2JVMCompilerArguments).jvmTarget)
Assert.assertEquals( Assert.assertEquals(
"-Xdump-declarations-to=tmpTest", "-Xdump-declarations-to=tmpTest",
@@ -316,7 +318,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
Assert.assertEquals("1.1", apiLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString)
Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion)
Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion)
Assert.assertTrue(platform.isJavaScript) Assert.assertTrue(platform.isJs())
with(compilerArguments as K2JSCompilerArguments) { with(compilerArguments as K2JSCompilerArguments) {
Assert.assertEquals(true, sourceMap) Assert.assertEquals(true, sourceMap)
Assert.assertEquals("plain", moduleKind) Assert.assertEquals("plain", moduleKind)
@@ -332,7 +334,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
Assert.assertEquals("1.0", apiLevel!!.versionString) Assert.assertEquals("1.0", apiLevel!!.versionString)
Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion)
Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion)
Assert.assertTrue(platform.isJavaScript) Assert.assertTrue(platform.isJs())
with(compilerArguments as K2JSCompilerArguments) { with(compilerArguments as K2JSCompilerArguments) {
Assert.assertEquals(false, sourceMap) Assert.assertEquals(false, sourceMap)
Assert.assertEquals("umd", moduleKind) Assert.assertEquals("umd", moduleKind)
@@ -378,7 +380,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
with(facetSettings) { with(facetSettings) {
Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", languageLevel!!.versionString)
Assert.assertEquals("1.1", apiLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString)
Assert.assertTrue(platform.isJavaScript) Assert.assertTrue(platform.isJs())
} }
val rootManager = ModuleRootManager.getInstance(getModule("project_main")) val rootManager = ModuleRootManager.getInstance(getModule("project_main"))
@@ -416,7 +418,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
with(facetSettings("project_myMain")) { with(facetSettings("project_myMain")) {
Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", languageLevel!!.versionString)
Assert.assertEquals("1.1", apiLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString)
Assert.assertTrue(platform.isJavaScript) Assert.assertTrue(platform.isJs())
with(compilerArguments as K2JSCompilerArguments) { with(compilerArguments as K2JSCompilerArguments) {
Assert.assertEquals(true, sourceMap) Assert.assertEquals(true, sourceMap)
Assert.assertEquals("plain", moduleKind) Assert.assertEquals("plain", moduleKind)
@@ -430,7 +432,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
with(facetSettings("project_myTest")) { with(facetSettings("project_myTest")) {
Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", languageLevel!!.versionString)
Assert.assertEquals("1.0", apiLevel!!.versionString) Assert.assertEquals("1.0", apiLevel!!.versionString)
Assert.assertTrue(platform.isJavaScript) Assert.assertTrue(platform.isJs())
with(compilerArguments as K2JSCompilerArguments) { with(compilerArguments as K2JSCompilerArguments) {
Assert.assertEquals(false, sourceMap) Assert.assertEquals(false, sourceMap)
Assert.assertEquals("umd", moduleKind) Assert.assertEquals("umd", moduleKind)
@@ -467,7 +469,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
importProject() importProject()
with(facetSettings) { with(facetSettings) {
Assert.assertTrue(platform.isJavaScript) Assert.assertTrue(platform.isJs())
} }
} }
@@ -479,7 +481,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
with(facetSettings) { with(facetSettings) {
Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", languageLevel!!.versionString)
Assert.assertEquals("1.1", apiLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString)
Assert.assertEquals(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6), platform) Assert.assertEquals(JvmPlatforms.jvm16, platform)
} }
Assert.assertEquals( Assert.assertEquals(
@@ -508,7 +510,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
with(facetSettings) { with(facetSettings) {
Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", languageLevel!!.versionString)
Assert.assertEquals("1.1", apiLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString)
Assert.assertTrue(platform.isJavaScript) Assert.assertTrue(platform.isJs())
} }
val rootManager = ModuleRootManager.getInstance(getModule("project_main")) val rootManager = ModuleRootManager.getInstance(getModule("project_main"))
@@ -542,7 +544,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
with(facetSettings) { with(facetSettings) {
Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", languageLevel!!.versionString)
Assert.assertEquals("1.1", apiLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString)
Assert.assertTrue(platform.isCommon) Assert.assertTrue(platform.isCommon())
} }
val rootManager = ModuleRootManager.getInstance(getModule("project_main")) val rootManager = ModuleRootManager.getInstance(getModule("project_main"))
@@ -575,7 +577,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
with(facetSettings("project")) { with(facetSettings("project")) {
Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", languageLevel!!.versionString)
Assert.assertEquals("1.1", apiLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString)
Assert.assertTrue(platform.isCommon) Assert.assertTrue(platform.isCommon())
} }
val rootManager = ModuleRootManager.getInstance(getModule("project")) val rootManager = ModuleRootManager.getInstance(getModule("project"))
@@ -603,7 +605,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
with(facetSettings) { with(facetSettings) {
Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", languageLevel!!.versionString)
Assert.assertEquals("1.1", apiLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString)
Assert.assertEquals(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6), platform) Assert.assertEquals(JvmPlatforms.jvm16, platform)
} }
Assert.assertEquals( Assert.assertEquals(
@@ -632,7 +634,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
with(facetSettings) { with(facetSettings) {
Assert.assertEquals("1.1", languageLevel!!.versionString) Assert.assertEquals("1.1", languageLevel!!.versionString)
Assert.assertEquals("1.1", apiLevel!!.versionString) Assert.assertEquals("1.1", apiLevel!!.versionString)
Assert.assertTrue(platform.isJavaScript) Assert.assertTrue(platform.isJs())
} }
Assert.assertEquals( Assert.assertEquals(
@@ -721,7 +723,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
importProject() importProject()
with(facetSettings("js-module")) { with(facetSettings("js-module")) {
Assert.assertTrue(platform.isJavaScript) Assert.assertTrue(platform.isJs())
} }
val rootManager = ModuleRootManager.getInstance(getModule("js-module")) val rootManager = ModuleRootManager.getInstance(getModule("js-module"))
@@ -871,7 +873,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
Assert.assertEquals("1.0", apiLevel!!.versionString) Assert.assertEquals("1.0", apiLevel!!.versionString)
Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion)
Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion)
Assert.assertTrue(platform.isCommon) Assert.assertTrue(platform.isCommon())
Assert.assertEquals("my/classpath", (compilerArguments as K2MetadataCompilerArguments).classpath) Assert.assertEquals("my/classpath", (compilerArguments as K2MetadataCompilerArguments).classpath)
Assert.assertEquals("my/destination", (compilerArguments as K2MetadataCompilerArguments).destination) Assert.assertEquals("my/destination", (compilerArguments as K2MetadataCompilerArguments).destination)
} }
@@ -881,7 +883,7 @@ class GradleFacetImportTest : GradleImportingTestCase() {
Assert.assertEquals("1.0", apiLevel!!.versionString) Assert.assertEquals("1.0", apiLevel!!.versionString)
Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion) Assert.assertFalse(compilerArguments!!.autoAdvanceLanguageVersion)
Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) 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/classpath", (compilerArguments as K2MetadataCompilerArguments).classpath)
Assert.assertEquals("my/test/destination", (compilerArguments as K2MetadataCompilerArguments).destination) 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.CommonCompilerArguments
import org.jetbrains.kotlin.cli.common.arguments.copyBean import org.jetbrains.kotlin.cli.common.arguments.copyBean
import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments
import org.jetbrains.kotlin.platform.IdePlatform
import org.jetbrains.kotlin.platform.IdePlatformKind import org.jetbrains.kotlin.platform.IdePlatformKind
import org.jetbrains.kotlin.platform.TargetPlatformVersion import org.jetbrains.kotlin.platform.TargetPlatformVersion
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.utils.DescriptionAware import org.jetbrains.kotlin.utils.DescriptionAware
@Deprecated("Use IdePlatformKind instead.", level = DeprecationLevel.ERROR) @Deprecated("Use IdePlatformKind instead.", level = DeprecationLevel.ERROR)
@@ -188,7 +188,7 @@ class KotlinFacetSettings {
compilerArguments!!.apiVersion = value?.versionString compilerArguments!!.apiVersion = value?.versionString
} }
val platform: IdePlatform<*, *>? val platform: TargetPlatform?
get() { get() {
val compilerArguments = this.compilerArguments ?: return null val compilerArguments = this.compilerArguments ?: return null
return IdePlatformKind.platformByCompilerArguments(compilerArguments) return IdePlatformKind.platformByCompilerArguments(compilerArguments)
@@ -25,10 +25,17 @@ import org.jdom.Element
import org.jdom.Text import org.jdom.Text
import org.jetbrains.kotlin.cli.common.arguments.* import org.jetbrains.kotlin.cli.common.arguments.*
import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.load.java.JvmAbi
import org.jetbrains.kotlin.platform.IdePlatform
import org.jetbrains.kotlin.platform.IdePlatformKind 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.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.platform.orDefault
import org.jetbrains.kotlin.resolve.*
import java.lang.reflect.Modifier import java.lang.reflect.Modifier
import kotlin.reflect.KClass import kotlin.reflect.KClass
import kotlin.reflect.full.superclasses 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() 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 { private fun readV1Config(element: Element): KotlinFacetSettings {
return KotlinFacetSettings().apply { return KotlinFacetSettings().apply {
val useProjectSettings = element.getOptionValue("useProjectSettings")?.toBoolean() val useProjectSettings = element.getOptionValue("useProjectSettings")?.toBoolean()
@@ -48,8 +69,8 @@ private fun readV1Config(element: Element): KotlinFacetSettings {
val languageLevel = versionInfoElement?.getOptionValue("languageLevel") val languageLevel = versionInfoElement?.getOptionValue("languageLevel")
val apiLevel = versionInfoElement?.getOptionValue("apiLevel") val apiLevel = versionInfoElement?.getOptionValue("apiLevel")
val targetPlatform = IdePlatformKind.All_PLATFORMS val targetPlatform = IdePlatformKind.All_PLATFORMS
.firstOrNull { it.description == targetPlatformName } .firstOrNull { it.oldFashionedDescription == targetPlatformName }
?: JvmIdePlatformKind.defaultPlatform ?: JvmIdePlatformKind.defaultPlatform // FIXME(dsavvinov): choose proper default
val compilerInfoElement = element.getOptionBody("compilerInfo") 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") val platformName = getAttributeValue("platform")
return IdePlatformKind.All_PLATFORMS return IdePlatformKind.All_PLATFORMS
.firstOrNull { it.description == platformName } .firstOrNull { it.oldFashionedDescription == platformName }
.orDefault() .orDefault()
} }
@@ -268,7 +289,7 @@ private fun KotlinFacetSettings.writeLatestConfig(element: Element) {
val filter = SkipDefaultsSerializationFilter() val filter = SkipDefaultsSerializationFilter()
platform?.let { platform?.let {
element.setAttribute("platform", it.description) element.setAttribute("platform", it.oldFashionedDescription)
} }
if (!useProjectSettings) { if (!useProjectSettings) {
element.setAttribute("useProjectSettings", useProjectSettings.toString()) element.setAttribute("useProjectSettings", useProjectSettings.toString())
@@ -7,23 +7,29 @@ package org.jetbrains.kotlin.platform
import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.components.ServiceManager
import org.jetbrains.kotlin.config.isJps import org.jetbrains.kotlin.config.isJps
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.platform.TargetPlatform
interface DefaultIdeTargetPlatformKindProvider { interface DefaultIdeTargetPlatformKindProvider {
val defaultPlatform: IdePlatform<*, *> val defaultPlatform: TargetPlatform
companion object { companion object {
val defaultPlatform: IdePlatform<*, *> val defaultPlatform: TargetPlatform
get() { get() {
if (isJps) { if (isJps) {
// TODO support passing custom platforms in JPS // TODO support passing custom platforms in JPS
return JvmIdePlatformKind.defaultPlatform return JvmPlatforms.defaultJvmPlatform
} }
return ServiceManager.getService(DefaultIdeTargetPlatformKindProvider::class.java).defaultPlatform 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.JsIdePlatformKind
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind
import org.jetbrains.kotlin.platform.impl.NativeIdePlatformKind import org.jetbrains.kotlin.platform.impl.NativeIdePlatformKind
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult
abstract class IdePlatformKind<Kind : IdePlatformKind<Kind>> { abstract class IdePlatformKind<Kind : IdePlatformKind<Kind>> {
abstract val compilerPlatform: TargetPlatform abstract val platforms: List<TargetPlatform>
abstract val platforms: List<IdePlatform<Kind, *>>
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 argumentsClass: Class<out CommonCompilerArguments>
abstract val name: String abstract val name: String
abstract fun createArguments(): CommonCompilerArguments
override fun equals(other: Any?): Boolean = javaClass == other?.javaClass override fun equals(other: Any?): Boolean = javaClass == other?.javaClass
override fun hashCode(): Int = javaClass.hashCode() 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 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) } ALL_KINDS.firstNotNullResult { it.platformByCompilerArguments(arguments) }
} }
} }
val TargetPlatform.idePlatformKind: IdePlatformKind<*> val TargetPlatform.idePlatformKind: IdePlatformKind<*>
get() = IdePlatformKind.IDE_PLATFORMS_BY_COMPILER_PLATFORMS[this] ?: error("Unknown platform $this") 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
}
@@ -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.CommonCompilerArguments
import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments
import org.jetbrains.kotlin.platform.CommonPlatforms import org.jetbrains.kotlin.platform.CommonPlatforms
import org.jetbrains.kotlin.platform.IdePlatform
import org.jetbrains.kotlin.platform.IdePlatformKind import org.jetbrains.kotlin.platform.IdePlatformKind
import org.jetbrains.kotlin.platform.TargetPlatformVersion import org.jetbrains.kotlin.platform.TargetPlatform
object CommonIdePlatformKind : IdePlatformKind<CommonIdePlatformKind>() { object CommonIdePlatformKind : IdePlatformKind<CommonIdePlatformKind>() {
override fun platformByCompilerArguments(arguments: CommonCompilerArguments): IdePlatform<CommonIdePlatformKind, CommonCompilerArguments>? { override fun platformByCompilerArguments(arguments: CommonCompilerArguments): TargetPlatform? {
return if (arguments is K2MetadataCompilerArguments) Platform return if (arguments is K2MetadataCompilerArguments)
else null 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 platforms get() = listOf(CommonPlatforms.defaultCommonPlatform)
override val defaultPlatform get() = Platform override val defaultPlatform get() = CommonPlatforms.defaultCommonPlatform
override val argumentsClass get() = K2MetadataCompilerArguments::class.java override val argumentsClass get() = K2MetadataCompilerArguments::class.java
override val name get() = "Common (experimental)" 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 val IdePlatformKind<*>?.isCommon
get() = this is CommonIdePlatformKind get() = this is CommonIdePlatformKind
val IdePlatform<*, *>?.isCommon
get() = this is CommonIdePlatformKind.Platform
@@ -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.CommonCompilerArguments
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments 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.IdePlatformKind
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.js.JsPlatforms import org.jetbrains.kotlin.platform.js.JsPlatforms
object JsIdePlatformKind : IdePlatformKind<JsIdePlatformKind>() { object JsIdePlatformKind : IdePlatformKind<JsIdePlatformKind>() {
override fun platformByCompilerArguments(arguments: CommonCompilerArguments): IdePlatform<JsIdePlatformKind, CommonCompilerArguments>? { override fun platformByCompilerArguments(arguments: CommonCompilerArguments): TargetPlatform? {
return if (arguments is K2JSCompilerArguments) Platform return if (arguments is K2JSCompilerArguments)
else null 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 fun createArguments(): CommonCompilerArguments {
override val defaultPlatform get() = Platform return K2JSCompilerArguments()
}
override val argumentsClass get() = K2JSCompilerArguments::class.java override val argumentsClass get() = K2JSCompilerArguments::class.java
override val name get() = "JavaScript" 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 val IdePlatformKind<*>?.isJavaScript
get() = this is JsIdePlatformKind 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.CommonCompilerArguments
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.platform.IdePlatform
import org.jetbrains.kotlin.platform.IdePlatformKind import org.jetbrains.kotlin.platform.IdePlatformKind
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
object JvmIdePlatformKind : IdePlatformKind<JvmIdePlatformKind>() { object JvmIdePlatformKind : IdePlatformKind<JvmIdePlatformKind>() {
override fun platformByCompilerArguments(arguments: CommonCompilerArguments): IdePlatform<JvmIdePlatformKind, CommonCompilerArguments>? { override fun platformByCompilerArguments(arguments: CommonCompilerArguments): TargetPlatform? {
return if (arguments is K2JVMCompilerArguments) { if (arguments !is K2JVMCompilerArguments) return null
val jvmTarget = arguments.jvmTarget ?: JvmTarget.DEFAULT.description
platforms.firstOrNull { platform -> val jvmTargetDescription = arguments.jvmTarget
VersionComparatorUtil.COMPARATOR.compare(platform.version.description, jvmTarget) >= 0 ?: return JvmPlatforms.defaultJvmPlatform
}
} else null 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 platforms = JvmTarget.values().map { ver -> JvmPlatforms.jvmPlatformByTargetVersion(ver) }
override val defaultPlatform get() = Platform(JvmTarget.DEFAULT) override val defaultPlatform get() = JvmPlatforms.defaultJvmPlatform
override val argumentsClass get() = K2JVMCompilerArguments::class.java override val argumentsClass get() = K2JVMCompilerArguments::class.java
override val name get() = "JVM" 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 val IdePlatformKind<*>?.isJvm
get() = this is JvmIdePlatformKind get() = this is JvmIdePlatformKind
val IdePlatform<*, *>?.isJvm
get() = this is JvmIdePlatformKind.Platform
@@ -7,32 +7,34 @@
package org.jetbrains.kotlin.platform.impl package org.jetbrains.kotlin.platform.impl
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
import org.jetbrains.kotlin.platform.TargetPlatformVersion
import org.jetbrains.kotlin.platform.IdePlatform
import org.jetbrains.kotlin.platform.IdePlatformKind import org.jetbrains.kotlin.platform.IdePlatformKind
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.konan.KonanPlatforms import org.jetbrains.kotlin.platform.konan.KonanPlatforms
object NativeIdePlatformKind : IdePlatformKind<NativeIdePlatformKind>() { object NativeIdePlatformKind : IdePlatformKind<NativeIdePlatformKind>() {
override fun platformByCompilerArguments(arguments: CommonCompilerArguments): IdePlatform<NativeIdePlatformKind, CommonCompilerArguments>? { override fun platformByCompilerArguments(arguments: CommonCompilerArguments): TargetPlatform? {
return if (arguments is FakeK2NativeCompilerArguments) Platform return if (arguments is FakeK2NativeCompilerArguments)
else null KonanPlatforms.defaultKonanPlatform
else
null
} }
override val compilerPlatform get() = KonanPlatforms.defaultKonanPlatform override fun createArguments(): CommonCompilerArguments {
return FakeK2NativeCompilerArguments()
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 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: // These are fake compiler arguments for Kotlin/Native - only for usage within IDEA plugin:
@@ -40,6 +42,3 @@ class FakeK2NativeCompilerArguments : CommonCompilerArguments()
val IdePlatformKind<*>?.isKotlinNative val IdePlatformKind<*>?.isKotlinNative
get() = this is NativeIdePlatformKind get() = this is NativeIdePlatformKind
val IdePlatform<*, *>?.isKotlinNative
get() = this is NativeIdePlatformKind.Platform
@@ -113,7 +113,7 @@ open class KotlinJavaModuleConfigurator protected constructor() : KotlinWithLibr
try { try {
val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false, commitModel = true) val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false, commitModel = true)
val facetSettings = facet.configuration.settings 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" (facetSettings.compilerArguments as? K2JVMCompilerArguments)?.jvmTarget = "1.8"
} finally { } finally {
modelsProvider.dispose() 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.CustomLibraryDescription
import com.intellij.openapi.roots.ui.configuration.libraries.LibraryPresentationManager import com.intellij.openapi.roots.ui.configuration.libraries.LibraryPresentationManager
import org.jetbrains.kotlin.idea.platform.tooling import org.jetbrains.kotlin.idea.platform.tooling
import org.jetbrains.kotlin.platform.IdePlatform
import org.jetbrains.kotlin.platform.IdePlatformKind 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 org.jetbrains.kotlin.platform.impl.isCommon
import javax.swing.JComponent import javax.swing.JComponent
@@ -36,7 +37,7 @@ class FrameworkLibraryValidatorWithDynamicDescription(
private val context: LibrariesValidatorContext, private val context: LibrariesValidatorContext,
private val validatorsManager: FacetValidatorsManager, private val validatorsManager: FacetValidatorsManager,
private val libraryCategoryName: String, private val libraryCategoryName: String,
private val getPlatform: () -> IdePlatform<*, *> private val getPlatform: () -> TargetPlatform
) : FrameworkLibraryValidator() { ) : FrameworkLibraryValidator() {
private val IdePlatformKind<*>.libraryDescription: CustomLibraryDescription? private val IdePlatformKind<*>.libraryDescription: CustomLibraryDescription?
get() = this.tooling.getLibraryDescription(context.module.project) get() = this.tooling.getLibraryDescription(context.module.project)
@@ -70,10 +71,10 @@ class FrameworkLibraryValidatorWithDynamicDescription(
override fun check(): ValidationResult { override fun check(): ValidationResult {
val targetPlatform = getPlatform() val targetPlatform = getPlatform()
if (checkLibraryIsConfigured(targetPlatform.kind)) { if (checkLibraryIsConfigured(targetPlatform.idePlatformKind)) {
val conflictingPlatforms = IdePlatformKind.ALL_KINDS val conflictingPlatforms = IdePlatformKind.ALL_KINDS
.filter { .filter {
!it.isCommon && it.name != targetPlatform.kind.name !it.isCommon && it.name != targetPlatform.idePlatformKind.name
&& it.libraryDescription != null && checkLibraryIsConfigured(it) && it.libraryDescription != null && checkLibraryIsConfigured(it)
} }
@@ -87,7 +88,7 @@ class FrameworkLibraryValidatorWithDynamicDescription(
return ValidationResult( return ValidationResult(
IdeBundle.message("label.missed.libraries.text", libraryCategoryName), 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.platform.tooling
import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.project.platform
import org.jetbrains.kotlin.idea.util.module 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.CommonIdePlatformKind
import org.jetbrains.kotlin.platform.impl.isCommon import org.jetbrains.kotlin.platform.impl.isCommon
import org.jetbrains.kotlin.psi.KtFunction import org.jetbrains.kotlin.psi.KtFunction
@@ -62,7 +63,7 @@ object CommonIdePlatformKindTooling : IdePlatformKindTooling() {
override fun acceptsAsEntryPoint(function: KtFunction): Boolean { override fun acceptsAsEntryPoint(function: KtFunction): Boolean {
val module = function.containingKtFile.module ?: return false val module = function.containingKtFile.module ?: return false
return module.implementingModules.any { implementingModule -> 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.caches.resolve.resolveToDescriptorIfAny
import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.project.platform
import org.jetbrains.kotlin.idea.util.module 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.annotationClass
import org.jetbrains.kotlin.resolve.descriptorUtil.classId import org.jetbrains.kotlin.resolve.descriptorUtil.classId
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
@@ -38,7 +38,7 @@ class KotlinMultiplatformJUnitRecognizer : JUnitRecognizer() {
override fun isTestAnnotated(method: PsiMethod): Boolean { override fun isTestAnnotated(method: PsiMethod): Boolean {
if (method !is KtLightMethod) return false if (method !is KtLightMethod) return false
val origin = method.kotlinOrigin ?: 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 moduleDescriptor = origin.containingKtFile.findModuleDescriptor()
val implModules = moduleDescriptor.implementingDescriptors val implModules = moduleDescriptor.implementingDescriptors
@@ -7,10 +7,10 @@ package org.jetbrains.kotlin.idea.run
import com.intellij.openapi.module.Module import com.intellij.openapi.module.Module
import org.jetbrains.kotlin.idea.project.platform 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? { fun Module.asJvmModule(): Module? {
if (platform.isJvm) return this if (platform.isJvm()) return this
return null 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.framework.detectLibraryKind
import org.jetbrains.kotlin.idea.maven.configuration.KotlinMavenConfigurator import org.jetbrains.kotlin.idea.maven.configuration.KotlinMavenConfigurator
import org.jetbrains.kotlin.idea.platform.tooling import org.jetbrains.kotlin.idea.platform.tooling
import org.jetbrains.kotlin.platform.IdePlatform
import org.jetbrains.kotlin.platform.IdePlatformKind 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.CommonIdePlatformKind
import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind
import org.jetbrains.kotlin.platform.impl.isCommon import org.jetbrains.kotlin.platform.impl.isCommon
import org.jetbrains.kotlin.platform.isCommon
import org.jetbrains.kotlin.utils.SmartList import org.jetbrains.kotlin.utils.SmartList
import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.addIfNotNull
import java.io.File import java.io.File
@@ -179,7 +180,7 @@ class KotlinMavenImporter : MavenImporter(KOTLIN_PLUGIN_GROUP_ID, KOTLIN_PLUGIN_
private fun getCompilerArgumentsByConfigurationElement( private fun getCompilerArgumentsByConfigurationElement(
mavenProject: MavenProject, mavenProject: MavenProject,
configuration: Element?, configuration: Element?,
platform: IdePlatform<*, *> platform: TargetPlatform
): List<String> { ): List<String> {
val arguments = platform.createArguments() val arguments = platform.createArguments()
@@ -369,7 +370,7 @@ class KotlinMavenImporter : MavenImporter(KOTLIN_PLUGIN_GROUP_ID, KOTLIN_PLUGIN_
}.distinct() }.distinct()
private fun setImplementedModuleName(kotlinFacet: KotlinFacet, mavenProject: MavenProject, module: Module) { 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() kotlinFacet.configuration.settings.implementedModuleNames = emptyList()
} else { } else {
val manager = MavenProjectsManager.getInstance(module.project) 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.psi.KtFile
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners import org.jetbrains.kotlin.test.JUnit3RunnerWithInners
import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner
import org.jetbrains.kotlin.platform.CommonPlatforms
import org.jetbrains.kotlin.platform.TargetPlatform 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.js.JsPlatforms
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.junit.Assert import org.junit.Assert
@@ -635,7 +639,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion)
Assert.assertEquals(true, compilerArguments!!.suppressWarnings) Assert.assertEquals(true, compilerArguments!!.suppressWarnings)
Assert.assertEquals(LanguageFeature.State.ENABLED, coroutineSupport) 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("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget)
Assert.assertEquals("foobar.jar", (compilerArguments as K2JVMCompilerArguments).classpath) Assert.assertEquals("foobar.jar", (compilerArguments as K2JVMCompilerArguments).classpath)
Assert.assertEquals( Assert.assertEquals(
@@ -756,7 +760,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
Assert.assertEquals("1.0", compilerArguments!!.languageVersion) Assert.assertEquals("1.0", compilerArguments!!.languageVersion)
Assert.assertEquals("1.0", apiLevel!!.versionString) Assert.assertEquals("1.0", apiLevel!!.versionString)
Assert.assertEquals("1.0", compilerArguments!!.apiVersion) 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) Assert.assertEquals("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget)
} }
@@ -831,7 +835,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion) Assert.assertFalse(compilerArguments!!.autoAdvanceApiVersion)
Assert.assertEquals(true, compilerArguments!!.suppressWarnings) Assert.assertEquals(true, compilerArguments!!.suppressWarnings)
Assert.assertEquals(LanguageFeature.State.ENABLED, coroutineSupport) Assert.assertEquals(LanguageFeature.State.ENABLED, coroutineSupport)
Assert.assertTrue(platform.isJavaScript) Assert.assertTrue(platform.isJs())
with(compilerArguments as K2JSCompilerArguments) { with(compilerArguments as K2JSCompilerArguments) {
Assert.assertEquals(true, sourceMap) Assert.assertEquals(true, sourceMap)
Assert.assertEquals("commonjs", moduleKind) Assert.assertEquals("commonjs", moduleKind)
@@ -986,7 +990,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
Assert.assertEquals("1.0", compilerArguments!!.apiVersion) Assert.assertEquals("1.0", compilerArguments!!.apiVersion)
Assert.assertEquals(true, compilerArguments!!.suppressWarnings) Assert.assertEquals(true, compilerArguments!!.suppressWarnings)
Assert.assertEquals(LanguageFeature.State.ENABLED, coroutineSupport) 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("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget)
Assert.assertEquals("foobar.jar", (compilerArguments as K2JVMCompilerArguments).classpath) Assert.assertEquals("foobar.jar", (compilerArguments as K2JVMCompilerArguments).classpath)
Assert.assertEquals("-version", compilerSettings!!.additionalArguments) Assert.assertEquals("-version", compilerSettings!!.additionalArguments)
@@ -1046,7 +1050,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertImporterStatePresent() assertImporterStatePresent()
with(facetSettings) { 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("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget)
Assert.assertEquals(LanguageFeature.State.ENABLED, coroutineSupport) Assert.assertEquals(LanguageFeature.State.ENABLED, coroutineSupport)
Assert.assertEquals("c:/program files/jdk1.8", (compilerArguments as K2JVMCompilerArguments).classpath) Assert.assertEquals("c:/program files/jdk1.8", (compilerArguments as K2JVMCompilerArguments).classpath)
@@ -1102,7 +1106,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertImporterStatePresent() assertImporterStatePresent()
with(facetSettings) { 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("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget)
Assert.assertEquals(LanguageFeature.State.ENABLED, coroutineSupport) Assert.assertEquals(LanguageFeature.State.ENABLED, coroutineSupport)
Assert.assertEquals("c:/program files/jdk1.8", (compilerArguments as K2JVMCompilerArguments).classpath) Assert.assertEquals("c:/program files/jdk1.8", (compilerArguments as K2JVMCompilerArguments).classpath)
@@ -1156,7 +1160,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertModules("project") assertModules("project")
assertImporterStatePresent() 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.SOURCE, "src/main/kotlin")
assertContentFolders("project", JavaSourceRootType.TEST_SOURCE, "src/test/java") assertContentFolders("project", JavaSourceRootType.TEST_SOURCE, "src/test/java")
@@ -1211,7 +1215,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertModules("project") assertModules("project")
assertImporterStatePresent() assertImporterStatePresent()
Assert.assertEquals(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6), facetSettings.platform) Assert.assertEquals(JvmPlatforms.jvm16, facetSettings.platform)
} }
fun testJvmDetectionByGoalWithCommonStdlib() { fun testJvmDetectionByGoalWithCommonStdlib() {
@@ -1261,7 +1265,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertModules("project") assertModules("project")
assertImporterStatePresent() 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.SOURCE, "src/main/kotlin")
assertContentFolders("project", JavaSourceRootType.TEST_SOURCE, "src/test/java") assertContentFolders("project", JavaSourceRootType.TEST_SOURCE, "src/test/java")
@@ -1316,7 +1320,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertModules("project") assertModules("project")
assertImporterStatePresent() assertImporterStatePresent()
Assert.assertTrue(facetSettings.platform.isJavaScript) Assert.assertTrue(facetSettings.platform.isJs())
Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType) Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType)
@@ -1373,7 +1377,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertModules("project") assertModules("project")
assertImporterStatePresent() assertImporterStatePresent()
Assert.assertTrue(facetSettings.platform.isJavaScript) Assert.assertTrue(facetSettings.platform.isJs())
Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType) Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType)
@@ -1430,7 +1434,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertModules("project") assertModules("project")
assertImporterStatePresent() assertImporterStatePresent()
Assert.assertTrue(facetSettings.platform.isJavaScript) Assert.assertTrue(facetSettings.platform.isJs())
Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType) Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType)
@@ -1492,7 +1496,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertModules("project") assertModules("project")
assertImporterStatePresent() assertImporterStatePresent()
Assert.assertTrue(facetSettings.platform.isJavaScript) Assert.assertTrue(facetSettings.platform.isJs())
val rootManager = ModuleRootManager.getInstance(getModule("project")) val rootManager = ModuleRootManager.getInstance(getModule("project"))
val libraries = rootManager.orderEntries.filterIsInstance<LibraryOrderEntry>().map { it.library as LibraryEx } val libraries = rootManager.orderEntries.filterIsInstance<LibraryOrderEntry>().map { it.library as LibraryEx }
@@ -1546,7 +1550,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertModules("project") assertModules("project")
assertImporterStatePresent() assertImporterStatePresent()
Assert.assertTrue(facetSettings.platform.isCommon) Assert.assertTrue(facetSettings.platform.isCommon())
Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType) Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType)
@@ -1597,7 +1601,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertModules("project") assertModules("project")
assertImporterStatePresent() assertImporterStatePresent()
Assert.assertTrue(facetSettings.platform.isCommon) Assert.assertTrue(facetSettings.platform.isCommon())
Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType) Assert.assertTrue(ModuleRootManager.getInstance(getModule("project")).sdk!!.sdkType is KotlinSdkType)
@@ -1648,7 +1652,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertModules("project") assertModules("project")
assertImporterStatePresent() assertImporterStatePresent()
Assert.assertTrue(facetSettings.platform.isCommon) Assert.assertTrue(facetSettings.platform.isCommon())
val rootManager = ModuleRootManager.getInstance(getModule("project")) val rootManager = ModuleRootManager.getInstance(getModule("project"))
val stdlib = rootManager.orderEntries.filterIsInstance<LibraryOrderEntry>().single().library val stdlib = rootManager.orderEntries.filterIsInstance<LibraryOrderEntry>().single().library
@@ -1709,7 +1713,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertModules("project") assertModules("project")
assertImporterStatePresent() 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", SourceKotlinRootType, "src/main/kotlin")
assertContentFolders("project", TestSourceKotlinRootType, "src/test/java") assertContentFolders("project", TestSourceKotlinRootType, "src/test/java")
@@ -1764,7 +1768,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertModules("project") assertModules("project")
assertImporterStatePresent() assertImporterStatePresent()
Assert.assertTrue(facetSettings.platform.isJavaScript) Assert.assertTrue(facetSettings.platform.isJs())
assertContentFolders("project", SourceKotlinRootType, "src/main/kotlin") assertContentFolders("project", SourceKotlinRootType, "src/main/kotlin")
assertContentFolders("project", TestSourceKotlinRootType, "src/test/java") assertContentFolders("project", TestSourceKotlinRootType, "src/test/java")
@@ -1819,7 +1823,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertModules("project") assertModules("project")
assertImporterStatePresent() assertImporterStatePresent()
Assert.assertTrue(facetSettings.platform.isCommon) Assert.assertTrue(facetSettings.platform.isCommon())
assertContentFolders("project", SourceKotlinRootType, "src/main/kotlin") assertContentFolders("project", SourceKotlinRootType, "src/main/kotlin")
assertContentFolders("project", TestSourceKotlinRootType, "src/test/java") assertContentFolders("project", TestSourceKotlinRootType, "src/test/java")
@@ -2033,7 +2037,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertImporterStatePresent() assertImporterStatePresent()
with(facetSettings) { 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", languageLevel!!.description)
Assert.assertEquals("1.1", apiLevel!!.description) Assert.assertEquals("1.1", apiLevel!!.description)
Assert.assertEquals("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget) Assert.assertEquals("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget)
@@ -2256,7 +2260,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertImporterStatePresent() assertImporterStatePresent()
with(facetSettings("myModule1")) { 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.1", languageLevel!!.description)
Assert.assertEquals("1.0", apiLevel!!.description) Assert.assertEquals("1.0", apiLevel!!.description)
Assert.assertEquals("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget) Assert.assertEquals("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget)
@@ -2267,7 +2271,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
} }
with(facetSettings("myModule2")) { 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.1", languageLevel!!.description)
Assert.assertEquals("1.0", apiLevel!!.description) Assert.assertEquals("1.0", apiLevel!!.description)
Assert.assertEquals("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget) Assert.assertEquals("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget)
@@ -2278,7 +2282,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
} }
with(facetSettings("myModule3")) { 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, languageLevel)
Assert.assertEquals(LanguageVersion.LATEST_STABLE, apiLevel) Assert.assertEquals(LanguageVersion.LATEST_STABLE, apiLevel)
Assert.assertEquals("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget) Assert.assertEquals("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget)
@@ -2517,20 +2521,20 @@ class KotlinMavenImporterTest : MavenImportingTestCase() {
assertImporterStatePresent() assertImporterStatePresent()
with(facetSettings("my-common-module1")) { with(facetSettings("my-common-module1")) {
Assert.assertEquals(CommonIdePlatformKind.Platform.description, platform!!.description) Assert.assertEquals(CommonPlatforms.defaultCommonPlatform, platform)
} }
with(facetSettings("my-common-module2")) { with(facetSettings("my-common-module2")) {
Assert.assertEquals(CommonIdePlatformKind.Platform.description, platform!!.description) Assert.assertEquals(CommonPlatforms.defaultCommonPlatform, platform)
} }
with(facetSettings("my-jvm-module")) { 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) Assert.assertEquals(listOf("my-common-module1", "my-common-module2"), implementedModuleNames)
} }
with(facetSettings("my-js-module")) { with(facetSettings("my-js-module")) {
Assert.assertEquals(JsIdePlatformKind.Platform.description, platform!!.description) Assert.assertEquals(JsPlatforms.defaultJsPlatform, platform)
Assert.assertEquals(listOf("my-common-module1"), implementedModuleNames) 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.KtFunction
import org.jetbrains.kotlin.psi.KtNamedDeclaration import org.jetbrains.kotlin.psi.KtNamedDeclaration
import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.konan.KonanPlatforms
import javax.swing.Icon import javax.swing.Icon
class NativeIdePlatformKindTooling : IdePlatformKindTooling() { class NativeIdePlatformKindTooling : IdePlatformKindTooling() {
@@ -45,7 +46,7 @@ class NativeIdePlatformKindTooling : IdePlatformKindTooling() {
object NativeLibraryKind : PersistentLibraryKind<DummyLibraryProperties>("kotlin.native"), KotlinLibraryKind { object NativeLibraryKind : PersistentLibraryKind<DummyLibraryProperties>("kotlin.native"), KotlinLibraryKind {
override val compilerPlatform: TargetPlatform override val compilerPlatform: TargetPlatform
get() = NativeIdePlatformKind.compilerPlatform get() = KonanPlatforms.defaultKonanPlatform
override fun createDefaultProperties() = DummyLibraryProperties.INSTANCE!! override fun createDefaultProperties() = DummyLibraryProperties.INSTANCE!!
} }
@@ -16,15 +16,15 @@ import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.search.SearchScope import com.intellij.psi.search.SearchScope
import org.jetbrains.kotlin.idea.caches.project.implementingModules import org.jetbrains.kotlin.idea.caches.project.implementingModules
import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.project.platform
import org.jetbrains.kotlin.platform.impl.isCommon import org.jetbrains.kotlin.platform.isCommon
import org.jetbrains.kotlin.platform.impl.isJvm import org.jetbrains.kotlin.platform.jvm.isJvm
class CommonModuleResolveScopeEnlarger : ResolveScopeEnlarger() { class CommonModuleResolveScopeEnlarger : ResolveScopeEnlarger() {
override fun getAdditionalResolveScope(file: VirtualFile, project: Project): SearchScope? { override fun getAdditionalResolveScope(file: VirtualFile, project: Project): SearchScope? {
val module = ProjectFileIndex.getInstance(project).getModuleForFile(file) ?: return null 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 var result = GlobalSearchScope.EMPTY_SCOPE
for (entry in ModuleRootManager.getInstance(implementingModule).orderEntries) { 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.roots.RootUtilsKt;
import org.jetbrains.kotlin.idea.util.CidrUtil; import org.jetbrains.kotlin.idea.util.CidrUtil;
import org.jetbrains.kotlin.idea.util.application.ApplicationUtilsKt; 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.IdePlatformKind;
import org.jetbrains.kotlin.platform.PlatformUtilKt;
import org.jetbrains.kotlin.platform.impl.JsIdePlatformUtil; import org.jetbrains.kotlin.platform.impl.JsIdePlatformUtil;
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind; import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind;
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformUtil; 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 javax.swing.*;
import java.util.*; import java.util.*;
@@ -360,8 +363,8 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private void fillJvmVersionList() { private void fillJvmVersionList() {
for (IdePlatform<JvmIdePlatformKind, ?> jvm : JvmIdePlatformKind.INSTANCE.getPlatforms()) { for (TargetPlatform jvm : JvmIdePlatformKind.INSTANCE.getPlatforms()) {
jvmVersionComboBox.addItem(jvm.getVersion().getDescription()); 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 com.intellij.util.ui.ThreeStateCheckBox
import org.jetbrains.kotlin.cli.common.arguments.* import org.jetbrains.kotlin.cli.common.arguments.*
import org.jetbrains.kotlin.config.CompilerSettings import org.jetbrains.kotlin.config.CompilerSettings
import org.jetbrains.kotlin.config.createArguments
import org.jetbrains.kotlin.config.splitArgumentString import org.jetbrains.kotlin.config.splitArgumentString
import org.jetbrains.kotlin.idea.compiler.configuration.* import org.jetbrains.kotlin.idea.compiler.configuration.*
import org.jetbrains.kotlin.idea.util.onTextChange 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.idePlatformKind
import org.jetbrains.kotlin.platform.impl.isCommon import org.jetbrains.kotlin.platform.impl.isCommon
import org.jetbrains.kotlin.platform.impl.isJavaScript import org.jetbrains.kotlin.platform.impl.isJavaScript
import org.jetbrains.kotlin.platform.impl.isJvm 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 java.awt.BorderLayout
import javax.swing.* import javax.swing.*
import javax.swing.border.EmptyBorder import javax.swing.border.EmptyBorder
@@ -60,7 +65,7 @@ class KotlinFacetEditorGeneralTab(
lateinit var useProjectSettingsCheckBox: ThreeStateCheckBox lateinit var useProjectSettingsCheckBox: ThreeStateCheckBox
lateinit var targetPlatformComboBox: ComboBox<IdePlatform<*, *>> lateinit var targetPlatformComboBox: ComboBox<TargetPlatform>
private lateinit var projectSettingsLink: HoverHyperlinkLabel private lateinit var projectSettingsLink: HoverHyperlinkLabel
@@ -91,7 +96,7 @@ class KotlinFacetEditorGeneralTab(
) )
useProjectSettingsCheckBox = ThreeStateCheckBox("Use project settings").apply { isThirdStateEnabled = isMultiEditor } 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()) setRenderer(DescriptionListCellRenderer())
} }
projectSettingsLink = HoverHyperlinkLabel("Edit project settings").apply { projectSettingsLink = HoverHyperlinkLabel("Edit project settings").apply {
@@ -130,7 +135,7 @@ class KotlinFacetEditorGeneralTab(
internal fun updateCompilerConfigurable() { internal fun updateCompilerConfigurable() {
val useProjectSettings = useProjectSettingsCheckBox.isSelected val useProjectSettings = useProjectSettingsCheckBox.isSelected
compilerConfigurable.setTargetPlatform(chosenPlatform?.kind) compilerConfigurable.setTargetPlatform(chosenPlatform?.idePlatformKind)
compilerConfigurable.setEnabled(!useProjectSettings) compilerConfigurable.setEnabled(!useProjectSettings)
if (useProjectSettings) { if (useProjectSettings) {
compilerConfigurable.commonCompilerArguments = KotlinCommonCompilerArgumentsHolder.getInstance(project).settings.unfrozen() as CommonCompilerArguments? compilerConfigurable.commonCompilerArguments = KotlinCommonCompilerArgumentsHolder.getInstance(project).settings.unfrozen() as CommonCompilerArguments?
@@ -147,14 +152,14 @@ class KotlinFacetEditorGeneralTab(
compilerConfigurable.reset() compilerConfigurable.reset()
} }
val chosenPlatform: IdePlatform<*, *>? val chosenPlatform: TargetPlatform?
get() = targetPlatformComboBox.selectedItemTyped get() = targetPlatformComboBox.selectedItemTyped
} }
inner class ArgumentConsistencyValidator : FacetEditorValidator() { inner class ArgumentConsistencyValidator : FacetEditorValidator() {
override fun check(): ValidationResult { override fun check(): ValidationResult {
val platform = editor.chosenPlatform ?: return ValidationResult.OK val platform = editor.chosenPlatform ?: return ValidationResult.OK
val primaryArguments = platform.createArguments().apply { val primaryArguments = platform.createArguments {
editor.compilerConfigurable.applyTo( editor.compilerConfigurable.applyTo(
this, this,
this as? K2JVMCompilerArguments ?: K2JVMCompilerArguments(), this as? K2JVMCompilerArguments ?: K2JVMCompilerArguments(),
@@ -169,9 +174,9 @@ class KotlinFacetEditorGeneralTab(
} }
val emptyArguments = argumentClass.newInstance() val emptyArguments = argumentClass.newInstance()
val fieldNamesToCheck = when { val fieldNamesToCheck = when {
platform.isJvm -> jvmUIExposedFields platform.isJvm() -> jvmUIExposedFields
platform.isJavaScript -> jsUIExposedFields platform.isJs() -> jsUIExposedFields
platform.isCommon -> metadataUIExposedFields platform.isCommon() -> metadataUIExposedFields
else -> commonUIExposedFields else -> commonUIExposedFields
} }
@@ -306,8 +311,8 @@ class KotlinFacetEditorGeneralTab(
editor.chosenPlatform?.let { editor.chosenPlatform?.let {
if (it != platform) { if (it != platform) {
val platformArguments = when { val platformArguments = when {
it.isJvm -> editor.compilerConfigurable.k2jvmCompilerArguments it.isJvm() -> editor.compilerConfigurable.k2jvmCompilerArguments
it.isJavaScript -> editor.compilerConfigurable.k2jsCompilerArguments it.isJs() -> editor.compilerConfigurable.k2jsCompilerArguments
else -> null else -> null
} }
compilerArguments = it.createArguments { 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.platform.tooling
import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.idea.util.application.runWriteAction
import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider 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.idePlatformKind
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind
import org.jetbrains.kotlin.psi.NotNullableUserDataProperty import org.jetbrains.kotlin.psi.NotNullableUserDataProperty
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import kotlin.reflect.KProperty1 import kotlin.reflect.KProperty1
var Module.hasExternalSdkConfiguration: Boolean var Module.hasExternalSdkConfiguration: Boolean
by NotNullableUserDataProperty(Key.create<Boolean>("HAS_EXTERNAL_SDK_CONFIGURATION"), false) 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 { val platformKind = IdePlatformKind.ALL_KINDS.firstOrNull {
getRuntimeLibraryVersions(module, rootModel, it).isNotEmpty() getRuntimeLibraryVersions(module, rootModel, it).isNotEmpty()
} ?: DefaultIdeTargetPlatformKindProvider.defaultPlatform.kind } ?: DefaultIdeTargetPlatformKindProvider.defaultPlatform.idePlatformKind
if (platformKind == JvmIdePlatformKind) { if (platformKind == JvmIdePlatformKind) {
var jvmTarget = Kotlin2JvmCompilerArgumentsHolder.getInstance(module.project).settings.jvmTarget?.let { JvmTarget.fromString(it) } var jvmTarget = Kotlin2JvmCompilerArgumentsHolder.getInstance(module.project).settings.jvmTarget?.let { JvmTarget.fromString(it) }
if (jvmTarget == null) { if (jvmTarget == null) {
@@ -62,7 +64,7 @@ private fun getDefaultTargetPlatform(module: Module, rootModel: ModuleRootModel?
jvmTarget = JvmTarget.JVM_1_8 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 return platformKind.defaultPlatform
} }
@@ -70,7 +72,7 @@ private fun getDefaultTargetPlatform(module: Module, rootModel: ModuleRootModel?
fun KotlinFacetSettings.initializeIfNeeded( fun KotlinFacetSettings.initializeIfNeeded(
module: Module, module: Module,
rootModel: ModuleRootModel?, rootModel: ModuleRootModel?,
platform: IdePlatform<*, *>? = null, // if null, detect by module dependencies platform: TargetPlatform? = null, // if null, detect by module dependencies
compilerVersion: String? = null compilerVersion: String? = null
) { ) {
val project = module.project val project = module.project
@@ -87,7 +89,7 @@ fun KotlinFacetSettings.initializeIfNeeded(
if (compilerArguments == null) { if (compilerArguments == null) {
val targetPlatform = platform ?: getDefaultTargetPlatform(module, rootModel) val targetPlatform = platform ?: getDefaultTargetPlatform(module, rootModel)
compilerArguments = targetPlatform.createArguments { 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) mergeBeans(commonArguments, this)
} }
} }
@@ -105,7 +107,7 @@ fun KotlinFacetSettings.initializeIfNeeded(
getLibraryLanguageLevel( getLibraryLanguageLevel(
module, module,
rootModel, rootModel,
this.platform?.kind, this.platform?.idePlatformKind,
coerceRuntimeLibraryVersionToReleased = compilerVersion == null coerceRuntimeLibraryVersionToReleased = compilerVersion == null
) )
) )
@@ -146,7 +148,7 @@ fun Module.getOrCreateFacet(
fun KotlinFacet.configureFacet( fun KotlinFacet.configureFacet(
compilerVersion: String?, compilerVersion: String?,
coroutineSupport: LanguageFeature.State, coroutineSupport: LanguageFeature.State,
platform: IdePlatform<*, *>?, // if null, detect by module dependencies platform: TargetPlatform?, // if null, detect by module dependencies
modelsProvider: IdeModifiableModelsProvider modelsProvider: IdeModifiableModelsProvider
) { ) {
val module = module val module = module
@@ -10,7 +10,8 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.startup.StartupActivity import com.intellij.openapi.startup.StartupActivity
import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.project.platform
import org.jetbrains.kotlin.idea.util.projectStructure.allModules 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. * This StartupActivity creates KotlinSdk for projects containing non-jvm modules.
@@ -21,7 +22,7 @@ class CreateKotlinSdkActivity : StartupActivity, DumbAware {
override fun runActivity(project: Project) { override fun runActivity(project: Project) {
val kotlinSdkIsRequired = project.allModules().any { val kotlinSdkIsRequired = project.allModules().any {
!it.platform.isJvm it.platform.isJs() || it.platform.isCommon()
} }
if (kotlinSdkIsRequired) { if (kotlinSdkIsRequired) {
KotlinSdkType.setUpIfNeeded() 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.FUSEventGroups
import org.jetbrains.kotlin.idea.statistics.KotlinFUSLogger import org.jetbrains.kotlin.idea.statistics.KotlinFUSLogger
import org.jetbrains.kotlin.idea.util.projectStructure.allModules import org.jetbrains.kotlin.idea.util.projectStructure.allModules
import org.jetbrains.kotlin.platform.impl.isCommon import org.jetbrains.kotlin.platform.isCommon
import org.jetbrains.kotlin.platform.impl.isJavaScript import org.jetbrains.kotlin.platform.js.isJs
import org.jetbrains.kotlin.platform.impl.isJvm import org.jetbrains.kotlin.platform.jvm.isJvm
import org.jetbrains.kotlin.platform.impl.isKotlinNative import org.jetbrains.kotlin.platform.konan.isNative
class TargetRetrieveActivity : StartupActivity { class TargetRetrieveActivity : StartupActivity {
override fun runActivity(project: Project) { override fun runActivity(project: Project) {
project.allModules().forEach { project.allModules().forEach {
val buildSystem = it.getBuildSystemType() val buildSystem = it.getBuildSystemType()
// TODO(dsavvinov): review that
val platform = when { val platform = when {
it.platform.isJvm -> "jvm" it.platform.isJvm() -> "jvm"
it.platform.isJavaScript -> "js" it.platform.isJs() -> "js"
it.platform.isCommon -> "common" it.platform.isCommon() -> "common"
it.platform.isKotlinNative -> "native" it.platform.isNative() -> "native"
else -> "unknown" else -> "unknown"
} }
when { when {
@@ -35,7 +35,7 @@ import org.jetbrains.kotlin.idea.search.allScope
import org.jetbrains.kotlin.idea.stubindex.KotlinClassShortNameIndex import org.jetbrains.kotlin.idea.stubindex.KotlinClassShortNameIndex
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
import org.jetbrains.kotlin.idea.util.module 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.KtClassOrObject
import org.jetbrains.kotlin.psi.KtConstructor import org.jetbrains.kotlin.psi.KtConstructor
import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.KtNamedFunction
@@ -46,7 +46,7 @@ import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
class KotlinTypeHierarchyProvider : JavaTypeHierarchyProvider() { class KotlinTypeHierarchyProvider : JavaTypeHierarchyProvider() {
private fun getOriginalPsiClassOrCreateLightClass(classOrObject: KtClassOrObject, module: Module?): PsiClass? { private fun getOriginalPsiClassOrCreateLightClass(classOrObject: KtClassOrObject, module: Module?): PsiClass? {
val fqName = classOrObject.fqName val fqName = classOrObject.fqName
if (fqName != null && module?.platform.isJvm) { if (fqName != null && module?.platform.isJvm()) {
val javaClassId = JavaToKotlinClassMap.mapKotlinToJava(fqName.toUnsafe()) val javaClassId = JavaToKotlinClassMap.mapKotlinToJava(fqName.toUnsafe())
if (javaClassId != null) { if (javaClassId != null) {
return JavaPsiFacade.getInstance(classOrObject.project).findClass( 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.platform.tooling
import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.project.platform
import org.jetbrains.kotlin.idea.util.module import org.jetbrains.kotlin.idea.util.module
import org.jetbrains.kotlin.platform.idePlatformKind
import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.KtNamedFunction
class KotlinRunLineMarkerContributor : RunLineMarkerContributor() { class KotlinRunLineMarkerContributor : RunLineMarkerContributor() {
@@ -34,7 +35,7 @@ class KotlinRunLineMarkerContributor : RunLineMarkerContributor() {
if (function.isMainFunction()) { if (function.isMainFunction()) {
val platform = function.containingKtFile.module?.platform ?: return null 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)) 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.platform.tooling
import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.project.platform
import org.jetbrains.kotlin.idea.util.projectStructure.module 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.KtClassOrObject
import org.jetbrains.kotlin.psi.KtNamedDeclaration import org.jetbrains.kotlin.psi.KtNamedDeclaration
import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.KtNamedFunction
@@ -62,7 +63,7 @@ class KotlinTestRunLineMarkerContributor : RunLineMarkerContributor() {
val descriptor = declaration.resolveToDescriptorIfAny() ?: return null val descriptor = declaration.resolveToDescriptorIfAny() ?: return null
val targetPlatform = declaration.module?.platform ?: 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()) 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.facet.KotlinFacet
import org.jetbrains.kotlin.idea.framework.isGradleModule import org.jetbrains.kotlin.idea.framework.isGradleModule
import org.jetbrains.kotlin.idea.project.platform 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 import org.jetbrains.plugins.gradle.settings.GradleSystemRunningSettings
val Module.jsTestOutputFilePath: String? val Module.jsTestOutputFilePath: String?
@@ -47,7 +47,7 @@ val Module.jsProductionOutputFilePath: String?
return JpsPathUtil.urlToPath("$outputDir/$name.js") 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 val Module.shouldUseJpsOutput: Boolean
get() = !(isGradleModule() && GradleSystemRunningSettings.getInstance().isUseGradleAwareMake) get() = !(isGradleModule() && GradleSystemRunningSettings.getInstance().isUseGradleAwareMake)
@@ -300,7 +300,7 @@ private fun KotlinType.checkAccessibility(accessibleClasses: List<KtClassOrObjec
return return
} }
val declaration = DescriptorToSourceUtils.descriptorToDeclaration(classifierDescriptor) val declaration = DescriptorToSourceUtils.descriptorToDeclaration(classifierDescriptor)
if (declaration?.module?.platform?.kind?.isCommon == true) { if (declaration?.module?.platform?.isCommon() == true) {
// Common classes are Ok again // Common classes are Ok again
return return
} }
@@ -44,6 +44,7 @@ import org.jetbrains.kotlin.platform.js.JsPlatforms
import org.jetbrains.kotlin.platform.js.isJs import org.jetbrains.kotlin.platform.js.isJs
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.platform.jvm.isJvm
import org.jetbrains.kotlin.platform.idePlatformKind
import org.jetbrains.kotlin.utils.PathUtil import org.jetbrains.kotlin.utils.PathUtil
class KotlinNonJvmSourceRootConverterProvider : ConverterProvider("kotlin-non-jvm-source-roots") { class KotlinNonJvmSourceRootConverterProvider : ConverterProvider("kotlin-non-jvm-source-roots") {
@@ -141,7 +142,7 @@ class KotlinNonJvmSourceRootConverterProvider : ConverterProvider("kotlin-non-jv
getFacetElement(KotlinFacetType.ID) getFacetElement(KotlinFacetType.ID)
?.getChild(JpsFacetSerializer.CONFIGURATION_TAG) ?.getChild(JpsFacetSerializer.CONFIGURATION_TAG)
?.getFacetPlatformByConfigurationElement() ?.getFacetPlatformByConfigurationElement()
?.kind?.compilerPlatform
private fun ModuleSettings.detectPlatformByDependencies(): TargetPlatform? { private fun ModuleSettings.detectPlatformByDependencies(): TargetPlatform? {
var hasCommonStdlib = false 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.project.PlatformKt;
import org.jetbrains.kotlin.idea.util.Java9StructureUtilKt; import org.jetbrains.kotlin.idea.util.Java9StructureUtilKt;
import org.jetbrains.kotlin.idea.versions.KotlinRuntimeLibraryUtilKt; import org.jetbrains.kotlin.idea.versions.KotlinRuntimeLibraryUtilKt;
import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind; import org.jetbrains.kotlin.config.JvmTarget;
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind; 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.resolve.jvm.modules.JavaModuleKt;
import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner; import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner;
import org.jetbrains.kotlin.utils.PathUtil; import org.jetbrains.kotlin.utils.PathUtil;
@@ -206,7 +208,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
assertEquals(false, settings.getUseProjectSettings()); assertEquals(false, settings.getUseProjectSettings());
assertEquals("1.1", settings.getLanguageLevel().getDescription()); assertEquals("1.1", settings.getLanguageLevel().getDescription());
assertEquals("1.0", settings.getApiLevel().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.1", arguments.getLanguageVersion());
assertEquals("1.0", arguments.getApiVersion()); assertEquals("1.0", arguments.getApiVersion());
assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, CoroutineSupport.byCompilerArguments(arguments)); assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, CoroutineSupport.byCompilerArguments(arguments));
@@ -221,7 +223,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
assertEquals(false, settings.getUseProjectSettings()); assertEquals(false, settings.getUseProjectSettings());
assertEquals("1.1", settings.getLanguageLevel().getDescription()); assertEquals("1.1", settings.getLanguageLevel().getDescription());
assertEquals("1.0", settings.getApiLevel().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.1", arguments.getLanguageVersion());
assertEquals("1.0", arguments.getApiVersion()); assertEquals("1.0", arguments.getApiVersion());
assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, CoroutineSupport.byCompilerArguments(arguments)); assertEquals(LanguageFeature.State.ENABLED_WITH_WARNING, CoroutineSupport.byCompilerArguments(arguments));
@@ -236,7 +238,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
assertEquals(false, settings.getUseProjectSettings()); assertEquals(false, settings.getUseProjectSettings());
assertEquals("1.1", settings.getLanguageLevel().getDescription()); assertEquals("1.1", settings.getLanguageLevel().getDescription());
assertEquals("1.0", settings.getApiLevel().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.1", arguments.getLanguageVersion());
assertEquals("1.0", arguments.getApiVersion()); assertEquals("1.0", arguments.getApiVersion());
assertEquals(LanguageFeature.State.ENABLED, CoroutineSupport.byCompilerArguments(arguments)); assertEquals(LanguageFeature.State.ENABLED, CoroutineSupport.byCompilerArguments(arguments));
@@ -251,7 +253,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
assertEquals(false, settings.getUseProjectSettings()); assertEquals(false, settings.getUseProjectSettings());
assertEquals("1.1", settings.getLanguageLevel().getDescription()); assertEquals("1.1", settings.getLanguageLevel().getDescription());
assertEquals("1.0", settings.getApiLevel().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.1", arguments.getLanguageVersion());
assertEquals("1.0", arguments.getApiVersion()); assertEquals("1.0", arguments.getApiVersion());
assertEquals(LanguageFeature.State.ENABLED_WITH_ERROR, CoroutineSupport.byCompilerArguments(arguments)); assertEquals(LanguageFeature.State.ENABLED_WITH_ERROR, CoroutineSupport.byCompilerArguments(arguments));
@@ -266,7 +268,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
assertEquals(false, settings.getUseProjectSettings()); assertEquals(false, settings.getUseProjectSettings());
assertEquals("1.1", settings.getLanguageLevel().getDescription()); assertEquals("1.1", settings.getLanguageLevel().getDescription());
assertEquals("1.0", settings.getApiLevel().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.1", arguments.getLanguageVersion());
assertEquals("1.0", arguments.getApiVersion()); assertEquals("1.0", arguments.getApiVersion());
assertEquals(LanguageFeature.State.ENABLED, CoroutineSupport.byCompilerArguments(arguments)); assertEquals(LanguageFeature.State.ENABLED, CoroutineSupport.byCompilerArguments(arguments));
@@ -276,7 +278,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
public void testJvmProjectWithJvmTarget11() { public void testJvmProjectWithJvmTarget11() {
KotlinFacetSettings settings = KotlinFacetSettingsProvider.Companion.getInstance(myProject).getInitializedSettings(getModule()); 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() { public void testImplementsDependency() {
@@ -342,7 +344,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
IdeModifiableModelsProviderImpl modelsProvider = new IdeModifiableModelsProviderImpl(getProject()); IdeModifiableModelsProviderImpl modelsProvider = new IdeModifiableModelsProviderImpl(getProject());
try { try {
KotlinFacet facet = FacetUtilsKt.getOrCreateFacet(getModule(), modelsProvider, false, null, false); KotlinFacet facet = FacetUtilsKt.getOrCreateFacet(getModule(), modelsProvider, false, null, false);
JvmIdePlatformKind.Platform platform = new JvmIdePlatformKind.Platform(jvmTarget); TargetPlatform platform = JvmPlatforms.INSTANCE.jvmPlatformByTargetVersion(jvmTarget);
FacetUtilsKt.configureFacet( FacetUtilsKt.configureFacet(
facet, facet,
"1.1", "1.1",
@@ -370,7 +372,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
} }
public void testProjectWithoutFacetWithJvmTarget18() { 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> { 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.openapi.roots.ModifiableRootModel
import com.intellij.testFramework.LightProjectDescriptor import com.intellij.testFramework.LightProjectDescriptor
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime
import org.jetbrains.kotlin.config.JvmTarget
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
import org.jetbrains.kotlin.idea.stubs.createFacet import org.jetbrains.kotlin.idea.stubs.createFacet
import org.jetbrains.kotlin.idea.test.KotlinJdkAndLibraryProjectDescriptor import org.jetbrains.kotlin.idea.test.KotlinJdkAndLibraryProjectDescriptor
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind
import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.test.MockLibraryUtil import org.jetbrains.kotlin.test.MockLibraryUtil
import org.jetbrains.kotlin.utils.ReportLevel import org.jetbrains.kotlin.utils.ReportLevel
import org.junit.runner.RunWith import org.junit.runner.RunWith
@@ -35,7 +34,7 @@ class Jsr305HighlightingTest : KotlinLightCodeInsightFixtureTestCase() {
) { ) {
override fun configureModule(module: Module, model: ModifiableRootModel) { override fun configureModule(module: Module, model: ModifiableRootModel) {
super.configureModule(module, model) super.configureModule(module, model)
module.createFacet(JvmIdePlatformKind.Platform(JvmTarget.JVM_1_8)) module.createFacet(JvmPlatforms.jvm18)
val facetSettings = KotlinFacetSettingsProvider.getInstance(project).getInitializedSettings(module) val facetSettings = KotlinFacetSettingsProvider.getInstance(project).getInitializedSettings(module)
facetSettings.apply { 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.stubs.createFacet
import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase 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.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 import java.io.File
// allows to configure a test mpp project // allows to configure a test mpp project
@@ -45,11 +48,11 @@ fun AbstractMultiModuleTest.setupMppProjectFromDirStructure(testRoot: File) {
is ModuleDependency -> module.addDependency(modulesById[it.moduleId]!!) is ModuleDependency -> module.addDependency(modulesById[it.moduleId]!!)
is StdlibDependency -> { is StdlibDependency -> {
when { when {
platform.isCommon -> module.addLibrary( platform.isCommon() -> module.addLibrary(
ForTestCompileRuntime.stdlibCommonForTests(), kind = CommonLibraryKind ForTestCompileRuntime.stdlibCommonForTests(), kind = CommonLibraryKind
) )
platform.isJvm -> module.addLibrary(ForTestCompileRuntime.runtimeJarForTests()) platform.isJvm() -> module.addLibrary(ForTestCompileRuntime.runtimeJarForTests())
platform.isJavaScript -> module.addLibrary(ForTestCompileRuntime.stdlibJsForTests(), kind = JSLibraryKind) platform.isJs() -> module.addLibrary(ForTestCompileRuntime.stdlibJsForTests(), kind = JSLibraryKind)
else -> error("Unknown platform $this") else -> error("Unknown platform $this")
} }
} }
@@ -60,8 +63,8 @@ fun AbstractMultiModuleTest.setupMppProjectFromDirStructure(testRoot: File) {
} }
is CoroutinesDependency -> module.enableCoroutines() is CoroutinesDependency -> module.enableCoroutines()
is KotlinTestDependency -> when { is KotlinTestDependency -> when {
platform.isJvm -> module.addLibrary(ForTestCompileRuntime.kotlinTestJUnitJarForTests()) platform.isJvm() -> module.addLibrary(ForTestCompileRuntime.kotlinTestJUnitJarForTests())
platform.isJavaScript -> module.addLibrary(ForTestCompileRuntime.kotlinTestJsJarForTests(), kind = JSLibraryKind) platform.isJs() -> module.addLibrary(ForTestCompileRuntime.kotlinTestJsJarForTests(), kind = JSLibraryKind)
} }
} }
} }
@@ -70,9 +73,9 @@ fun AbstractMultiModuleTest.setupMppProjectFromDirStructure(testRoot: File) {
modulesById.forEach { (nameAndPlatform, module) -> modulesById.forEach { (nameAndPlatform, module) ->
val (name, platform) = nameAndPlatform val (name, platform) = nameAndPlatform
when { when {
platform.isCommon -> module.createFacet(platform, useProjectSettings = false) platform.isCommon() -> module.createFacet(platform, useProjectSettings = false)
else -> { else -> {
val commonModuleId = ModuleId(name, CommonIdePlatformKind.Platform) val commonModuleId = ModuleId(name, CommonPlatforms.defaultCommonPlatform)
module.createFacet(platform, implementedModuleName = commonModuleId.ideaModuleName()) module.createFacet(platform, implementedModuleName = commonModuleId.ideaModuleName())
module.enableMultiPlatform() module.enableMultiPlatform()
@@ -93,7 +96,7 @@ private fun AbstractMultiModuleTest.createModuleWithRoots(
for ((_, isTestRoot, moduleRoot) in infos) { for ((_, isTestRoot, moduleRoot) in infos) {
addRoot(module, moduleRoot, isTestRoot) addRoot(module, moduleRoot, isTestRoot)
if (moduleId.platform.isJavaScript && isTestRoot) { if (moduleId.platform.isJs() && isTestRoot) {
setupJsTestOutput(module) setupJsTestOutput(module)
} }
} }
@@ -126,11 +129,11 @@ private fun AbstractMultiModuleTest.createModule(name: String): Module {
private val testSuffixes = setOf("test", "tests") private val testSuffixes = setOf("test", "tests")
private val platformNames = mapOf( private val platformNames = mapOf(
listOf("header", "common", "expect") to CommonIdePlatformKind.Platform, listOf("header", "common", "expect") to CommonPlatforms.defaultCommonPlatform,
listOf("java", "jvm") to JvmIdePlatformKind.defaultPlatform, listOf("java", "jvm") to JvmPlatforms.defaultJvmPlatform,
listOf("java8", "jvm8") to JvmIdePlatformKind.Platform(JvmTarget.JVM_1_8), listOf("java8", "jvm8") to JvmPlatforms.jvm18,
listOf("java6", "jvm6") to JvmIdePlatformKind.Platform(JvmTarget.JVM_1_6), listOf("java6", "jvm6") to JvmPlatforms.jvm16,
listOf("js", "javascript") to JsIdePlatformKind.Platform listOf("js", "javascript") to JsPlatforms.defaultJsPlatform
) )
private fun parseDirName(dir: File): RootInfo { private fun parseDirName(dir: File): RootInfo {
@@ -159,7 +162,7 @@ private fun parseModuleId(parts: List<String>): ModuleId {
val platform = parsePlatform(parts) val platform = parsePlatform(parts)
val name = parseModuleName(parts) val name = parseModuleName(parts)
val id = parseIndex(parts) ?: 0 val id = parseIndex(parts) ?: 0
assert(id == 0 || !platform.isCommon) assert(id == 0 || !platform.isCommon())
return ModuleId(name, platform, id) return ModuleId(name, platform, id)
} }
@@ -182,7 +185,7 @@ private fun parseIndex(parts: List<String>): Int? {
private data class ModuleId( private data class ModuleId(
val groupName: String, val groupName: String,
val platform: IdePlatform<*, *>, val platform: TargetPlatform,
val index: Int = 0 val index: Int = 0
) { ) {
fun ideaModuleName(): String { fun ideaModuleName(): String {
@@ -191,11 +194,11 @@ private data class ModuleId(
} }
} }
private val IdePlatform<*, *>.presentableName: String private val TargetPlatform.presentableName: String
get() = when { get() = when {
isCommon -> "Common" isCommon() -> "Common"
isJvm -> "JVM" isJvm() -> "JVM"
isJavaScript -> "JS" isJs() -> "JS"
else -> error("Unknown platform $this") 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.ConfigLibraryUtil
import org.jetbrains.kotlin.idea.test.KotlinJdkAndLibraryProjectDescriptor import org.jetbrains.kotlin.idea.test.KotlinJdkAndLibraryProjectDescriptor
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase 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.KotlinTestUtils
import org.jetbrains.kotlin.test.TestJdkKind import org.jetbrains.kotlin.test.TestJdkKind
import org.junit.Assert import org.junit.Assert
@@ -131,7 +131,7 @@ abstract class AbstractMultiModuleTest : DaemonAnalyzerTestCase() {
} }
fun Module.createFacet( fun Module.createFacet(
platformKind: IdePlatform<*, *>? = null, platformKind: TargetPlatform? = null,
useProjectSettings: Boolean = true, useProjectSettings: Boolean = true,
implementedModuleName: String? = null 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.JpsKotlinFacetModuleExtension
import org.jetbrains.kotlin.jps.model.kotlinFacet import org.jetbrains.kotlin.jps.model.kotlinFacet
import org.jetbrains.kotlin.jps.targets.KotlinModuleBuildTarget 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.isJavaScript
import org.jetbrains.kotlin.platform.impl.isJvm import org.jetbrains.kotlin.platform.impl.isJvm
import org.jetbrains.kotlin.platform.orDefault import org.jetbrains.kotlin.platform.orDefault
@@ -468,7 +469,7 @@ abstract class AbstractIncrementalJpsTest(
private fun configureRequiredLibraries() { private fun configureRequiredLibraries() {
myProject.modules.forEach { module -> myProject.modules.forEach { module ->
val platformKind = module.kotlinFacet?.settings?.platform?.kind.orDefault() val platformKind = module.kotlinFacet?.settings?.platform?.idePlatformKind.orDefault()
when { when {
platformKind.isJvm -> { 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.FakeK2NativeCompilerArguments
import org.jetbrains.kotlin.platform.impl.isCommon import org.jetbrains.kotlin.platform.impl.isCommon
import org.jetbrains.kotlin.platform.impl.isJvm 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 java.io.File
import kotlin.reflect.KMutableProperty1 import kotlin.reflect.KMutableProperty1
import kotlin.reflect.full.findAnnotation import kotlin.reflect.full.findAnnotation
@@ -52,11 +54,11 @@ data class ModulesTxt(
val isCommonModule val isCommonModule
get() = get() =
kotlinFacetSettings?.platform.isCommon || kotlinFacetSettings?.platform.isCommon() ||
kotlinFacetSettings?.kind == SOURCE_SET_HOLDER kotlinFacetSettings?.kind == SOURCE_SET_HOLDER
val isJvmModule val isJvmModule
get() = kotlinFacetSettings?.platform.isJvm get() = kotlinFacetSettings?.platform.isJvm()
val expectedBy val expectedBy
get() = dependencies.filter { get() = dependencies.filter {
@@ -11,12 +11,12 @@ import org.jetbrains.jps.model.java.JpsJavaExtensionService
import org.jetbrains.jps.model.module.JpsModule import org.jetbrains.jps.model.module.JpsModule
import org.jetbrains.kotlin.cli.common.arguments.* import org.jetbrains.kotlin.cli.common.arguments.*
import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.platform.IdePlatform import org.jetbrains.kotlin.platform.TargetPlatform
val JpsModule.kotlinFacet: JpsKotlinFacetModuleExtension? val JpsModule.kotlinFacet: JpsKotlinFacetModuleExtension?
get() = container.getChild(JpsKotlinFacetModuleExtension.KIND) get() = container.getChild(JpsKotlinFacetModuleExtension.KIND)
val JpsModule.platform: IdePlatform<*, *>? val JpsModule.platform: TargetPlatform?
get() = kotlinFacet?.settings?.platform get() = kotlinFacet?.settings?.platform
val JpsModule.kotlinKind: KotlinModuleKind 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.jps.model.platform
import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider import org.jetbrains.kotlin.platform.DefaultIdeTargetPlatformKindProvider
import org.jetbrains.kotlin.platform.IdePlatformKind import org.jetbrains.kotlin.platform.IdePlatformKind
import org.jetbrains.kotlin.platform.idePlatformKind
import org.jetbrains.kotlin.platform.impl.* import org.jetbrains.kotlin.platform.impl.*
import org.jetbrains.kotlin.utils.LibraryUtils import org.jetbrains.kotlin.utils.LibraryUtils
import kotlin.system.measureTimeMillis import kotlin.system.measureTimeMillis
@@ -134,7 +135,7 @@ internal class KotlinTargetsIndexBuilder internal constructor(
private fun ensureLoaded(target: ModuleBuildTarget): KotlinModuleBuildTarget<*> { private fun ensureLoaded(target: ModuleBuildTarget): KotlinModuleBuildTarget<*> {
return byJpsModuleBuildTarget.computeIfAbsent(target) { return byJpsModuleBuildTarget.computeIfAbsent(target) {
val platform = target.module.platform?.kind ?: detectTargetPlatform(target) val platform = target.module.platform?.idePlatformKind ?: detectTargetPlatform(target)
when { when {
platform.isCommon -> KotlinCommonModuleBuildTarget(uninitializedContext, target) platform.isCommon -> KotlinCommonModuleBuildTarget(uninitializedContext, target)
@@ -152,7 +153,7 @@ internal class KotlinTargetsIndexBuilder internal constructor(
private fun detectTargetPlatform(target: ModuleBuildTarget): IdePlatformKind<*> { private fun detectTargetPlatform(target: ModuleBuildTarget): IdePlatformKind<*> {
if (hasJsStdLib(target)) return JsIdePlatformKind if (hasJsStdLib(target)) return JsIdePlatformKind
return DefaultIdeTargetPlatformKindProvider.defaultPlatform.kind return DefaultIdeTargetPlatformKindProvider.defaultPlatform.idePlatformKind
} }
private fun hasJsStdLib(target: ModuleBuildTarget): Boolean { 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.build.KotlinDirtySourceFilesHolder
import org.jetbrains.kotlin.jps.incremental.JpsIncrementalCache import org.jetbrains.kotlin.jps.incremental.JpsIncrementalCache
import org.jetbrains.kotlin.jps.model.platform import org.jetbrains.kotlin.jps.model.platform
import org.jetbrains.kotlin.platform.idePlatformKind
class KotlinUnsupportedModuleBuildTarget( class KotlinUnsupportedModuleBuildTarget(
kotlinContext: KotlinCompileContext, kotlinContext: KotlinCompileContext,
jpsModuleBuildTarget: ModuleBuildTarget jpsModuleBuildTarget: ModuleBuildTarget
) : KotlinModuleBuildTarget<BuildMetaInfo>(kotlinContext, jpsModuleBuildTarget) { ) : 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") private fun shouldNotBeCalled(): Nothing = error("Should not be called")