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/06/26 10:11:36 UTC

[maven] branch MNG-6946 updated: [MNG-6946] Fix filters regarding characters-call

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

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


The following commit(s) were added to refs/heads/MNG-6946 by this push:
     new 21fd285  [MNG-6946] Fix filters regarding characters-call
21fd285 is described below

commit 21fd285dfbedb19016d198a912bf564f39619032
Author: rfscholte <rf...@apache.org>
AuthorDate: Fri Jun 26 11:56:55 2020 +0200

    [MNG-6946] Fix filters regarding characters-call
---
 .../xml/sax/filter/AbstractEventXMLFilter.java     |  12 --
 .../maven/xml/sax/filter/AbstractSAXFilter.java    |  14 ++
 .../maven/xml/sax/filter/CiFriendlyXMLFilter.java  | 186 ++++-----------------
 .../xml/sax/filter/ReactorDependencyXMLFilter.java |  18 +-
 .../xml/sax/filter/AbstractXMLFilterTests.java     |   8 +-
 5 files changed, 63 insertions(+), 175 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 8067125..f5246b1 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
@@ -278,18 +278,6 @@ abstract class AbstractEventXMLFilter extends AbstractSAXFilter
         processEvent( getEventFactory().comment( ch, start, length ) );
     }
     
-    protected static String nullSafeAppend( String parentWhitespace, String charSegment )
-    {
-        if ( parentWhitespace == null ) 
-        {
-            return charSegment;
-        }
-        else
-        {
-            return parentWhitespace + charSegment;
-        }
-    }
-    
     /**
      * AutoCloseable with a close method that doesn't throw an exception
      * 
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 89de519..454ae83 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
@@ -126,5 +126,19 @@ public class AbstractSAXFilter extends XMLFilterImpl implements LexicalHandler
             lexicalHandler.comment( ch, start, length );
         }
     }
+    
+    
+    protected static String nullSafeAppend( String originalValue, String charSegment )
+    {
+        if ( originalValue == null ) 
+        {
+            return charSegment;
+        }
+        else
+        {
+            return originalValue + charSegment;
+        }
+    }
+
 
 }
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 c2d48db..4375f18 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
@@ -25,31 +25,19 @@ import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 
 /**
- * Resolves all ci-friendly properties occurrences
+ * Resolves all ci-friendly properties occurrences between version-tags
  * 
  * @author Robert Scholte
  * @since 3.7.0
  */
 class CiFriendlyXMLFilter
-    extends AbstractEventXMLFilter
+    extends AbstractSAXFilter
 {
     private Function<String, String> replaceChain = Function.identity();
     
     private String characters; 
     
-    private boolean parsing = false;
-
-    @Override
-    protected boolean isParsing()
-    {
-        return parsing;
-    }
-
-    @Override
-    protected String getState()
-    {
-        return null;
-    }
+    private boolean parseVersion;
     
     public CiFriendlyXMLFilter setChangelist( String changelist )
     {
@@ -81,157 +69,49 @@ class CiFriendlyXMLFilter
     public void characters( char[] ch, int start, int length )
         throws SAXException
     {
-        this.parsing = true;
-        this.characters = nullSafeAppend( characters, new String( ch, start, length ) );
-    }
-
-    @Override
-    public void comment( char[] ch, int start, int length )
-        throws SAXException
-    {
-        parseCharacters();
-        super.comment( ch, start, length );
-    }
-
-    @Override
-    public void endElement( String uri, String localName, String qName )
-        throws SAXException
-    {
-        parseCharacters();
-        super.endElement( uri, localName, qName );
-    }
-    
-    @Override
-    public void endCDATA()
-        throws SAXException
-    {
-        parseCharacters();
-        super.endCDATA();
-    }
-
-    @Override
-    public void endDocument()
-        throws SAXException
-    {
-        parseCharacters();
-        super.endDocument();
-    }
-
-    @Override
-    public void endDTD()
-        throws SAXException
-    {
-        parseCharacters();
-        super.endDTD();
-    }
-    
-    @Override
-    public void endEntity( String name )
-        throws SAXException
-    {
-        parseCharacters();
-        super.endEntity( name );
-    }
-    
-    @Override
-    public void endPrefixMapping( String prefix )
-        throws SAXException
-    {
-        parseCharacters();
-        super.endPrefixMapping( prefix );
+        if ( parseVersion )
+        {
+            this.characters = nullSafeAppend( characters, new String( ch, start, length ) );
+        }
+        else
+        {
+            super.characters( ch, start, length );
+        }
     }
 
     @Override
-    public void skippedEntity( String name )
-        throws SAXException
-    {
-        parseCharacters();
-        super.skippedEntity( name );
-    }
-    
-    @Override
-    public void startCDATA()
-        throws SAXException
-    {
-        parseCharacters();
-        super.startCDATA();
-    }
-    
-    @Override
-    public void ignorableWhitespace( char[] ch, int start, int length )
-        throws SAXException
-    {
-        parseCharacters();
-        super.ignorableWhitespace( ch, start, length );
-    }
-    
-    @Override
-    public void processingInstruction( String target, String data )
-        throws SAXException
-    {
-        parseCharacters();
-        super.processingInstruction( target, data );
-    }
-    
-    @Override
-    public void startDocument()
-        throws SAXException
-    {
-        parseCharacters();
-        super.startDocument();
-    }
-    
-    @Override
-    public void startDTD( String name, String publicId, String systemId )
-        throws SAXException
-    {
-        parseCharacters();
-        super.startDTD( name, publicId, systemId );
-    }
-    
-    @Override
     public void startElement( String uri, String localName, String qName, Attributes atts )
         throws SAXException
     {
-        parseCharacters();
+        if ( !parseVersion && "version".equals( localName ) )
+        {
+            parseVersion = true;
+        }
+
         super.startElement( uri, localName, qName, atts );
     }
     
     @Override
-    public void startEntity( String name )
-        throws SAXException
-    {
-        parseCharacters();
-        super.startEntity( name );
-    }
-    
-    @Override
-    public void startPrefixMapping( String prefix, String uri )
+    public void endElement( String uri, String localName, String qName )
         throws SAXException
     {
-        parseCharacters();
-        super.startPrefixMapping( prefix, uri );
-    }
-    
-    private void parseCharacters() throws SAXException
-    {
-        this.parsing = false;
-        if ( characters == null )
-        {
-            return;
-        }
-        // assuming this has the best performance
-        if ( characters.contains( "${" ) )
+        if ( parseVersion )
         {
-            char[] ch = replaceChain.apply( characters ).toCharArray();
-            super.characters( ch, 0, ch.length );
+            // assuming this has the best performance
+            if ( characters != null && characters.contains( "${" ) )
+            {
+                char[] ch = replaceChain.apply( characters ).toCharArray();
+                super.characters( ch, 0, ch.length );
+            }
+            else
+            {
+                char[] ch = characters.toCharArray();
+                super.characters( ch, 0, ch.length );
+            }
+            characters = null;
+            parseVersion = false;
         }
-        else
-        {
-            char[] ch = characters.toCharArray();
-            super.characters( ch, 0, ch.length );
-        }
-        characters = null;
+
+        super.endElement( uri, localName, qName );
     }
-    
 }
\ No newline at end of file
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ReactorDependencyXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ReactorDependencyXMLFilter.java
index 38f8fb8..080adc7 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ReactorDependencyXMLFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ReactorDependencyXMLFilter.java
@@ -39,7 +39,7 @@ public class ReactorDependencyXMLFilter extends AbstractEventXMLFilter
     private String state;
     
     // whiteSpace after <dependency>, to be used to position <version>
-    private String dependencyWhitespace = "";
+    private String dependencyWhitespace;
 
     private boolean hasVersion;
 
@@ -79,16 +79,17 @@ public class ReactorDependencyXMLFilter extends AbstractEventXMLFilter
         if ( parsingDependency )
         {
             final String eventState = state;
+            String value = new String( ch, start, length );
             switch ( eventState )
             {
                 case "dependency":
-                    dependencyWhitespace = new String( ch, start, length );
+                    dependencyWhitespace = nullSafeAppend( dependencyWhitespace, value );
                     break;
                 case "groupId":
-                    groupId = new String( ch, start, length );
+                    groupId = nullSafeAppend( groupId, value );
                     break;
                 case "artifactId":
-                    artifactId = new String( ch, start, length );
+                    artifactId = nullSafeAppend( artifactId, value );
                     break;
                 default:
                     break;
@@ -115,8 +116,12 @@ public class ReactorDependencyXMLFilter extends AbstractEventXMLFilter
                         {
                             try ( Includer i = super.include() )
                             {
-                                super.characters( dependencyWhitespace.toCharArray(), 0,
-                                                  dependencyWhitespace.length() );
+                                if ( dependencyWhitespace != null )
+                                {
+                                    super.characters( dependencyWhitespace.toCharArray(), 0,
+                                                      dependencyWhitespace.length() );
+
+                                }
                                 String versionQName = SAXEventUtils.renameQName( qName, "version" );
                                 
                                 super.startElement( uri, "version", versionQName, null );
@@ -131,6 +136,7 @@ public class ReactorDependencyXMLFilter extends AbstractEventXMLFilter
                     
                     // reset
                     hasVersion = false;
+                    dependencyWhitespace = null;
                     groupId = null;
                     artifactId = null;
                     
diff --git a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/AbstractXMLFilterTests.java b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/AbstractXMLFilterTests.java
index 3725e15..f01f268 100644
--- a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/AbstractXMLFilterTests.java
+++ b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/AbstractXMLFilterTests.java
@@ -125,11 +125,11 @@ public abstract class AbstractXMLFilterTests
     }
     
     /**
-     * Form {@link ContentHandler}
+     * From {@link ContentHandler}
      * <q>Your code should not assume that algorithms using char-at-a-time idioms will be working in characterunits; 
-     * in some cases they will split characters. This is relevantwherever XML permits arbitrary characters, such as 
-     * attribute values,processing instruction data, and comments as well as in data reportedfrom this method. It's 
-     * also generally relevant whenever Java codemanipulates internationalized text; the issue isn't unique to XML.</q>
+     * in some cases they will split characters. This is relevant wherever XML permits arbitrary characters, such as 
+     * attribute values,processing instruction data, and comments as well as in data reported from this method. It's 
+     * also generally relevant whenever Java code manipulates internationalized text; the issue isn't unique to XML.</q>
      *  
      * @author Robert Scholte
      */