Ignore non-kotlin modules during building migration information (KT-27100)

Otherwise maximum settings might be always obtained from project compiler
settings and thus stay unchanged during migration process.

 #KT-27100 Fixed
This commit is contained in:
Nikolay Krasko
2018-09-26 13:14:15 +03:00
parent 2d52865415
commit 056c61090d
@@ -9,8 +9,10 @@ import com.intellij.openapi.actionSystem.ActionManager
import com.intellij.openapi.actionSystem.ActionPlaces
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.externalSystem.ExternalSystemModulePropertyManager
import com.intellij.openapi.externalSystem.service.project.manage.ProjectDataImportListener
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.roots.ProjectRootManager
@@ -25,6 +27,7 @@ import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.idea.configuration.ui.MigrationNotificationDialog
import org.jetbrains.kotlin.idea.facet.KotlinFacet
import org.jetbrains.kotlin.idea.framework.GRADLE_SYSTEM_ID
import org.jetbrains.kotlin.idea.framework.MAVEN_SYSTEM_ID
import org.jetbrains.kotlin.idea.migration.CodeMigrationAction
@@ -265,6 +268,11 @@ private fun collectMaxCompilerSettings(project: Project): LanguageVersionSetting
var maxLanguageVersion: LanguageVersion? = null
for (module in ModuleManager.getInstance(project).modules) {
if (!module.isKotlinModule()) {
// Otherwise project compiler settings will give unreliable maximum for compiler settings
continue
}
val languageVersionSettings = module.languageVersionSettings
if (maxApiVersion == null || languageVersionSettings.apiVersion > maxApiVersion) {
@@ -278,4 +286,16 @@ private fun collectMaxCompilerSettings(project: Project): LanguageVersionSetting
LanguageVersionSettingsImpl(maxLanguageVersion ?: LanguageVersion.LATEST_STABLE, maxApiVersion ?: ApiVersion.LATEST_STABLE)
}
}
private fun Module.isKotlinModule(): Boolean {
if (isDisposed) return false
if (KotlinFacet.get(this) != null) {
return true
}
// This code works only for Maven and Gradle import, and it's expected that Kotlin facets are configured for
// all modules with external system.
return false
}