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/06 11:05:33 UTC
[maven] branch MNG-6656 updated: Fix lineseparator in comments
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
The following commit(s) were added to refs/heads/MNG-6656 by this push:
new 51b74ad Fix lineseparator in comments
51b74ad is described below
commit 51b74adb8aea1f32b8db7584b4370f8424bb3ddd
Author: rfscholte <rf...@apache.org>
AuthorDate: Sat Jun 6 13:05:23 2020 +0200
Fix lineseparator in comments
---
apache-maven/maven-wrapper.pom | 5 +
.../aether/ConsumerModelSourceTransformer.java | 1 +
.../DefaultRepositorySystemSessionFactory.java | 2 +-
.../maven/project/DefaultProjectBuilder.java | 79 +--------------
.../building/AbstractModelSourceTransformer.java | 4 +-
.../maven/model/building/TransformerContext.java | 2 +
maven-xml/pom.xml | 8 +-
.../maven/xml/sax/ext/CommentRenormalizer.java | 108 +++++++++++++++++++++
.../maven/xml/sax/ext/CommentRenormalizerTest.java | 84 ++++++++++++++++
9 files changed, 213 insertions(+), 80 deletions(-)
diff --git a/apache-maven/maven-wrapper.pom b/apache-maven/maven-wrapper.pom
index f2bcc7f..fc6755c 100644
--- a/apache-maven/maven-wrapper.pom
+++ b/apache-maven/maven-wrapper.pom
@@ -33,7 +33,12 @@ under the License.
<name>Apache Maven Wrapper Distribution</name>
<description>The Apache Maven Wrapper distribution in zip and tar.gz formats.</description>
+ <properties>
+ <distributionFileName>${artifactId}-${project.version}</distributionFileName>
+ </properties>
+
<build>
+ <finalName>${distributionFileName}</finalName>
<pluginManagement>
<plugins>
<plugin>
diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/ConsumerModelSourceTransformer.java b/maven-core/src/main/java/org/apache/maven/internal/aether/ConsumerModelSourceTransformer.java
index 0f92f66..8ca0ca6 100644
--- a/maven-core/src/main/java/org/apache/maven/internal/aether/ConsumerModelSourceTransformer.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/aether/ConsumerModelSourceTransformer.java
@@ -81,6 +81,7 @@ class ConsumerModelSourceTransformer extends AbstractModelSourceTransformer
final String version = streamReader.getVersion();
Transformer transformer = transformerHandler.getTransformer();
+ transformer.setOutputProperty( OutputKeys.METHOD, "xml" );
if ( encoding == null && version == null )
{
transformer.setOutputProperty( OutputKeys.OMIT_XML_DECLARATION, "yes" );
diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
index d0dd442..928d200 100644
--- a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
@@ -248,7 +248,7 @@ public class DefaultRepositorySystemSessionFactory
if ( Features.buildConsumer().isActive() )
{
session.setFileTransformerManager( a -> getTransformersForArtifact( a,
- (TransformerContext) session.getData().get( TransformerContext.class ) ) );
+ (TransformerContext) session.getData().get( TransformerContext.KEY ) ) );
}
return session;
diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
index 0def9e3..f09941b 100644
--- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
@@ -21,8 +21,6 @@ package org.apache.maven.project;
import java.io.File;
import java.io.IOException;
-import java.io.InputStream;
-import java.nio.file.Files;
import java.nio.file.Path;
import java.util.AbstractMap;
import java.util.ArrayList;
@@ -40,16 +38,6 @@ import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.sax.SAXTransformerFactory;
-import javax.xml.transform.sax.TransformerHandler;
-
import org.apache.maven.RepositoryUtils;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.InvalidArtifactRTException;
@@ -67,9 +55,7 @@ import org.apache.maven.model.Model;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.Profile;
import org.apache.maven.model.ReportPlugin;
-import org.apache.maven.model.building.AbstractModelSourceTransformer;
import org.apache.maven.model.building.ArtifactModelSource;
-import org.apache.maven.model.building.DefaultBuildPomXMLFilterFactory;
import org.apache.maven.model.building.DefaultModelBuildingRequest;
import org.apache.maven.model.building.DefaultModelProblem;
import org.apache.maven.model.building.FileModelSource;
@@ -84,9 +70,6 @@ import org.apache.maven.model.building.StringModelSource;
import org.apache.maven.model.building.TransformerContext;
import org.apache.maven.model.resolution.ModelResolver;
import org.apache.maven.repository.internal.ArtifactDescriptorUtils;
-import org.apache.maven.xml.Factories;
-import org.apache.maven.xml.sax.filter.AbstractSAXFilter;
-import org.apache.maven.xml.sax.filter.ConsumerPomXMLFilterFactory;
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.util.Os;
import org.codehaus.plexus.util.StringUtils;
@@ -98,7 +81,6 @@ import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.repository.WorkspaceRepository;
import org.eclipse.aether.resolution.ArtifactRequest;
import org.eclipse.aether.resolution.ArtifactResult;
-import org.xml.sax.SAXException;
/**
* DefaultProjectBuilder
@@ -313,7 +295,7 @@ public class DefaultProjectBuilder
request.setBuildStartTime( configuration.getBuildStartTime() );
request.setModelResolver( resolver );
request.setModelCache( config.modelCache );
- request.setTransformerContext( (TransformerContext) config.session.getData().get( TransformerContext.class ) );
+ request.setTransformerContext( (TransformerContext) config.session.getData().get( TransformerContext.KEY ) );
return request;
}
@@ -426,7 +408,7 @@ public class DefaultProjectBuilder
return modelPool.get( groupId, artifactId, null );
}
};
- request.getRepositorySession().getData().set( TransformerContext.class, context );
+ request.getRepositorySession().getData().set( TransformerContext.KEY, context );
}
InternalConfig config = new InternalConfig( request, modelPool,
@@ -1127,63 +1109,6 @@ public class DefaultProjectBuilder
}
- static class ConsumerModelSourceTransformer extends AbstractModelSourceTransformer
- {
- @Override
- protected AbstractSAXFilter getSAXFilter( Path pomFile, TransformerContext context )
- throws TransformerConfigurationException, SAXException, ParserConfigurationException
- {
- return new ConsumerPomXMLFilterFactory( new DefaultBuildPomXMLFilterFactory( context ) ).get( pomFile );
- }
-
- @Override
- protected TransformerHandler getTransformerHandler( Path pomFile )
- throws IOException, org.apache.maven.model.building.TransformerException
- {
- final TransformerHandler transformerHandler;
-
- final SAXTransformerFactory transformerFactory =
- (SAXTransformerFactory) Factories.newTransformerFactory();
-
- // Keep same encoding+version
- try ( InputStream input = Files.newInputStream( pomFile ) )
- {
- XMLStreamReader streamReader =
- XMLInputFactory.newFactory().createXMLStreamReader( input );
-
- transformerHandler = transformerFactory.newTransformerHandler();
-
- final String encoding = streamReader.getCharacterEncodingScheme();
- final String version = streamReader.getVersion();
-
- Transformer transformer = transformerHandler.getTransformer();
- if ( encoding == null && version == null )
- {
- transformer.setOutputProperty( OutputKeys.OMIT_XML_DECLARATION, "yes" );
- }
- else
- {
- transformer.setOutputProperty( OutputKeys.OMIT_XML_DECLARATION, "no" );
-
- if ( encoding != null )
- {
- transformer.setOutputProperty( OutputKeys.ENCODING, encoding );
- }
- if ( version != null )
- {
- transformer.setOutputProperty( OutputKeys.VERSION, version );
- }
- }
- }
- catch ( XMLStreamException | TransformerConfigurationException e )
- {
- throw new org.apache.maven.model.building.TransformerException(
- "Failed to detect XML encoding and version", e );
- }
- return transformerHandler;
- }
- }
-
private ReactorModelCache getModelCache()
{
return this.modelCache;
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/AbstractModelSourceTransformer.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/AbstractModelSourceTransformer.java
index e0767fb..6fedada 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/AbstractModelSourceTransformer.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/AbstractModelSourceTransformer.java
@@ -39,6 +39,7 @@ import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;
import org.apache.maven.xml.Factories;
+import org.apache.maven.xml.sax.ext.CommentRenormalizer;
import org.apache.maven.xml.sax.filter.AbstractSAXFilter;
import org.xml.sax.SAXException;
@@ -101,8 +102,9 @@ public abstract class AbstractModelSourceTransformer
}
else
{
+ result = new SAXResult( transformerHandler );
+ ( (SAXResult) result ).setLexicalHandler( new CommentRenormalizer( transformerHandler ) );
transformerHandler.setResult( new StreamResult( out ) );
- result = new SAXResult( transformerHandler );
}
IOExceptionHandler eh = new IOExceptionHandler();
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/TransformerContext.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/TransformerContext.java
index cad2d25..f012220 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/TransformerContext.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/TransformerContext.java
@@ -30,6 +30,8 @@ import org.apache.maven.model.Model;
*/
public interface TransformerContext
{
+ Object KEY = TransformerContext.class;
+
String getUserProperty( String key );
Model getRawModel( Path p );
diff --git a/maven-xml/pom.xml b/maven-xml/pom.xml
index eb285eb..6b98f12 100644
--- a/maven-xml/pom.xml
+++ b/maven-xml/pom.xml
@@ -30,12 +30,18 @@ under the License.
</parent>
<artifactId>maven-xml</artifactId>
<name>Maven XML</name>
-
+
<dependencies>
<dependency>
<groupId>org.xmlunit</groupId>
<artifactId>xmlunit-assertj</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
</project>
\ No newline at end of file
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/ext/CommentRenormalizer.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/ext/CommentRenormalizer.java
new file mode 100644
index 0000000..3ae19a4
--- /dev/null
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/ext/CommentRenormalizer.java
@@ -0,0 +1,108 @@
+package org.apache.maven.xml.sax.ext;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.xml.sax.SAXException;
+import org.xml.sax.ext.LexicalHandler;
+
+/**
+ * During parsing the line separators are transformed to \n
+ * Unlike characters(), comments don't use the systems line separator for serialization.
+ * Hence use this class in the LexicalHandler chain to do so
+ *
+ * @author Robert Scholte
+ * @since 3.7.0
+ */
+public class CommentRenormalizer implements LexicalHandler
+{
+ private final LexicalHandler lexicalHandler;
+
+ private final String lineSeparator;
+
+ public CommentRenormalizer( LexicalHandler lexicalHandler )
+ {
+ this( lexicalHandler, System.lineSeparator() );
+ }
+
+ // for testing purpose
+ CommentRenormalizer( LexicalHandler lexicalHandler, String lineSeparator )
+ {
+ this.lexicalHandler = lexicalHandler;
+ this.lineSeparator = lineSeparator;
+ }
+
+ @Override
+ public void comment( char[] ch, int start, int length )
+ throws SAXException
+ {
+ if ( "\n".equals( lineSeparator ) )
+ {
+ lexicalHandler.comment( ch, start, length );
+ }
+ else
+ {
+ char[] ca = new String( ch, start, length ).replaceAll( "\n", lineSeparator ).toCharArray();
+
+ lexicalHandler.comment( ca, 0, ca.length );
+ }
+ }
+
+ @Override
+ public void startDTD( String name, String publicId, String systemId )
+ throws SAXException
+ {
+ lexicalHandler.startDTD( name, publicId, systemId );
+ }
+
+ @Override
+ public void endDTD()
+ throws SAXException
+ {
+ lexicalHandler.endDTD();
+ }
+
+ @Override
+ public void startEntity( String name )
+ throws SAXException
+ {
+ lexicalHandler.startEntity( name );
+ }
+
+ @Override
+ public void endEntity( String name )
+ throws SAXException
+ {
+ lexicalHandler.endEntity( name );
+ }
+
+ @Override
+ public void startCDATA()
+ throws SAXException
+ {
+ lexicalHandler.startCDATA();
+ }
+
+ @Override
+ public void endCDATA()
+ throws SAXException
+ {
+ lexicalHandler.endCDATA();
+ }
+}
diff --git a/maven-xml/src/test/java/org/apache/maven/xml/sax/ext/CommentRenormalizerTest.java b/maven-xml/src/test/java/org/apache/maven/xml/sax/ext/CommentRenormalizerTest.java
new file mode 100644
index 0000000..b6bc381
--- /dev/null
+++ b/maven-xml/src/test/java/org/apache/maven/xml/sax/ext/CommentRenormalizerTest.java
@@ -0,0 +1,84 @@
+package org.apache.maven.xml.sax.ext;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+import org.xml.sax.ext.LexicalHandler;
+
+@RunWith( Parameterized.class )
+public class CommentRenormalizerTest
+{
+ private LexicalHandler lexicalHandler;
+
+ private final String lineSeparator;
+
+ @Parameters
+ public static Collection<Object[]> data() {
+ return Arrays.asList(new Object[][] {
+ { "\n" },
+ { "\r\n" },
+ { "\r" }
+ });
+ }
+
+ public CommentRenormalizerTest( String lineSeparator )
+ {
+ this.lineSeparator = lineSeparator;
+ this.lexicalHandler = mock( LexicalHandler.class );
+ }
+
+ @Test
+ public void singleLine()
+ throws Exception
+ {
+ CommentRenormalizer commentRenormalizer = new CommentRenormalizer( lexicalHandler, lineSeparator );
+
+ char[] ch = "single line".toCharArray();
+
+ commentRenormalizer.comment( ch, 0, ch.length );
+
+ verify( lexicalHandler ).comment( ch, 0, ch.length );
+ }
+
+ @Test
+ public void multiLine()
+ throws Exception
+ {
+ CommentRenormalizer commentRenormalizer = new CommentRenormalizer( lexicalHandler, lineSeparator );
+
+ String text = "I%sam%sthe%sbest%s";
+
+ char[] chIn = String.format( text, "\n", "\n", "\n", "\n" ).toCharArray();
+ char[] chOut = String.format( text, lineSeparator, lineSeparator, lineSeparator, lineSeparator ).toCharArray();
+
+ commentRenormalizer.comment( chIn, 0, chIn.length );
+
+ verify( lexicalHandler ).comment( chOut, 0, chOut.length );
+ }
+}