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
*/