Split modules scan based if facedSettings can affect api/lang level of module

^KTIJ-249 Fixed

Original commit: d280fb1fe466ef7b6ef7559067032033bedefd6e
This commit is contained in:
Vladimir Dolzhenko
2020-12-16 20:59:34 +01:00
parent e7c4121e67
commit f2fa36f9cb
@@ -20,6 +20,7 @@ import com.intellij.notification.NotificationDisplayType
import com.intellij.notification.NotificationsConfiguration import com.intellij.notification.NotificationsConfiguration
import com.intellij.openapi.application.runReadAction import com.intellij.openapi.application.runReadAction
import com.intellij.openapi.externalSystem.service.project.manage.ProjectDataImportListener import com.intellij.openapi.externalSystem.service.project.manage.ProjectDataImportListener
import com.intellij.openapi.module.Module
import com.intellij.openapi.progress.ProgressIndicator import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.progress.Task import com.intellij.openapi.progress.Task
@@ -27,8 +28,10 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.startup.StartupActivity import com.intellij.openapi.startup.StartupActivity
import com.intellij.psi.search.FileTypeIndex import com.intellij.psi.search.FileTypeIndex
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.KotlinJvmBundle import org.jetbrains.kotlin.idea.KotlinJvmBundle
import org.jetbrains.kotlin.idea.compiler.configuration.Kotlin2JvmCompilerArgumentsHolder
import org.jetbrains.kotlin.idea.configuration.notifyOutdatedBundledCompilerIfNecessary import org.jetbrains.kotlin.idea.configuration.notifyOutdatedBundledCompilerIfNecessary
import org.jetbrains.kotlin.idea.configuration.ui.notifications.notifyKotlinStyleUpdateIfNeeded import org.jetbrains.kotlin.idea.configuration.ui.notifications.notifyKotlinStyleUpdateIfNeeded
import org.jetbrains.kotlin.idea.project.getAndCacheLanguageLevelByDependencies import org.jetbrains.kotlin.idea.project.getAndCacheLanguageLevelByDependencies
@@ -74,16 +77,33 @@ class KotlinConfigurationCheckerService(val project: Project) {
val totalModules = modules.size val totalModules = modules.size
for ((index, module) in modules.withIndex()) { project.runReadActionInSmartMode {
indicator.fraction = index * 1.0 / totalModules val facetSettingsProvider = KotlinFacetSettingsProvider.getInstance(project) ?: return@runReadActionInSmartMode
val anyKotlinFileInModule = project.runReadActionInSmartMode { var referenceModuleWithUseProjectSettings: Module? = null
!project.isDisposed && !module.isDisposed val filteredModules = modules.withIndex().filter {
&& FileTypeIndex.containsFileOfType(KotlinFileType.INSTANCE, module.getModuleScope(true)) indicator.checkCanceled()
indicator.fraction = (it.index / (2.0 * totalModules))
val facetSettings = facetSettingsProvider.getInitializedSettings(it.value)
val useProjectSettings = facetSettings.useProjectSettings
if (useProjectSettings) {
referenceModuleWithUseProjectSettings = it.value
}
!useProjectSettings
} }
if (anyKotlinFileInModule) {
indicator.text2 = KotlinJvmBundle.message("configure.kotlin.language.settings.0.module", module.name) referenceModuleWithUseProjectSettings?.getAndCacheLanguageLevelByDependencies()
runReadAction {
for ((index, module) in filteredModules) {
indicator.checkCanceled()
indicator.fraction = 0.5 + (index / (2.0 * filteredModules.size))
val anyKotlinFileInModule =
!project.isDisposed && !module.isDisposed
&& FileTypeIndex.containsFileOfType(KotlinFileType.INSTANCE, module.getModuleScope(true))
if (anyKotlinFileInModule) {
indicator.text2 = KotlinJvmBundle.message("configure.kotlin.language.settings.0.module", module.name)
module.getAndCacheLanguageLevelByDependencies() module.getAndCacheLanguageLevelByDependencies()
} }
} }