You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2019/10/14 22:12:36 UTC

[maven] 03/04: [MNG-6656] Fix bug in AbstractEventXMLFilter (removed processed events)

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

rfscholte pushed a commit to branch MNG-6656
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 87601ecee7e0b631f98d12f1e43751008a46a67e
Author: rfscholte <rf...@apache.org>
AuthorDate: Mon Oct 14 20:40:01 2019 +0200

    [MNG-6656] Fix bug in AbstractEventXMLFilter (removed processed events)
---
 .../xml/sax/filter/AbstractEventXMLFilter.java     | 10 ++++--
 .../sax/filter/ReactorDependencyXMLFilterTest.java | 38 ++++++++++++++++++++++
 2 files changed, 45 insertions(+), 3 deletions(-)

diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractEventXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractEventXMLFilter.java
index d52cb7c..633c533 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractEventXMLFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractEventXMLFilter.java
@@ -1,5 +1,7 @@
 package org.apache.maven.xml.sax.filter;
 
+import java.util.ArrayDeque;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -21,8 +23,10 @@ package org.apache.maven.xml.sax.filter;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Queue;
 
 import org.apache.maven.xml.sax.SAXEvent;
 import org.apache.maven.xml.sax.SAXEventFactory;
@@ -40,7 +44,7 @@ import org.xml.sax.ext.LexicalHandler;
  */
 abstract class AbstractEventXMLFilter extends AbstractSAXFilter
 {
-    private List<SAXEvent> saxEvents = new ArrayList<>();
+    private Queue<SAXEvent> saxEvents = new ArrayDeque<>();
     
     private SAXEventFactory eventFactory;
     
@@ -138,9 +142,9 @@ abstract class AbstractEventXMLFilter extends AbstractSAXFilter
         }
         
         // not with streams due to checked SAXException
-        for ( SAXEvent saxEvent : saxEvents )
+        while( !saxEvents.isEmpty() )
         {
-            saxEvent.execute();
+            saxEvents.poll().execute();
         }
     }
     
diff --git a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ReactorDependencyXMLFilterTest.java b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ReactorDependencyXMLFilterTest.java
index 9cf713c..4367982 100644
--- a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ReactorDependencyXMLFilterTest.java
+++ b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ReactorDependencyXMLFilterTest.java
@@ -106,4 +106,42 @@ public class ReactorDependencyXMLFilterTest extends AbstractXMLFilterTests
         assertThat( actual ).and( expected ).ignoreWhitespace().areIdentical();
     }
 
+    @Test
+    public void multipleDependencies() throws Exception {
+        String input = "<project>\n" + 
+            "  <modelVersion>4.0.0</modelVersion>\n" + 
+            "    <groupId>tests.project</groupId>\n" + 
+            "    <artifactId>duplicate-plugin-defs-merged</artifactId>\n" + 
+            "    <version>1</version>\n" + 
+            "    <build>\n" + 
+            "      <plugins>\n" + 
+            "        <plugin>\n" + 
+            "          <artifactId>maven-compiler-plugin</artifactId>\n" + 
+            "          <dependencies>\n" + 
+            "            <dependency>\n" + 
+            "              <groupId>group</groupId>\n" + 
+            "              <artifactId>first</artifactId>\n" + 
+            "              <version>1</version>\n" + 
+            "            </dependency>\n" + 
+            "          </dependencies>\n" + 
+            "        </plugin>\n" + 
+            "        <plugin>\n" + 
+            "          <artifactId>maven-compiler-plugin</artifactId>\n" + 
+            "          <dependencies>\n" + 
+            "            <dependency>\n" + 
+            "              <groupId>group</groupId>\n" + 
+            "              <artifactId>second</artifactId>\n" + 
+            "              <version>1</version>\n" + 
+            "            </dependency>\n" + 
+            "          </dependencies>\n" + 
+            "        </plugin>\n" + 
+            "      </plugins>\n" + 
+            "    </build>\n" + 
+            "</project>";
+        String expected = input;
+        
+        String actual = transform( input );
+        
+        assertThat( actual ).and( expected ).areIdentical();
+    }
 }