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
This commit is contained in:
committed by
Ilya Gorbunov
parent
90ec151258
commit
2ecea06d3e
+14
-7
@@ -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<String>.addReleaseVersionIfNecessary(shouldAdd: Boolean): Iterable<String> =
|
||||
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)
|
||||
|
||||
@@ -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
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user