This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch navy-spoon
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 6886a597388845d56f798c344c14a1fef27f500d
Author: Guillaume Nodet <[email protected]>
AuthorDate: Tue Mar 31 13:29:17 2026 +0200

    fix: restore buildConfiguration() callback in deprecated build() methods
    
    The MNG-7947 refactoring changed the deprecated build(Reader, String) and
    build(InputStream, String) methods to delegate to the new
    build(ReaderSupplier/StreamSupplier, String) methods, which bypassed the
    overridable buildConfiguration() method. This broke subclasses (such as
    EnhancedPluginDescriptorBuilder in maven-plugin-tools) that override
    buildConfiguration() to intercept the parsed configuration.
    
    Restore the buildConfiguration() callback in the legacy code path while
    still supporting PLUGIN 2.0.0 namespace detection.
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
---
 .../plugin/descriptor/PluginDescriptorBuilder.java | 38 ++++++++++++++++++++--
 1 file changed, 36 insertions(+), 2 deletions(-)

diff --git 
a/compat/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilder.java
 
b/compat/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilder.java
index b6edfc04c1..086a49daaf 100644
--- 
a/compat/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilder.java
+++ 
b/compat/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilder.java
@@ -71,7 +71,24 @@ public PluginDescriptor build(Reader reader) throws 
PlexusConfigurationException
      */
     @Deprecated
     public PluginDescriptor build(Reader reader, String source) throws 
PlexusConfigurationException {
-        return build(() -> reader, source);
+        try {
+            BufferedReader br = new BufferedReader(reader, BUFFER_SIZE);
+            br.mark(BUFFER_SIZE);
+            XMLStreamReader xsr = 
XMLInputFactory.newFactory().createXMLStreamReader(br);
+            xsr.nextTag();
+            String nsUri = xsr.getNamespaceURI();
+            br.reset();
+            if (PLUGIN_2_0_0.equals(nsUri)) {
+                xsr = XMLInputFactory.newFactory().createXMLStreamReader(br);
+                return new PluginDescriptor(new 
PluginDescriptorStaxReader().read(xsr, true));
+            } else {
+                // Call buildConfiguration() for backward compatibility with 
subclasses that override it
+                PlexusConfiguration cfg = buildConfiguration(br);
+                return build(source, cfg);
+            }
+        } catch (XMLStreamException | IOException e) {
+            throw new PlexusConfigurationException(e.getMessage(), e);
+        }
     }
 
     public PluginDescriptor build(ReaderSupplier readerSupplier) throws 
PlexusConfigurationException {
@@ -98,7 +115,24 @@ public PluginDescriptor build(ReaderSupplier 
readerSupplier, String source) thro
      */
     @Deprecated
     public PluginDescriptor build(InputStream input, String source) throws 
PlexusConfigurationException {
-        return build(() -> input, source);
+        try {
+            BufferedInputStream bis = new BufferedInputStream(input, 
BUFFER_SIZE);
+            bis.mark(BUFFER_SIZE);
+            XMLStreamReader xsr = 
XMLInputFactory.newFactory().createXMLStreamReader(bis);
+            xsr.nextTag();
+            String nsUri = xsr.getNamespaceURI();
+            bis.reset();
+            if (PLUGIN_2_0_0.equals(nsUri)) {
+                xsr = XMLInputFactory.newFactory().createXMLStreamReader(bis);
+                return new PluginDescriptor(new 
PluginDescriptorStaxReader().read(xsr, true));
+            } else {
+                // Call buildConfiguration() for backward compatibility with 
subclasses that override it
+                PlexusConfiguration cfg = buildConfiguration(bis);
+                return build(source, cfg);
+            }
+        } catch (XMLStreamException | IOException e) {
+            throw new PlexusConfigurationException(e.getMessage(), e);
+        }
     }
 
     public PluginDescriptor build(StreamSupplier inputSupplier) throws 
PlexusConfigurationException {

Reply via email to