From 2ecea06d3e181efc9f87b42812f816380156436f Mon Sep 17 00:00:00 2001 From: Dmitry Savvinov Date: Tue, 28 Aug 2018 20:41:30 +0300 Subject: [PATCH] Do not coerce inferred language levels when importing from facet Rationaly is that facet importer knows better about which language versions should be used, so we shouldn't interfere. Otherwise, Gradle or Maven projects which have upgraded corresponding plugin to 1.3 will be imported with 1.2 levels, which is undesirable --- .../idea/facet/KotlinVersionInfoProvider.kt | 21 ++++++++++++------- .../jetbrains/kotlin/idea/facet/facetUtils.kt | 11 ++++++++-- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/facet/KotlinVersionInfoProvider.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/facet/KotlinVersionInfoProvider.kt index 4f5db32620e..ff4a541459a 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/facet/KotlinVersionInfoProvider.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/facet/KotlinVersionInfoProvider.kt @@ -52,20 +52,24 @@ fun getRuntimeLibraryVersions( fun getLibraryLanguageLevel( module: Module, rootModel: ModuleRootModel?, - targetPlatform: TargetPlatformKind<*>? + targetPlatform: TargetPlatformKind<*>?, + coerceRuntimeLibraryVersionToReleased: Boolean = true ): LanguageVersion { - val minVersion = (getRuntimeLibraryVersions(module, rootModel, targetPlatform ?: TargetPlatformKind.DEFAULT_PLATFORM) + - VersionView.RELEASED_VERSION.versionString).minWith(VersionComparatorUtil.COMPARATOR) - return getDefaultLanguageLevel(module, minVersion) + val minVersion = getRuntimeLibraryVersions(module, rootModel, targetPlatform ?: TargetPlatformKind.DEFAULT_PLATFORM) + .addReleaseVersionIfNecessary(coerceRuntimeLibraryVersionToReleased) + .minWith(VersionComparatorUtil.COMPARATOR) + return getDefaultLanguageLevel(module, minVersion, coerceRuntimeLibraryVersionToReleased) } fun getDefaultLanguageLevel( module: Module, - explicitVersion: String? = null + explicitVersion: String? = null, + coerceRuntimeLibraryVersionToReleased: Boolean = true ): LanguageVersion { val libVersion = explicitVersion - ?: (KotlinVersionInfoProvider.EP_NAME.extensions - .mapNotNull { it.getCompilerVersion(module) } + VersionView.RELEASED_VERSION.versionString) + ?: KotlinVersionInfoProvider.EP_NAME.extensions + .mapNotNull { it.getCompilerVersion(module) } + .addReleaseVersionIfNecessary(coerceRuntimeLibraryVersionToReleased) .minWith(VersionComparatorUtil.COMPARATOR) ?: return VersionView.RELEASED_VERSION return when { @@ -77,6 +81,9 @@ fun getDefaultLanguageLevel( } } +private fun Iterable.addReleaseVersionIfNecessary(shouldAdd: Boolean): Iterable = + if (shouldAdd) this + VersionView.RELEASED_VERSION.versionString else this + fun getRuntimeLibraryVersion(module: Module): String? { val targetPlatform = KotlinFacetSettingsProvider.getInstance(module.project).getInitializedSettings(module).targetPlatformKind val versions = getRuntimeLibraryVersions(module, null, targetPlatform ?: TargetPlatformKind.DEFAULT_PLATFORM) diff --git a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt index 7228b69b99f..8690cba8947 100644 --- a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt @@ -82,14 +82,21 @@ fun KotlinFacetSettings.initializeIfNeeded( if (shouldInferLanguageLevel) { languageLevel = (if (useProjectSettings) LanguageVersion.fromVersionString(commonArguments.languageVersion) else null) - ?: getDefaultLanguageLevel(module, compilerVersion) + ?: getDefaultLanguageLevel(module, compilerVersion, coerceRuntimeLibraryVersionToReleased = compilerVersion == null) } if (shouldInferAPILevel) { apiLevel = if (useProjectSettings) { LanguageVersion.fromVersionString(commonArguments.apiVersion) ?: languageLevel } else { - languageLevel!!.coerceAtMost(getLibraryLanguageLevel(module, rootModel, targetPlatformKind)) + languageLevel!!.coerceAtMost( + getLibraryLanguageLevel( + module, + rootModel, + targetPlatformKind, + coerceRuntimeLibraryVersionToReleased = compilerVersion == null + ) + ) } } }