From 6f2f3dc471ee49dc482b3481cd826e89450ca535 Mon Sep 17 00:00:00 2001 From: Dmitry Kichinsky Date: Tue, 15 Oct 2024 21:54:11 +0200 Subject: [PATCH] [maven] IDEA-359629 resolve plugins in projects with packaging "bundle" GitOrigin-RevId: b87ec212d34e5692b633906ca64c28019c1d59df --- .../maven/server/Maven3ModelConverter.java | 35 +++++++++++-------- .../server/Maven3AetherModelConverter.java | 3 +- .../server/utils/Maven3XProjectResolver.java | 10 ++++-- .../utils/Maven40AetherModelConverter.java | 2 +- .../m40/utils/Maven40ModelConverter.java | 23 +++++++++--- 5 files changed, 50 insertions(+), 23 deletions(-) diff --git a/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/Maven3ModelConverter.java b/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/Maven3ModelConverter.java index 354fc7b16b52..5d2e11983c9c 100644 --- a/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/Maven3ModelConverter.java +++ b/plugins/maven/maven3-server-common/src/org/jetbrains/idea/maven/server/Maven3ModelConverter.java @@ -31,9 +31,6 @@ public class Maven3ModelConverter { return convertModel(model, asSourcesList(build.getSourceDirectory()), asSourcesList(build.getTestSourceDirectory()), - Collections.emptyList(), - Collections.emptyList(), - Collections.emptyList(), localRepository); } @@ -45,9 +42,6 @@ public class Maven3ModelConverter { public static MavenModel convertModel(Model model, List sources, List testSources, - Collection dependencies, - Collection dependencyTree, - Collection extensions, File localRepository) { MavenModel result = new MavenModel(); result.setMavenId(new MavenId(model.getGroupId(), model.getArtifactId(), model.getVersion())); @@ -60,12 +54,12 @@ public class Maven3ModelConverter { result.setPackaging(model.getPackaging()); result.setName(model.getName()); result.setProperties(model.getProperties() == null ? new Properties() : model.getProperties()); - result.setPlugins(convertPlugins(model)); + result.setPlugins(convertPlugins(model, Collections.emptyList())); Map convertedArtifacts = new HashMap(); - result.setExtensions(convertArtifacts(extensions, convertedArtifacts, localRepository)); - result.setDependencies(convertArtifacts(dependencies, convertedArtifacts, localRepository)); - result.setDependencyTree(convertDependencyNodes(null, dependencyTree, convertedArtifacts, localRepository)); + result.setExtensions(convertArtifacts(Collections.emptyList(), convertedArtifacts, localRepository)); + result.setDependencies(convertArtifacts(Collections.emptyList(), convertedArtifacts, localRepository)); + result.setDependencyTree(convertDependencyNodes(null, Collections.emptyList(), convertedArtifacts, localRepository)); result.setRemoteRepositories(convertRepositories(model.getRepositories())); result.setRemotePluginRepositories(convertRepositories(model.getPluginRepositories())); @@ -247,7 +241,7 @@ public class Maven3ModelConverter { return result; } - public static List convertPlugins(Model mavenModel) { + protected static List convertPlugins(Model mavenModel, Collection pluginArtifacts) { List result = new ArrayList(); Build build = mavenModel.getBuild(); @@ -255,7 +249,7 @@ public class Maven3ModelConverter { List plugins = build.getPlugins(); if (plugins != null) { for (Plugin each : plugins) { - result.add(convertPlugin(false, each)); + result.add(convertPlugin(false, each, pluginArtifacts)); } } } @@ -263,7 +257,7 @@ public class Maven3ModelConverter { return result; } - private static MavenPlugin convertPlugin(boolean isDefault, Plugin plugin) { + private static MavenPlugin convertPlugin(boolean isDefault, Plugin plugin, Collection pluginArtifacts) { List executions = new ArrayList(plugin.getExecutions().size()); for (PluginExecution each : plugin.getExecutions()) { executions.add(convertExecution(each)); @@ -274,15 +268,28 @@ public class Maven3ModelConverter { deps.add(new MavenId(each.getGroupId(), each.getArtifactId(), each.getVersion())); } + String pluginVersion = getPluginVersion(plugin, pluginArtifacts); return new MavenPlugin(plugin.getGroupId(), plugin.getArtifactId(), - plugin.getVersion(), + pluginVersion, isDefault, "true".equals(plugin.getExtensions()), convertConfiguration(plugin.getConfiguration()), executions, deps); } + private static String getPluginVersion(Plugin plugin, Collection pluginArtifacts) { + String pluginVersion = plugin.getVersion(); + if (null != pluginVersion) return pluginVersion; + if (null == plugin.getGroupId() || null == plugin.getArtifactId()) return null; + for (Artifact each : pluginArtifacts) { + if (plugin.getGroupId().equals(each.getGroupId()) && plugin.getArtifactId().equals(each.getArtifactId())) { + return each.getVersion(); + } + } + return null; + } + public static MavenPlugin.Execution convertExecution(PluginExecution execution) { return new MavenPlugin.Execution(execution.getId(), execution.getPhase(), execution.getGoals(), convertConfiguration(execution.getConfiguration())); } diff --git a/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3AetherModelConverter.java b/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3AetherModelConverter.java index 08f6f3785779..ac277b4a4fb2 100644 --- a/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3AetherModelConverter.java +++ b/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/Maven3AetherModelConverter.java @@ -29,6 +29,7 @@ public final class Maven3AetherModelConverter extends Maven3ModelConverter { List testSources, Collection dependencies, Collection dependencyTree, + Collection pluginArtifacts, Collection extensions, File localRepository) throws RemoteException { MavenModel result = new MavenModel(); @@ -42,7 +43,7 @@ public final class Maven3AetherModelConverter extends Maven3ModelConverter { result.setPackaging(model.getPackaging()); result.setName(model.getName()); result.setProperties(model.getProperties() == null ? new Properties() : model.getProperties()); - result.setPlugins(convertPlugins(model)); + result.setPlugins(convertPlugins(model, pluginArtifacts)); Map convertedArtifacts = new HashMap(); result.setExtensions(convertArtifacts(extensions, convertedArtifacts, localRepository)); diff --git a/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/utils/Maven3XProjectResolver.java b/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/utils/Maven3XProjectResolver.java index 2013c3498eec..f502ef87830a 100644 --- a/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/utils/Maven3XProjectResolver.java +++ b/plugins/maven/maven3-server-impl/src/org/jetbrains/idea/maven/server/utils/Maven3XProjectResolver.java @@ -328,8 +328,14 @@ public class Maven3XProjectResolver { List dependencyNodes = dependencyGraph != null ? dependencyGraph.getChildren() : Collections.emptyList(); model = Maven3AetherModelConverter.convertModelWithAetherDependencyTree( - mavenProject.getModel(), mavenProject.getCompileSourceRoots(), mavenProject.getTestCompileSourceRoots(), - mavenProject.getArtifacts(), dependencyNodes, mavenProject.getExtensionArtifacts(), myEmbedder.getLocalRepositoryFile()); + mavenProject.getModel(), + mavenProject.getCompileSourceRoots(), + mavenProject.getTestCompileSourceRoots(), + mavenProject.getArtifacts(), + dependencyNodes, + mavenProject.getPluginArtifacts(), + mavenProject.getExtensionArtifacts(), + myEmbedder.getLocalRepositoryFile()); } catch (Exception e) { problems.addAll(myEmbedder.collectProblems(mavenProject.getFile(), Collections.singleton(e), modelProblems)); diff --git a/plugins/maven/maven40-server-impl/src/com/intellij/maven/server/m40/utils/Maven40AetherModelConverter.java b/plugins/maven/maven40-server-impl/src/com/intellij/maven/server/m40/utils/Maven40AetherModelConverter.java index dc71543f4a39..bccb96a26ab3 100644 --- a/plugins/maven/maven40-server-impl/src/com/intellij/maven/server/m40/utils/Maven40AetherModelConverter.java +++ b/plugins/maven/maven40-server-impl/src/com/intellij/maven/server/m40/utils/Maven40AetherModelConverter.java @@ -39,7 +39,7 @@ public final class Maven40AetherModelConverter extends Maven40ModelConverter { result.setName(mavenProject.getName()); result.setProperties(mavenProject.getProperties() == null ? new Properties() : mavenProject.getProperties()); //noinspection SSBasedInspection - result.setPlugins(convertPlugins(mavenProject.getModel())); + result.setPlugins(convertPlugins(mavenProject.getModel(), mavenProject.getPluginArtifacts())); Map convertedArtifacts = new HashMap<>(); result.setExtensions(convertArtifacts(mavenProject.getExtensionArtifacts(), convertedArtifacts, localRepository)); diff --git a/plugins/maven/maven40-server-impl/src/com/intellij/maven/server/m40/utils/Maven40ModelConverter.java b/plugins/maven/maven40-server-impl/src/com/intellij/maven/server/m40/utils/Maven40ModelConverter.java index f91cab8462bd..b9106fbfb1e2 100644 --- a/plugins/maven/maven40-server-impl/src/com/intellij/maven/server/m40/utils/Maven40ModelConverter.java +++ b/plugins/maven/maven40-server-impl/src/com/intellij/maven/server/m40/utils/Maven40ModelConverter.java @@ -46,7 +46,7 @@ public class Maven40ModelConverter { result.setPackaging(model.getPackaging()); result.setName(model.getName()); result.setProperties(model.getProperties() == null ? new Properties() : model.getProperties()); - result.setPlugins(convertPlugins(model)); + result.setPlugins(convertPlugins(model, Collections.emptyList())); result.setRemoteRepositories(convertRepositories(model.getRepositories())); result.setRemotePluginRepositories(convertRepositories(model.getPluginRepositories())); @@ -57,7 +57,7 @@ public class Maven40ModelConverter { return result; } - public static List convertPlugins(Model mavenModel) { + protected static List convertPlugins(Model mavenModel, Collection pluginArtifacts) { List result = new ArrayList<>(); Build build = mavenModel.getBuild(); @@ -65,7 +65,7 @@ public class Maven40ModelConverter { List plugins = build.getPlugins(); if (plugins != null) { for (Plugin each : plugins) { - result.add(convertPlugin(each)); + result.add(convertPlugin(each, pluginArtifacts)); } } } @@ -73,7 +73,7 @@ public class Maven40ModelConverter { return result; } - public static MavenPlugin convertPlugin(Plugin plugin) { + private static MavenPlugin convertPlugin(Plugin plugin, Collection pluginArtifacts) { List executions = new ArrayList<>(plugin.getExecutions().size()); for (PluginExecution each : plugin.getExecutions()) { executions.add(convertExecution(each)); @@ -84,15 +84,28 @@ public class Maven40ModelConverter { deps.add(new MavenId(each.getGroupId(), each.getArtifactId(), each.getVersion())); } + String pluginVersion = getPluginVersion(plugin, pluginArtifacts); return new MavenPlugin(plugin.getGroupId(), plugin.getArtifactId(), - plugin.getVersion(), + pluginVersion, false, "true".equals(plugin.getExtensions()), convertConfiguration(plugin.getConfiguration()), executions, deps); } + private static String getPluginVersion(Plugin plugin, Collection pluginArtifacts) { + String pluginVersion = plugin.getVersion(); + if (null != pluginVersion) return pluginVersion; + if (null == plugin.getGroupId() || null == plugin.getArtifactId()) return null; + for (Artifact each : pluginArtifacts) { + if (plugin.getGroupId().equals(each.getGroupId()) && plugin.getArtifactId().equals(each.getArtifactId())) { + return each.getVersion(); + } + } + return null; + } + public static MavenPlugin.Execution convertExecution(PluginExecution execution) { return new MavenPlugin.Execution(execution.getId(), execution.getPhase(), execution.getGoals(), convertConfiguration(execution.getConfiguration()));