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 2020/10/21 18:13:19 UTC

[maven] 03/06: LexicalHandler and ContentHandler are at same level, so don't set LexicalHandler with parent

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

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

commit 4ea4c0f887394b323cf9b3dbd628a164423db189
Author: rfscholte <rf...@apache.org>
AuthorDate: Sat Oct 17 16:42:31 2020 +0200

    LexicalHandler and ContentHandler are at same level, so don't set LexicalHandler with parent
---
 .../xml/sax/filter/AbstractEventXMLFilter.java     |  4 +---
 .../maven/xml/sax/filter/AbstractSAXFilter.java    |  1 +
 .../xml/sax/filter/BuildPomXMLFilterFactory.java   | 28 ++++++++++------------
 .../maven/xml/sax/filter/CiFriendlyXMLFilter.java  | 10 ++++++++
 .../sax/filter/ConsumerPomXMLFilterFactory.java    |  4 +---
 .../maven/xml/sax/filter/ModulesXMLFilter.java     |  4 +---
 .../xml/sax/filter/RelativePathXMLFilter.java      |  4 +---
 .../xml/sax/filter/ConsumerPomXMLFilterTest.java   | 18 ++++++++++++++
 8 files changed, 46 insertions(+), 27 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 f5246b1..1b72d11 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
@@ -29,8 +29,6 @@ import org.apache.maven.xml.sax.SAXEventFactory;
 import org.xml.sax.Attributes;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.ext.LexicalHandler;
 
 /**
  * Builds up a list of SAXEvents, which will be executed with {@link #executeEvents()}
@@ -64,7 +62,7 @@ abstract class AbstractEventXMLFilter extends AbstractSAXFilter
         super();
     }
 
-    <T extends XMLReader & LexicalHandler> AbstractEventXMLFilter( T parent )
+    AbstractEventXMLFilter( AbstractSAXFilter parent )
     {
         setParent( parent );
     }
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractSAXFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractSAXFilter.java
index e9df96f..1761936 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractSAXFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractSAXFilter.java
@@ -43,6 +43,7 @@ public class AbstractSAXFilter extends XMLFilterImpl implements LexicalHandler
     public AbstractSAXFilter( AbstractSAXFilter parent )
     {
         setParent( parent );
+        parent.setLexicalHandler( this );
     }
     
     public LexicalHandler getLexicalHandler()
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java
index 6f3f319..626c7ac 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java
@@ -26,8 +26,6 @@ import java.util.function.Function;
 
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.sax.SAXTransformerFactory;
 
 import org.apache.maven.xml.Factories;
 import org.xml.sax.SAXException;
@@ -42,6 +40,18 @@ import org.xml.sax.ext.LexicalHandler;
  */
 public class BuildPomXMLFilterFactory
 {
+    private final LexicalHandler lexicalHandler;
+    
+    public BuildPomXMLFilterFactory()
+    {
+        this( null ); 
+    }
+    
+    public BuildPomXMLFilterFactory( LexicalHandler lexicalHandler )
+    {
+        this.lexicalHandler = lexicalHandler;
+    }
+
     /**
      * 
      * @param projectFile will be used by ConsumerPomXMLFilter to get the right filter
@@ -55,7 +65,7 @@ public class BuildPomXMLFilterFactory
     {
         AbstractSAXFilter parent = new AbstractSAXFilter();
         parent.setParent( getXMLReader() );
-        parent.setLexicalHandler( getLexicalHander() );
+        parent.setLexicalHandler( lexicalHandler );
 
         if ( getDependencyKeyToVersionMapper() != null )
         {
@@ -85,18 +95,6 @@ public class BuildPomXMLFilterFactory
         return xmlReader;
     }
     
-    private LexicalHandler getLexicalHander() throws TransformerConfigurationException 
-    {
-        TransformerFactory transformerFactory = Factories.newTransformerFactory();
-        if ( transformerFactory instanceof SAXTransformerFactory )
-        {
-            SAXTransformerFactory saxTransformerFactory = (SAXTransformerFactory) transformerFactory;
-            return saxTransformerFactory.newTransformerHandler();
-        }
-        throw new TransformerConfigurationException( "Failed to get LexicalHandler via TransformerFactory:"
-            + " it is not an instance of SAXTransformerFactory" );
-    }
-    
     /**
      * @return the mapper or {@code null} if relativePaths don't need to be mapped
      */
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/CiFriendlyXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/CiFriendlyXMLFilter.java
index 4375f18..9c2da0e 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/CiFriendlyXMLFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/CiFriendlyXMLFilter.java
@@ -39,6 +39,16 @@ class CiFriendlyXMLFilter
     
     private boolean parseVersion;
     
+    CiFriendlyXMLFilter()
+    {
+        super();
+    }
+
+    CiFriendlyXMLFilter( AbstractSAXFilter parent )
+    {
+        super( parent );
+    }
+
     public CiFriendlyXMLFilter setChangelist( String changelist )
     {
         replaceChain = replaceChain.andThen( t -> t.replace( "${changelist}", changelist ) );
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterFactory.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterFactory.java
index f7751d2..5703b89 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterFactory.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterFactory.java
@@ -49,15 +49,13 @@ public class ConsumerPomXMLFilterFactory
         // Ensure that xs:any elements aren't touched by next filters
         AbstractSAXFilter filter = new FastForwardFilter( parent );
         
-        CiFriendlyXMLFilter ciFriendlyFilter = new CiFriendlyXMLFilter();
+        CiFriendlyXMLFilter ciFriendlyFilter = new CiFriendlyXMLFilter( filter );
         getChangelist().ifPresent( ciFriendlyFilter::setChangelist  );
         getRevision().ifPresent( ciFriendlyFilter::setRevision );
         getSha1().ifPresent( ciFriendlyFilter::setSha1 );
         
         if ( ciFriendlyFilter.isSet() )
         {
-            ciFriendlyFilter.setParent( parent );
-            ciFriendlyFilter.setLexicalHandler( parent );
             filter = ciFriendlyFilter;
         }
         
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ModulesXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ModulesXMLFilter.java
index 261c853..ad1a6c3 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ModulesXMLFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ModulesXMLFilter.java
@@ -21,8 +21,6 @@ package org.apache.maven.xml.sax.filter;
 
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.ext.LexicalHandler;
 
 /**
  * Remove all modules, this is just buildtime information
@@ -42,7 +40,7 @@ class ModulesXMLFilter
         super();
     }
 
-    <T extends XMLReader & LexicalHandler> ModulesXMLFilter( T parent )
+    ModulesXMLFilter( AbstractSAXFilter parent )
     {
         super( parent );
     }
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/RelativePathXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/RelativePathXMLFilter.java
index 25f2137..573c3f0 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/RelativePathXMLFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/RelativePathXMLFilter.java
@@ -21,8 +21,6 @@ package org.apache.maven.xml.sax.filter;
 
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.ext.LexicalHandler;
 
 /**
  * Remove relativePath element, has no value for consumer pom
@@ -42,7 +40,7 @@ class RelativePathXMLFilter
         super();
     }
 
-    <T extends XMLReader & LexicalHandler> RelativePathXMLFilter( T parent )
+    RelativePathXMLFilter( AbstractSAXFilter parent )
     {
         super( parent );
     }
diff --git a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterTest.java b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterTest.java
index 16d458b..161519a 100644
--- a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterTest.java
+++ b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterTest.java
@@ -30,6 +30,7 @@ import java.util.function.Function;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerConfigurationException;
 
+import org.junit.Ignore;
 import org.junit.Test;
 import org.xml.sax.SAXException;
 
@@ -231,5 +232,22 @@ public class ConsumerPomXMLFilterTest extends AbstractXMLFilterTests
         String actual = transform( input );
         assertThat( actual ).and( expected ).areIdentical();
     }
+    
+    @Test
+    @Ignore
+    public void lexicalHandler() throws Exception
+    {
+        String input = "<project><!--before--><modules>"
+                        + "<!--pre-in-->"
+                        + "<module><!--in-->ab</module>"
+                        + "<module>../cd</module>"
+                        + "<!--post-in-->"
+                        + "</modules>"
+                        + "<!--after--></project>";
+        String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 
+                        "<project><!--before--><!--after--></project>";
+        String actual = transform( input );
+        assertThat( actual ).and( expected ).areIdentical();
+    }
 
 }