diff --git a/plugins/kotlin/base/analysis/kotlin.base.analysis.iml b/plugins/kotlin/base/analysis/kotlin.base.analysis.iml index 982559721f8c..4c14c7ef9e99 100644 --- a/plugins/kotlin/base/analysis/kotlin.base.analysis.iml +++ b/plugins/kotlin/base/analysis/kotlin.base.analysis.iml @@ -31,7 +31,6 @@ - diff --git a/plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/base/analysis/LibraryDependenciesCache.kt b/plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/base/analysis/LibraryDependenciesCache.kt index 8beff6ae7d13..5c287220bbfe 100644 --- a/plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/base/analysis/LibraryDependenciesCache.kt +++ b/plugins/kotlin/base/analysis/src/org/jetbrains/kotlin/idea/base/analysis/LibraryDependenciesCache.kt @@ -30,7 +30,6 @@ import com.intellij.workspaceModel.storage.VersionedStorageChange import com.intellij.workspaceModel.storage.WorkspaceEntity import com.intellij.workspaceModel.storage.bridgeEntities.api.LibraryEntity import com.intellij.workspaceModel.storage.bridgeEntities.api.ModuleEntity -import org.jetbrains.idea.maven.project.MavenProjectsManager import org.jetbrains.kotlin.idea.base.analysis.libraries.LibraryDependencyCandidate import org.jetbrains.kotlin.idea.base.facet.isHMPPEnabled import org.jetbrains.kotlin.idea.base.projectStructure.* @@ -43,6 +42,7 @@ import org.jetbrains.kotlin.idea.base.util.caching.FineGrainedEntityCache.Compan import org.jetbrains.kotlin.idea.base.util.caching.SynchronizedFineGrainedEntityCache import org.jetbrains.kotlin.idea.base.util.caching.WorkspaceEntityChangeListener import org.jetbrains.kotlin.idea.caches.project.* +import org.jetbrains.kotlin.idea.configuration.isMavenized import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.addToStdlib.safeAs @@ -73,8 +73,7 @@ class LibraryDependenciesCacheImpl(private val project: Project) : LibraryDepend val (dependencyCandidates, sdks) = computeLibrariesAndSdksUsedWithNoFilter(libraryInfo) // Maven is Gradle Metadata unaware, and therefore needs stricter filter. See KTIJ-15758 - val importedFromMaven = project.isImportedFromMaven() - val libraryDependenciesFilter = if (importedFromMaven) + val libraryDependenciesFilter = if (project.isMavenized) StrictEqualityForPlatformSpecificCandidatesFilter else DefaultLibraryDependenciesFilter union SharedNativeLibraryToNativeInteropFallbackDependenciesFilter @@ -82,17 +81,6 @@ class LibraryDependenciesCacheImpl(private val project: Project) : LibraryDepend return LibraryDependencies(libraries, sdks.toList()) } - // Two corner-cases to cover: - // - Maven Plugin is disabled, thus `MavenProjectsManager.getInstance` returns null - // - There are no Maven Plugin at all, thus it throws NCDFE. It shouldn't happen in production (Maven - // plugin is bundled, and there's no easy way to remove it), but might happen in some tests - // In both cases we just want to degrade gracefully and choose default (non-Maven) path - private fun Project.isImportedFromMaven() = try { - MavenProjectsManager.getInstance(this)?.isMavenizedProject ?: false - } catch (e: NoClassDefFoundError) { - false - } - //NOTE: used LibraryRuntimeClasspathScope as reference private fun computeLibrariesAndSdksUsedWithNoFilter(libraryInfo: LibraryInfo): LibraryDependencyCandidatesAndSdkInfos { val libraries = LinkedHashSet() diff --git a/plugins/kotlin/base/facet/src/org/jetbrains/kotlin/idea/configuration/BuildSystemType.kt b/plugins/kotlin/base/facet/src/org/jetbrains/kotlin/idea/configuration/BuildSystemType.kt index a302c5ae10e7..93c86e9e0eee 100644 --- a/plugins/kotlin/base/facet/src/org/jetbrains/kotlin/idea/configuration/BuildSystemType.kt +++ b/plugins/kotlin/base/facet/src/org/jetbrains/kotlin/idea/configuration/BuildSystemType.kt @@ -4,6 +4,7 @@ package org.jetbrains.kotlin.idea.configuration import com.intellij.openapi.extensions.ExtensionPointName import com.intellij.openapi.module.Module +import com.intellij.openapi.project.Project enum class BuildSystemType { JPS, Gradle, AndroidGradle, Maven @@ -12,6 +13,9 @@ enum class BuildSystemType { interface BuildSystemTypeDetector { fun detectBuildSystemType(module: Module): BuildSystemType? + // null means specific EP can't answer + fun isMavenizedProject(project: Project): Boolean? = null + companion object { val EP_NAME = ExtensionPointName.create("org.jetbrains.kotlin.buildSystemTypeDetector") } @@ -24,3 +28,11 @@ val Module.buildSystemType: BuildSystemType .firstNotNullOfOrNull { it.detectBuildSystemType(this) } ?: BuildSystemType.JPS } + +val Project.isMavenized: Boolean + get() { + return BuildSystemTypeDetector.EP_NAME + .extensionList + .firstNotNullOfOrNull { it.isMavenizedProject(this) } + ?: false + } diff --git a/plugins/kotlin/maven/src/org/jetbrains/kotlin/idea/maven/MavenDetector.kt b/plugins/kotlin/maven/src/org/jetbrains/kotlin/idea/maven/MavenDetector.kt index c262ad361453..8a7474a5341f 100644 --- a/plugins/kotlin/maven/src/org/jetbrains/kotlin/idea/maven/MavenDetector.kt +++ b/plugins/kotlin/maven/src/org/jetbrains/kotlin/idea/maven/MavenDetector.kt @@ -3,6 +3,7 @@ package org.jetbrains.kotlin.idea.maven import com.intellij.openapi.module.Module +import com.intellij.openapi.project.Project import org.jetbrains.idea.maven.project.MavenProjectsManager import org.jetbrains.kotlin.idea.configuration.BuildSystemType import org.jetbrains.kotlin.idea.configuration.BuildSystemTypeDetector @@ -16,4 +17,8 @@ class MavenDetector : BuildSystemTypeDetector { null } } -} \ No newline at end of file + + override fun isMavenizedProject(project: Project): Boolean { + return !project.isDisposed && MavenProjectsManager.getInstance(project).isMavenizedProject + } +}