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/30 14:23:29 UTC

[maven] 01/01: Merge branch 'master' into MNG-6957

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

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

commit b6f0b12145bc362ad74f88b5ca8b26ca23002420
Merge: b9607f0 e7eef9d
Author: rfscholte <rf...@apache.org>
AuthorDate: Fri Oct 30 15:23:11 2020 +0100

    Merge branch 'master' into MNG-6957

 .../aether/ConsumerModelSourceTransformer.java     |  12 +-
 .../aether/ConsumerModelSourceTransformerTest.java |  70 ++++++++++
 .../apache/maven/project/ProjectBuilderTest.java   |  88 +++++-------
 .../test/resources/projects/transform/after.pom    |  83 ++++++++++++
 .../test/resources/projects/transform/before.pom   |  86 ++++++++++++
 .../building/AbstractModelSourceTransformer.java   |  64 +++++----
 .../building/BuildModelSourceTransformer.java      |   9 +-
 .../building/DefaultBuildPomXMLFilterFactory.java  |  19 ++-
 .../DefaultInheritanceAssemblerTest.java           |   7 +-
 .../xml/sax/filter/AbstractEventXMLFilter.java     |   6 +-
 .../maven/xml/sax/filter/AbstractSAXFilter.java    |   9 +-
 .../maven/xml/sax/filter/BuildPomXMLFilter.java    |   3 +-
 .../xml/sax/filter/BuildPomXMLFilterFactory.java   |  48 ++++---
 .../maven/xml/sax/filter/CiFriendlyXMLFilter.java  |  18 ++-
 .../maven/xml/sax/filter/ConsumerPomXMLFilter.java |   8 +-
 .../sax/filter/ConsumerPomXMLFilterFactory.java    |   3 +-
 .../maven/xml/sax/filter/FastForwardFilter.java    |   4 +-
 .../maven/xml/sax/filter/ModulesXMLFilter.java     |   4 +-
 .../xml/sax/filter/RelativePathXMLFilter.java      |   4 +-
 .../apache/maven/xml/sax/ChainedFilterTest.java    | 150 +++++++++++++++++++++
 .../xml/sax/filter/AbstractXMLFilterTests.java     | 116 +++++++++-------
 .../xml/sax/filter/ConsumerPomXMLFilterTest.java   |  27 +++-
 .../maven/xml/sax/filter/ModulesXMLFilterTest.java |  10 +-
 .../maven/xml/sax/filter/ParentXMLFilterTest.java  |   5 +-
 .../sax/filter/ReactorDependencyXMLFilterTest.java |   9 +-
 25 files changed, 660 insertions(+), 202 deletions(-)

diff --cc maven-core/src/main/java/org/apache/maven/internal/aether/ConsumerModelSourceTransformer.java
index 4da661a,d81571d..4d5d263
--- 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
@@@ -45,11 -46,13 +46,13 @@@ import org.xml.sax.ext.LexicalHandler
  class ConsumerModelSourceTransformer extends AbstractModelSourceTransformer
  {
      @Override
-     protected AbstractSAXFilter getSAXFilter( Path pomFile, TransformerContext context )
 -    protected AbstractSAXFilter getSAXFilter( Path pomFile, 
++    protected AbstractSAXFilter getSAXFilter( Path pomFile,
+                                               TransformerContext context,
+                                               Consumer<LexicalHandler> lexicalHandlerConsumer )
          throws TransformerConfigurationException, SAXException, ParserConfigurationException
      {
          return new DefaultConsumerPomXMLFilterFactory( new DefaultBuildPomXMLFilterFactory( context,
-                                                                                             true ) ).get( pomFile );
 -                                                                        lexicalHandlerConsumer ) ).get( pomFile );
++                                                                        lexicalHandlerConsumer, true ) ).get( pomFile );
      }
      
      /**
diff --cc maven-model-builder/src/main/java/org/apache/maven/model/building/BuildModelSourceTransformer.java
index 590db48,44d4c26..f507972
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/BuildModelSourceTransformer.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/BuildModelSourceTransformer.java
@@@ -50,11 -52,14 +52,14 @@@ class BuildModelSourceTransformer exten
      @Nullable
      private BuildPomXMLFilterListener xmlFilterListener;
      
-     protected AbstractSAXFilter getSAXFilter( Path pomFile, TransformerContext context )
+     protected AbstractSAXFilter getSAXFilter( Path pomFile,
+                                               TransformerContext context,
+                                               Consumer<LexicalHandler> lexicalHandlerConsumer )
          throws TransformerConfigurationException, SAXException, ParserConfigurationException
      {
-         BuildPomXMLFilterFactory buildPomXMLFilterFactory = new DefaultBuildPomXMLFilterFactory( context, false );
+         BuildPomXMLFilterFactory buildPomXMLFilterFactory =
 -            new DefaultBuildPomXMLFilterFactory( context, lexicalHandlerConsumer );
 -
++            new DefaultBuildPomXMLFilterFactory( context, lexicalHandlerConsumer, false );
 +        
          return buildPomXMLFilterFactory.get( pomFile );
      }
      
diff --cc maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultBuildPomXMLFilterFactory.java
index ae17b5b,8f9f6ae..4460f45
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultBuildPomXMLFilterFactory.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultBuildPomXMLFilterFactory.java
@@@ -28,10 -29,10 +29,11 @@@ import java.util.function.Function
  import org.apache.maven.model.Model;
  import org.apache.maven.xml.sax.filter.BuildPomXMLFilterFactory;
  import org.apache.maven.xml.sax.filter.RelativeProject;
+ import org.xml.sax.ext.LexicalHandler;
  
  /**
-  * A BuildPomXMLFilterFactory which is context aware 
-- * 
++ * A BuildPomXMLFilterFactory which is context aware
++ *
   * @author Robert Scholte
   * @since 3.7.0
   */
@@@ -39,17 -40,18 +41,20 @@@ public class DefaultBuildPomXMLFilterFa
  {
      private final TransformerContext context;
      
 +    /**
-      * 
++     *
 +     * @param context a set of data to extract values from as required for the build pom
++     * @param lexicalHandlerConsumer the lexical handler consumer
 +     * @param consume true is this factory used for creating the consumer pom, otherwise false
 +     */
-     public DefaultBuildPomXMLFilterFactory( TransformerContext context, boolean consume )
+     public DefaultBuildPomXMLFilterFactory( TransformerContext context,
 -                                            Consumer<LexicalHandler> lexicalHandlerConsumer )
++                                            Consumer<LexicalHandler> lexicalHandlerConsumer, 
++                                            boolean consume )
      {
-         super( consume );
 -        super( lexicalHandlerConsumer );
++        super( lexicalHandlerConsumer, consume );
          this.context = context;
      }
 -    
 -    public final TransformerContext getContext()
 -    {
 -        return context;
 -    }
--    
++
      @Override
      protected Function<Path, Optional<RelativeProject>> getRelativePathMapper()
      {
@@@ -63,25 -65,7 +68,25 @@@
                              .map( m -> toVersion( m ) )
                              .orElse( null );
      }
-     
+ 
 +    @Override
 +    protected Optional<String> getChangelist()
 +    {
 +        return Optional.ofNullable( context.getUserProperty( "changelist" ) );
 +    }
 +
 +    @Override
 +    protected Optional<String> getRevision()
 +    {
 +        return Optional.ofNullable( context.getUserProperty( "revision" ) );
 +    }
 +
 +    @Override
 +    protected Optional<String> getSha1()
 +    {
 +        return Optional.ofNullable( context.getUserProperty( "sha1" ) );
 +    }
 +
      private static RelativeProject toRelativeProject( final Model m )
      {
          String groupId = m.getGroupId();
diff --cc maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java
index fc7c095,23dc240..09f20f7
--- 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
@@@ -42,13 -41,18 +41,21 @@@ import org.xml.sax.ext.LexicalHandler
   */
  public class BuildPomXMLFilterFactory
  {
 +    private final boolean consume;
-     
-     public BuildPomXMLFilterFactory( boolean consume )
++
+     private final Consumer<LexicalHandler> lexicalHandlerConsumer;
 -    
 -    public BuildPomXMLFilterFactory()
++
++    public BuildPomXMLFilterFactory( Consumer<LexicalHandler> lexicalHandlerConsumer )
+     {
 -        this( null ); 
++        this( lexicalHandlerConsumer, false );
+     }
 -    
 -    public BuildPomXMLFilterFactory( Consumer<LexicalHandler> lexicalHandlerConsumer )
++
++    public BuildPomXMLFilterFactory( Consumer<LexicalHandler> lexicalHandlerConsumer, boolean consume )
      {
+         this.lexicalHandlerConsumer = lexicalHandlerConsumer;
 +        this.consume = consume;
      }
-     
+ 
      /**
       * 
       * @param projectFile will be used by ConsumerPomXMLFilter to get the right filter
@@@ -78,22 -85,10 +88,22 @@@
              ParentXMLFilter parentFilter = new ParentXMLFilter( getRelativePathMapper() );
              parentFilter.setProjectPath( projectFile.getParent() );
              parentFilter.setParent( parent );
-             parentFilter.setLexicalHandler( parent );
+             parent.setLexicalHandler( parentFilter );
              parent = parentFilter;
          }
-         
+ 
 +        CiFriendlyXMLFilter ciFriendlyFilter = new CiFriendlyXMLFilter( consume );
 +        getChangelist().ifPresent( ciFriendlyFilter::setChangelist  );
 +        getRevision().ifPresent( ciFriendlyFilter::setRevision );
 +        getSha1().ifPresent( ciFriendlyFilter::setSha1 );
-         
++
 +        if ( ciFriendlyFilter.isSet() )
 +        {
 +            ciFriendlyFilter.setParent( parent );
-             ciFriendlyFilter.setLexicalHandler( parent );
++            parent.setLexicalHandler( ciFriendlyFilter );
 +            parent = ciFriendlyFilter;
 +        }
 +
          return new BuildPomXMLFilter( parent );
      }
      
@@@ -103,19 -98,7 +113,7 @@@
          xmlReader.setFeature( "http://xml.org/sax/features/namespaces", true );
          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
       */
@@@ -128,22 -111,4 +126,22 @@@
      {
          return null;
      }
-     
++
 +    // getters for the 3 magic properties of CIFriendly versions ( https://maven.apache.org/maven-ci-friendly.html )
 +
 +    protected Optional<String> getChangelist()
 +    {
 +        return Optional.empty();
 +    }
 +
 +    protected Optional<String> getRevision()
 +    {
 +        return Optional.empty();
 +    }
 +
 +    protected Optional<String> getSha1()
 +    {
 +        return Optional.empty();
 +    }
 +
  }
diff --cc maven-xml/src/main/java/org/apache/maven/xml/sax/filter/CiFriendlyXMLFilter.java
index cecea6a,9c2da0e..438fc0e
--- 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
@@@ -33,19 -33,22 +33,25 @@@ import org.xml.sax.SAXException
  class CiFriendlyXMLFilter
      extends AbstractSAXFilter
  {
 +    private final boolean replace;
 +    
-     CiFriendlyXMLFilter( boolean replace )
-     {
-         this.replace = replace;
-     }
- 
      private Function<String, String> replaceChain = Function.identity();
      
      private String characters; 
      
      private boolean parseVersion;
--    
 -    CiFriendlyXMLFilter()
++
++    CiFriendlyXMLFilter( boolean replace )
+     {
 -        super();
++        this.replace = replace;
+     }
+ 
 -    CiFriendlyXMLFilter( AbstractSAXFilter parent )
++    CiFriendlyXMLFilter( AbstractSAXFilter parent, boolean replace )
+     {
+         super( parent );
++        this.replace = replace;
+     }
+ 
      public CiFriendlyXMLFilter setChangelist( String changelist )
      {
          replaceChain = replaceChain.andThen( t -> t.replace( "${changelist}", changelist ) );
diff --cc maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterFactory.java
index 2b2f542,298a84c..350493f
--- 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
@@@ -45,9 -46,20 +45,10 @@@ public class ConsumerPomXMLFilterFactor
      {
          BuildPomXMLFilter parent = buildPomXMLFilterFactory.get( projectPath );
          
 -        
++
          // Ensure that xs:any elements aren't touched by next filters
          AbstractSAXFilter filter = new FastForwardFilter( parent );
 -        
 -        CiFriendlyXMLFilter ciFriendlyFilter = new CiFriendlyXMLFilter( filter );
 -        getChangelist().ifPresent( ciFriendlyFilter::setChangelist  );
 -        getRevision().ifPresent( ciFriendlyFilter::setRevision );
 -        getSha1().ifPresent( ciFriendlyFilter::setSha1 );
 -        
 -        if ( ciFriendlyFilter.isSet() )
 -        {
 -            filter = ciFriendlyFilter;
 -        }
--        
++
          // Strip modules
          filter = new ModulesXMLFilter( filter );
          // Adjust relativePath
diff --cc maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterTest.java
index d6cd04a,c5cfc18..c2999cf
--- 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
@@@ -42,9 -44,10 +44,10 @@@ public class ConsumerPomXMLFilterTest e
      }
      
      @Override
-     protected AbstractSAXFilter getFilter() throws SAXException, ParserConfigurationException, TransformerConfigurationException
+     protected AbstractSAXFilter getFilter( Consumer<LexicalHandler> lexicalHandlerConsumer )
+         throws SAXException, ParserConfigurationException, TransformerConfigurationException
      {
-         final BuildPomXMLFilterFactory buildPomXMLFilterFactory = new BuildPomXMLFilterFactory( true )
 -        final BuildPomXMLFilterFactory buildPomXMLFilterFactory = new BuildPomXMLFilterFactory( lexicalHandlerConsumer )
++        final BuildPomXMLFilterFactory buildPomXMLFilterFactory = new BuildPomXMLFilterFactory( lexicalHandlerConsumer, true )
          {
              @Override
              protected Function<Path, Optional<RelativeProject>> getRelativePathMapper()
@@@ -57,7 -60,10 +60,7 @@@
              {
                  return null;
              }
-             
 -        };
 -        
 -        ConsumerPomXMLFilter filter = new ConsumerPomXMLFilterFactory( buildPomXMLFilterFactory )
 -        {
++
              @Override
              protected Optional<String> getSha1()
              {
@@@ -75,11 -81,7 +78,11 @@@
              {
                  return Optional.of( "CL" );
              }
 -        }.get( Paths.get( "pom.xml" ) );
 +
 +        };
-         
++
 +        ConsumerPomXMLFilter filter =
 +            new ConsumerPomXMLFilterFactory( buildPomXMLFilterFactory ).get( Paths.get( "pom.xml" ) );
          filter.setFeature( "http://xml.org/sax/features/namespaces", true );
          return filter;
      }
@@@ -232,5 -234,21 +235,21 @@@
          String actual = transform( input );
          assertThat( actual ).and( expected ).areIdentical();
      }
 -    
 +
+     @Test
+     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" + 
++        String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+                         "<project><!--before--><!--after--></project>";
+         String actual = transform( input );
+         assertThat( actual ).and( expected ).areIdentical();
+     }
+ 
  }