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
+ }
+}