Copilot commented on code in PR #12351:
URL: https://github.com/apache/maven/pull/12351#discussion_r3470442929


##########
impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvnup/goals/PluginUpgradeStrategy.java:
##########
@@ -728,7 +733,8 @@ private boolean addPluginManagementForEffectivePlugins(
             if (upgrade != null) {
                 // Check if plugin is already managed
                 if (!isPluginAlreadyManagedInElement(managedPluginsElement, 
upgrade)) {

Review Comment:
   This change still injects pluginManagement (and possibly build/plugins 
overrides) for plugins that appear only via the effective model from a remote 
parent. That’s the behavior reported in #11606; adding a comment doesn’t 
prevent the spurious injection. To match the PR description/title, the 
effective-model plugin list should be filtered to only plugins declared in 
local POMs (collected via collectLocallyDeclaredPluginKeys).



##########
impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvnup/goals/PluginUpgradeStrategy.java:
##########
@@ -795,8 +808,12 @@ private boolean addDirectPluginOverrides(UpgradeContext 
context, Document pomDoc
             PluginUpgrade upgrade = pluginUpgrades.get(pluginKey);
             if (upgrade != null) {
                 if (!isPluginAlreadyManagedInElement(pluginsElement, upgrade)) 
{
-                    DomUtils.createPlugin(
+                    Element plugin = DomUtils.createPlugin(
                             pluginsElement, upgrade.groupId(), 
upgrade.artifactId(), upgrade.minVersion());

Review Comment:
   Direct build/plugins overrides should also be skipped for plugins not 
declared in local POMs; otherwise mvnup can still inject overrides for 
remote-parent-only plugins and change builds the project doesn’t control.



##########
impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvnup/goals/PluginUpgradeStrategy.java:
##########
@@ -132,6 +133,9 @@ public UpgradeResult doApply(UpgradeContext context, 
Map<Path, Document> pomMap)
             // Phase 2: For each POM, build effective model using the session 
and analyze plugins
             PluginAnalysisResults analysisResults = 
analyzePluginsUsingEffectiveModels(context, pomMap, tempDir);
 
+            // Collect locally declared plugin keys so we can add comments for 
remote-parent overrides
+            Set<String> localPluginKeys = 
collectLocallyDeclaredPluginKeys(pomMap);

Review Comment:
   The comment says localPluginKeys are collected to add comments for 
remote-parent overrides, but the PR description says remote-parent-only plugins 
should be skipped to avoid spurious injection. Update this comment to reflect 
the intended behavior (filtering), otherwise it’s misleading for maintainers.



##########
impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvnup/goals/PluginUpgradeStrategyTest.java:
##########
@@ -825,12 +832,12 @@ void shouldDetectInheritedPluginsFromRemoteParent() 
throws Exception {
         }
 
         @Test
-        @DisplayName("should not add direct build/plugins override when plugin 
version comes from pluginManagement")
-        void shouldNotAddDirectOverrideWhenVersionFromPluginManagement() 
throws Exception {
+        @DisplayName("should override remote parent plugin via 
pluginManagement with comment, not direct build/plugins")
+        void shouldOverrideRemoteParentPluginViaPluginManagementWithComment() 
throws Exception {

Review Comment:
   This test currently expects a pluginManagement override + comment for a 
plugin coming only from a remote parent. If remote-parent-only plugins are 
meant to be skipped, rename the test to reflect that expectation (no injection).



##########
impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvnup/goals/PluginUpgradeStrategyTest.java:
##########
@@ -868,6 +875,11 @@ void 
shouldNotAddDirectOverrideWhenVersionFromPluginManagement() throws Exceptio
                             .orElse("")));
             assertTrue(hasEnforcerInPM, "Should have enforcer in 
pluginManagement");
 
+            String xml = DomUtils.toXml(document);
+            assertTrue(
+                    xml.contains("Override version inherited from parent"),
+                    "Should add comment explaining the override");

Review Comment:
   If remote-parent-only plugins are meant to be skipped (per PR 
description/title), this assertion (and earlier assertions in the same test 
that require pluginManagement to exist) should be inverted. As written, this 
test enforces the spurious injection behavior (#11606) by expecting an injected 
override + comment for a plugin not declared in any local POM.



##########
impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvnup/goals/PluginUpgradeStrategyTest.java:
##########
@@ -806,12 +807,18 @@ void shouldDetectInheritedPluginsFromRemoteParent() 
throws Exception {
                 UpgradeResult result = strategy.doApply(context, pomMap);
 
                 assertTrue(result.success(), "Strategy should succeed");
-                assertTrue(result.modifiedCount() > 0, "Should have added 
plugin management for inherited plugins");
+                assertTrue(result.modifiedCount() > 0, "Should have modified 
POM for remote parent plugin upgrade");
 
                 String xml = DomUtils.toXml(document);
+                assertTrue(

Review Comment:
   With the intended fix (skip effective-model plugins not declared in local 
POMs), a project that only inherits a plugin from a remote parent should not be 
modified. These assertions currently expect injection and should be inverted.



##########
impl/maven-cli/src/test/java/org/apache/maven/cling/invoker/mvnup/goals/PluginUpgradeStrategyTest.java:
##########
@@ -773,11 +773,12 @@ void shouldHaveValidPluginUpgradeDefinitions() throws 
Exception {
     class InheritedPluginDetectionTests {
 
         @Test
-        @DisplayName("should detect inherited plugins from remote parent POM 
and add pluginManagement")
-        void shouldDetectInheritedPluginsFromRemoteParent() throws Exception {
-            // org.apache:apache:23 defines maven-enforcer-plugin:1.4.1 in 
pluginManagement.
-            // A child POM that inherits from this parent should get 
pluginManagement overrides
-            // added by mvnup for plugins that need Maven 4 compatibility 
upgrades.
+        @DisplayName("should inject pluginManagement with comment for plugins 
inherited from remote parent")
+        void shouldInjectPluginManagementWithCommentForRemoteParentPlugins() 
throws Exception {

Review Comment:
   This test name/DisplayName currently asserts pluginManagement should be 
injected for a plugin coming only from a remote parent, which contradicts the 
PR summary (and the reported bug). If the intended fix is to skip 
remote-parent-only plugins, rename the test accordingly to match the expected 
behavior.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to