From ee77c473f5b3ebea74ac26bf095e57fc3f1cf1cc Mon Sep 17 00:00:00 2001 From: Vladimir Dolzhenko Date: Tue, 4 Nov 2025 21:07:29 +0100 Subject: [PATCH] [kotlin] KTIJ-36184 Add required kotlin-maven-allopen dependency GitOrigin-RevId: 09dc0abf8c4637d5a2effd9dbaf9ebbe9f4ff0e3 --- .../jetbrains/kotlin/idea/maven/PomFile.kt | 26 +++++++++++++++++-- ...otlinCompilerPluginProjectConfigurators.kt | 16 ++++++++++-- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/plugins/kotlin/maven/src/org/jetbrains/kotlin/idea/maven/PomFile.kt b/plugins/kotlin/maven/src/org/jetbrains/kotlin/idea/maven/PomFile.kt index 084073db6ddc..29cf63e2262a 100644 --- a/plugins/kotlin/maven/src/org/jetbrains/kotlin/idea/maven/PomFile.kt +++ b/plugins/kotlin/maven/src/org/jetbrains/kotlin/idea/maven/PomFile.kt @@ -155,6 +155,27 @@ class PomFile private constructor(private val xmlFile: XmlFile, val domModel: Ma return plugin } + fun addPluginDependency(plugin: MavenDomPlugin, artifact: MavenId): MavenDomDependency? { + ensureBuild() + + val dependencies = plugin.dependencies + + dependencies.dependencies.firstOrNull { + it.groupId.stringValue == artifact.groupId && + it.artifactId.stringValue == artifact.artifactId + }?.let { return it } + + with(dependencies.addDependency()) { + groupId.stringValue = artifact.groupId + artifactId.stringValue = artifact.artifactId + artifact.version?.let { + version.stringValue = it + } + ensureTagExists() + return this + } + } + fun findPlugin(groupArtifact: MavenId): MavenDomPlugin? = domModel.build.plugins.plugins.firstOrNull { it.matches(groupArtifact) } fun isPluginAfter(plugin: MavenDomPlugin, referencePlugin: MavenDomPlugin): Boolean { @@ -650,14 +671,15 @@ fun PomFile.changeLanguageVersion(languageVersion: String?, apiVersion: String?) } @ApiStatus.Internal -fun PomFile.addKotlinCompilerPlugins(name: String) { - val kotlinPlugin = findPlugin(kotlinPluginId(null)) ?: return +fun PomFile.addKotlinCompilerPlugin(name: String): MavenDomPlugin? { + val kotlinPlugin = findPlugin(kotlinPluginId(null)) ?: return null val configurationTag = kotlinPlugin.configuration.ensureTagExists() val compilerPluginsTag = configurationTag.findSubTagOrCreate("compilerPlugins") compilerPluginsTag.findSubTags("plugin").firstOrNull { it.value.trimmedText == name } ?: run { val pluginTag = compilerPluginsTag.createChildTag("plugin", name) compilerPluginsTag.add(pluginTag) } + return kotlinPlugin } internal fun MavenDomDependencies.findDependencies(artifact: MavenId, scope: MavenArtifactScope? = null) = diff --git a/plugins/kotlin/maven/src/org/jetbrains/kotlin/idea/maven/configuration/mavenKotlinCompilerPluginProjectConfigurators.kt b/plugins/kotlin/maven/src/org/jetbrains/kotlin/idea/maven/configuration/mavenKotlinCompilerPluginProjectConfigurators.kt index 4c3c98cc9988..49ce7c8cf2d3 100644 --- a/plugins/kotlin/maven/src/org/jetbrains/kotlin/idea/maven/configuration/mavenKotlinCompilerPluginProjectConfigurators.kt +++ b/plugins/kotlin/maven/src/org/jetbrains/kotlin/idea/maven/configuration/mavenKotlinCompilerPluginProjectConfigurators.kt @@ -7,11 +7,14 @@ import com.intellij.platform.backend.observation.launchTracked import com.intellij.psi.PsiFile import com.intellij.psi.xml.XmlFile import kotlinx.coroutines.CoroutineScope +import org.jetbrains.idea.maven.model.MavenId import org.jetbrains.idea.maven.project.MavenProjectsManager import org.jetbrains.kotlin.idea.configuration.KotlinCompilerPluginProjectConfigurator import org.jetbrains.kotlin.idea.maven.KotlinMavenBundle import org.jetbrains.kotlin.idea.maven.PomFile -import org.jetbrains.kotlin.idea.maven.addKotlinCompilerPlugins +import org.jetbrains.kotlin.idea.maven.addKotlinCompilerPlugin +import org.jetbrains.kotlin.idea.maven.configuration.KotlinMavenConfigurator.Companion.GROUP_ID +import org.jetbrains.kotlin.idea.maven.configuration.KotlinMavenConfigurator.Companion.KOTLIN_VERSION_PROPERTY import org.jetbrains.kotlin.idea.maven.configuration.KotlinMavenConfigurator.Companion.findModulePomFile import org.jetbrains.kotlin.idea.maven.configuration.KotlinMavenConfigurator.Companion.kotlinPluginId import org.jetbrains.kotlin.idea.util.application.executeWriteCommand @@ -40,13 +43,19 @@ abstract class AbstractMavenKotlinCompilerPluginProjectConfigurator(private val coroutineScope.launchTracked { edtWriteAction { project.executeWriteCommand(KotlinMavenBundle.message("command.name.configure.0", xmlFile.name), null) { - pom.addKotlinCompilerPlugins(kotlinPluginName) + pom.addKotlinCompilerPlugin(kotlinPluginName)?.let { kotlinPlugin -> + pluginDependencyMavenId?.let { + pom.addPluginDependency(kotlinPlugin, it) + } + } } } } return xmlFile } + protected abstract val pluginDependencyMavenId: MavenId? + protected abstract val kotlinPluginName: String } @@ -54,6 +63,9 @@ class SpringMavenKotlinCompilerPluginProjectConfigurator(coroutineScope: Corouti override val kotlinPluginName: String get() = "spring" + override val pluginDependencyMavenId: MavenId + get() = MavenId(GROUP_ID, "kotlin-maven-allopen", $$"${$$KOTLIN_VERSION_PROPERTY}") + override val compilerId: String = "kotlin-spring" } \ No newline at end of file