Don't show "Kotlin not configured" notification for projects that have Kotlin common runtime in scope

#KT-15331 Fixed
This commit is contained in:
Dmitry Jemerov
2016-12-19 18:07:52 +01:00
parent 568523b065
commit 5f124e9781
3 changed files with 12 additions and 4 deletions
@@ -24,11 +24,13 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Computable import com.intellij.openapi.util.Computable
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.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.configuration.ui.notifications.ConfigureKotlinNotification import org.jetbrains.kotlin.idea.configuration.ui.notifications.ConfigureKotlinNotification
import org.jetbrains.kotlin.idea.util.projectStructure.allModules import org.jetbrains.kotlin.idea.util.projectStructure.allModules
import org.jetbrains.kotlin.idea.versions.getKotlinJsRuntimeMarkerClass import org.jetbrains.kotlin.idea.versions.getKotlinJsRuntimeMarkerClass
import org.jetbrains.kotlin.idea.versions.getKotlinJvmRuntimeMarkerClass import org.jetbrains.kotlin.idea.versions.getKotlinJvmRuntimeMarkerClass
import org.jetbrains.kotlin.idea.vfilefinder.JvmIDEVirtualFileFinder
import org.jetbrains.kotlin.utils.ifEmpty import org.jetbrains.kotlin.utils.ifEmpty
data class RepositoryDescription(val id: String, val name: String, val url: String, val isSnapshot: Boolean) data class RepositoryDescription(val id: String, val name: String, val url: String, val isSnapshot: Boolean)
@@ -127,9 +129,11 @@ fun getNonConfiguredModules(project: Project, excludeModules: Collection<Module>
} }
} }
fun hasKotlinJvmOrJsRuntimeInScope(module: Module): Boolean { fun hasAnyKotlinRuntimeInScope(module: Module): Boolean {
val scope = module.getModuleWithDependenciesAndLibrariesScope(hasKotlinFilesOnlyInTests(module)) val scope = module.getModuleWithDependenciesAndLibrariesScope(hasKotlinFilesOnlyInTests(module))
return getKotlinJvmRuntimeMarkerClass(module.project, scope) != null || getKotlinJsRuntimeMarkerClass(module.project, scope) != null return getKotlinJvmRuntimeMarkerClass(module.project, scope) != null ||
getKotlinJsRuntimeMarkerClass(module.project, scope) != null ||
hasKotlinCommonRuntimeInScope(scope)
} }
fun hasKotlinJvmRuntimeInScope(module: Module): Boolean { fun hasKotlinJvmRuntimeInScope(module: Module): Boolean {
@@ -142,6 +146,10 @@ fun hasKotlinJsRuntimeInScope(module: Module): Boolean {
return getKotlinJsRuntimeMarkerClass(module.project, scope) != null return getKotlinJsRuntimeMarkerClass(module.project, scope) != null
} }
fun hasKotlinCommonRuntimeInScope(scope: GlobalSearchScope): Boolean {
return JvmIDEVirtualFileFinder(scope).hasMetadataPackage(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME)
}
fun hasKotlinFilesOnlyInTests(module: Module): Boolean { fun hasKotlinFilesOnlyInTests(module: Module): Boolean {
return !hasKotlinFilesInSources(module) && FileTypeIndex.containsFileOfType(KotlinFileType.INSTANCE, module.getModuleScope(true)) return !hasKotlinFilesInSources(module) && FileTypeIndex.containsFileOfType(KotlinFileType.INSTANCE, module.getModuleScope(true))
} }
@@ -77,7 +77,7 @@ class KotlinSetupEnvironmentNotificationProvider(
return createSetupSdkPanel(myProject, psiFile) return createSetupSdkPanel(myProject, psiFile)
} }
if (!hasKotlinJvmOrJsRuntimeInScope(module) && if (!hasAnyKotlinRuntimeInScope(module) &&
UnsupportedAbiVersionNotificationPanelProvider.collectBadRoots(module).isEmpty()) { UnsupportedAbiVersionNotificationPanelProvider.collectBadRoots(module).isEmpty()) {
return createKotlinNotConfiguredPanel(module) return createKotlinNotConfiguredPanel(module)
} }
@@ -51,7 +51,7 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator {
return ConfigureKotlinStatus.NON_APPLICABLE return ConfigureKotlinStatus.NON_APPLICABLE
} }
if (hasKotlinJvmRuntimeInScope(module)) { if (hasAnyKotlinRuntimeInScope(module)) {
return ConfigureKotlinStatus.CONFIGURED return ConfigureKotlinStatus.CONFIGURED
} }