mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[kotlin] Remove dependency from kotlin.base to intellij.maven
Instead, use BuildSystemTypeDetector service to wire information about Maven into kotlin.base ^KTIJ-15758 GitOrigin-RevId: c843f16865035f736488af72d3978e72485a18af
This commit is contained in:
committed by
intellij-monorepo-bot
parent
2d1d0f86e0
commit
a8e31df6da
@@ -31,7 +31,6 @@
|
||||
<orderEntry type="module" module-name="kotlin.base.klib" />
|
||||
<orderEntry type="module" module-name="kotlin.base.scripting" />
|
||||
<orderEntry type="module" module-name="kotlin.base.resources" />
|
||||
<orderEntry type="module" module-name="intellij.maven" />
|
||||
<orderEntry type="module" module-name="intellij.platform.util.jdom" />
|
||||
<orderEntry type="module" module-name="intellij.platform.util.classLoader" />
|
||||
<orderEntry type="module" module-name="intellij.platform.projectModel.impl" />
|
||||
|
||||
+2
-14
@@ -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<LibraryDependencyCandidate>()
|
||||
|
||||
+12
@@ -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<BuildSystemTypeDetector>("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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun isMavenizedProject(project: Project): Boolean {
|
||||
return !project.isDisposed && MavenProjectsManager.getInstance(project).isMavenizedProject
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user