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

rfscholte pushed a commit to branch MSHADE-291
in repository https://gitbox.apache.org/repos/asf/maven-shade-plugin.git

commit ad61743ba0df12999a6ccfccdddca09205267c99
Author: Andrey Turbanov <turban...@gmail.com>
AuthorDate: Tue Oct 23 01:59:38 2018 +0300

    Use diamond operator from java 7
---
 .../apache/maven/plugins/shade/DefaultShader.java  |  10 +-
 .../maven/plugins/shade/filter/MinijarFilter.java  |   2 +-
 .../maven/plugins/shade/filter/SimpleFilter.java   |   4 +-
 .../maven/plugins/shade/mojo/ArtifactSelector.java |   2 +-
 .../maven/plugins/shade/mojo/RelativizePath.java   |   2 +-
 .../apache/maven/plugins/shade/mojo/ShadeMojo.java |  22 +-
 .../maven/plugins/shade/pom/MavenJDOMWriter.java   |   2 +-
 .../plugins/shade/relocation/SimpleRelocator.java  |   2 +-
 .../resource/ApacheNoticeResourceTransformer.java  |   6 +-
 .../resource/ComponentsXmlResourceTransformer.java |   2 +-
 .../shade/resource/GroovyResourceTransformer.java  |   4 +-
 .../resource/PluginXmlResourceTransformer.java     | 468 ++++++++++-----------
 .../ResourceBundleAppendingTransformer.java        | 194 ++++-----
 .../resource/ServicesResourceTransformer.java      |   2 +-
 .../maven/plugins/shade/DefaultShaderTest.java     |  24 +-
 .../plugins/shade/filter/MinijarFilterTest.java    |   2 +-
 .../maven/plugins/shade/mojo/ShadeMojoTest.java    |  16 +-
 17 files changed, 382 insertions(+), 382 deletions(-)

diff --git a/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java 
b/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java
index 825ed68..e990440 100644
--- a/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java
+++ b/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java
@@ -73,11 +73,11 @@ public class DefaultShader
     public void shade( ShadeRequest shadeRequest )
         throws IOException, MojoExecutionException
     {
-        Set<String> resources = new HashSet<String>();
+        Set<String> resources = new HashSet<>();
 
         ResourceTransformer manifestTransformer = null;
         List<ResourceTransformer> transformers =
-            new ArrayList<ResourceTransformer>( 
shadeRequest.getResourceTransformers() );
+            new ArrayList<>( shadeRequest.getResourceTransformers() );
         for ( Iterator<ResourceTransformer> it = transformers.iterator(); 
it.hasNext(); )
         {
             ResourceTransformer transformer = it.next();
@@ -332,14 +332,14 @@ public class DefaultShader
     {
         for ( Collection<File> jarz : overlapping.keySet() )
         {
-            List<String> jarzS = new LinkedList<String>();
+            List<String> jarzS = new LinkedList<>();
 
             for ( File jjar : jarz )
             {
                 jarzS.add( jjar.getName() );
             }
 
-            List<String> classes = new LinkedList<String>();
+            List<String> classes = new LinkedList<>();
 
             for ( String clazz : overlapping.get( jarz ) )
             {
@@ -383,7 +383,7 @@ public class DefaultShader
 
     private List<Filter> getFilters( File jar, List<Filter> filters )
     {
-        List<Filter> list = new ArrayList<Filter>();
+        List<Filter> list = new ArrayList<>();
 
         for ( Filter filter : filters )
         {
diff --git 
a/src/main/java/org/apache/maven/plugins/shade/filter/MinijarFilter.java 
b/src/main/java/org/apache/maven/plugins/shade/filter/MinijarFilter.java
index f4469c1..031f92b 100644
--- a/src/main/java/org/apache/maven/plugins/shade/filter/MinijarFilter.java
+++ b/src/main/java/org/apache/maven/plugins/shade/filter/MinijarFilter.java
@@ -151,7 +151,7 @@ public class MinijarFilter
 
     private void removePackages( ClazzpathUnit artifactUnit )
     {
-        Set<String> packageNames = new HashSet<String>();
+        Set<String> packageNames = new HashSet<>();
         removePackages( artifactUnit.getClazzes(), packageNames );
         removePackages( artifactUnit.getTransitiveDependencies(), packageNames 
);
     }
diff --git 
a/src/main/java/org/apache/maven/plugins/shade/filter/SimpleFilter.java 
b/src/main/java/org/apache/maven/plugins/shade/filter/SimpleFilter.java
index 29c0b5b..28d8386 100644
--- a/src/main/java/org/apache/maven/plugins/shade/filter/SimpleFilter.java
+++ b/src/main/java/org/apache/maven/plugins/shade/filter/SimpleFilter.java
@@ -49,7 +49,7 @@ public class SimpleFilter
      */
     public SimpleFilter( Set<File> jars, Set<String> includes, Set<String> 
excludes )
     {
-        this.jars = ( jars != null ) ? new HashSet<File>( jars ) : new 
HashSet<File>();
+        this.jars = ( jars != null ) ? new HashSet<>( jars ) : new 
HashSet<File>();
         this.includes = normalizePatterns( includes );
         this.excludes = normalizePatterns( excludes );
     }
@@ -125,7 +125,7 @@ public class SimpleFilter
 
     private Set<String> normalizePatterns( Set<String> patterns )
     {
-        Set<String> result = new HashSet<String>();
+        Set<String> result = new HashSet<>();
 
         if ( patterns != null )
         {
diff --git 
a/src/main/java/org/apache/maven/plugins/shade/mojo/ArtifactSelector.java 
b/src/main/java/org/apache/maven/plugins/shade/mojo/ArtifactSelector.java
index fc3a6eb..0ce080d 100644
--- a/src/main/java/org/apache/maven/plugins/shade/mojo/ArtifactSelector.java
+++ b/src/main/java/org/apache/maven/plugins/shade/mojo/ArtifactSelector.java
@@ -58,7 +58,7 @@ class ArtifactSelector
 
     private static Collection<ArtifactId> toIds( Collection<String> patterns )
     {
-        Collection<ArtifactId> result = new HashSet<ArtifactId>();
+        Collection<ArtifactId> result = new HashSet<>();
 
         if ( patterns != null )
         {
diff --git 
a/src/main/java/org/apache/maven/plugins/shade/mojo/RelativizePath.java 
b/src/main/java/org/apache/maven/plugins/shade/mojo/RelativizePath.java
index 01bd273..d065325 100644
--- a/src/main/java/org/apache/maven/plugins/shade/mojo/RelativizePath.java
+++ b/src/main/java/org/apache/maven/plugins/shade/mojo/RelativizePath.java
@@ -96,7 +96,7 @@ public final class RelativizePath
 
     static List<String> parentDirs( File of )
     {
-        List<String> results = new ArrayList<String>();
+        List<String> results = new ArrayList<>();
         for ( File p = of.getParentFile() ; p != null ; p = p.getParentFile() )
         {
             if ( !"".equals( p.getName() ) )
diff --git a/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java 
b/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java
index 6b8d24a..4a5c021 100644
--- a/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java
+++ b/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java
@@ -384,10 +384,10 @@ public class ShadeMojo
 
         setupHintedShader();
 
-        Set<File> artifacts = new LinkedHashSet<File>();
-        Set<String> artifactIds = new LinkedHashSet<String>();
-        Set<File> sourceArtifacts = new LinkedHashSet<File>();
-        Set<File> testArtifacts = new LinkedHashSet<File>();
+        Set<File> artifacts = new LinkedHashSet<>();
+        Set<String> artifactIds = new LinkedHashSet<>();
+        Set<File> sourceArtifacts = new LinkedHashSet<>();
+        Set<File> testArtifacts = new LinkedHashSet<>();
 
         ArtifactSelector artifactSelector =
             new ArtifactSelector( project.getArtifact(), artifactSet, 
shadedGroupFilter );
@@ -744,7 +744,7 @@ public class ShadeMojo
 
     private List<Relocator> getRelocators()
     {
-        List<Relocator> relocators = new ArrayList<Relocator>();
+        List<Relocator> relocators = new ArrayList<>();
 
         if ( relocations == null )
         {
@@ -773,12 +773,12 @@ public class ShadeMojo
     private List<Filter> getFilters()
         throws MojoExecutionException
     {
-        List<Filter> filters = new ArrayList<Filter>();
-        List<SimpleFilter> simpleFilters = new ArrayList<SimpleFilter>();
+        List<Filter> filters = new ArrayList<>();
+        List<SimpleFilter> simpleFilters = new ArrayList<>();
 
         if ( this.filters != null && this.filters.length > 0 )
         {
-            Map<Artifact, ArtifactId> artifacts = new HashMap<Artifact, 
ArtifactId>();
+            Map<Artifact, ArtifactId> artifacts = new HashMap<>();
 
             artifacts.put( project.getArtifact(), new ArtifactId( 
project.getArtifact() ) );
 
@@ -791,7 +791,7 @@ public class ShadeMojo
             {
                 ArtifactId pattern = new ArtifactId( filter.getArtifact() );
 
-                Set<File> jars = new HashSet<File>();
+                Set<File> jars = new HashSet<>();
 
                 for ( Map.Entry<Artifact, ArtifactId> entry : 
artifacts.entrySet() )
                 {
@@ -909,11 +909,11 @@ public class ShadeMojo
     private void createDependencyReducedPom( Set<String> artifactsToRemove )
         throws IOException, DependencyGraphBuilderException, 
ProjectBuildingException
     {
-        List<Dependency> dependencies = new ArrayList<Dependency>();
+        List<Dependency> dependencies = new ArrayList<>();
 
         boolean modified = false;
 
-        List<Dependency> transitiveDeps = new ArrayList<Dependency>();
+        List<Dependency> transitiveDeps = new ArrayList<>();
 
         // NOTE: By using the getArtifacts() we get the completely evaluated 
artifacts
         // including the system scoped artifacts with expanded values of 
properties used.
diff --git 
a/src/main/java/org/apache/maven/plugins/shade/pom/MavenJDOMWriter.java 
b/src/main/java/org/apache/maven/plugins/shade/pom/MavenJDOMWriter.java
index 7420ea5..80772e4 100644
--- a/src/main/java/org/apache/maven/plugins/shade/pom/MavenJDOMWriter.java
+++ b/src/main/java/org/apache/maven/plugins/shade/pom/MavenJDOMWriter.java
@@ -1085,7 +1085,7 @@ public class MavenJDOMWriter
         if ( parentDom.getChildCount() > 0 )
         {
             Xpp3Dom[] childs = parentDom.getChildren();
-            Collection<Xpp3Dom> domChilds = new ArrayList<Xpp3Dom>();
+            Collection<Xpp3Dom> domChilds = new ArrayList<>();
             Collections.addAll( domChilds, childs );
             // int domIndex = 0;
             for ( Object o : parent.getChildren() )
diff --git 
a/src/main/java/org/apache/maven/plugins/shade/relocation/SimpleRelocator.java 
b/src/main/java/org/apache/maven/plugins/shade/relocation/SimpleRelocator.java
index 5606269..48be8f8 100644
--- 
a/src/main/java/org/apache/maven/plugins/shade/relocation/SimpleRelocator.java
+++ 
b/src/main/java/org/apache/maven/plugins/shade/relocation/SimpleRelocator.java
@@ -113,7 +113,7 @@ public class SimpleRelocator
 
         if ( patterns != null && !patterns.isEmpty() )
         {
-            normalized = new LinkedHashSet<String>();
+            normalized = new LinkedHashSet<>();
 
             for ( String pattern : patterns )
             {
diff --git 
a/src/main/java/org/apache/maven/plugins/shade/resource/ApacheNoticeResourceTransformer.java
 
b/src/main/java/org/apache/maven/plugins/shade/resource/ApacheNoticeResourceTransformer.java
index e8a88da..12e5fb8 100644
--- 
a/src/main/java/org/apache/maven/plugins/shade/resource/ApacheNoticeResourceTransformer.java
+++ 
b/src/main/java/org/apache/maven/plugins/shade/resource/ApacheNoticeResourceTransformer.java
@@ -46,9 +46,9 @@ import java.util.jar.JarOutputStream;
 public class ApacheNoticeResourceTransformer
     implements ResourceTransformer
 {
-    Set<String> entries = new LinkedHashSet<String>();
+    Set<String> entries = new LinkedHashSet<>();
 
-    Map<String, Set<String>> organizationEntries = new LinkedHashMap<String, 
Set<String>>();
+    Map<String, Set<String>> organizationEntries = new LinkedHashMap<>();
 
     String projectName = ""; // MSHADE-101 :: NullPointerException when 
projectName is missing
 
@@ -142,7 +142,7 @@ public class ApacheNoticeResourceTransformer
                             currentOrg = organizationEntries.get( 
sb.toString().trim() );
                             if ( currentOrg == null )
                             {
-                                currentOrg = new TreeSet<String>();
+                                currentOrg = new TreeSet<>();
                                 organizationEntries.put( sb.toString().trim(), 
currentOrg );
                             }
                             sb = new StringBuilder();
diff --git 
a/src/main/java/org/apache/maven/plugins/shade/resource/ComponentsXmlResourceTransformer.java
 
b/src/main/java/org/apache/maven/plugins/shade/resource/ComponentsXmlResourceTransformer.java
index b8ef15e..08b1b9f 100644
--- 
a/src/main/java/org/apache/maven/plugins/shade/resource/ComponentsXmlResourceTransformer.java
+++ 
b/src/main/java/org/apache/maven/plugins/shade/resource/ComponentsXmlResourceTransformer.java
@@ -45,7 +45,7 @@ import java.util.jar.JarOutputStream;
 public class ComponentsXmlResourceTransformer
     implements ResourceTransformer
 {
-    private Map<String, Xpp3Dom> components = new LinkedHashMap<String, 
Xpp3Dom>();
+    private Map<String, Xpp3Dom> components = new LinkedHashMap<>();
 
     public static final String COMPONENTS_XML_PATH = 
"META-INF/plexus/components.xml";
 
diff --git 
a/src/main/java/org/apache/maven/plugins/shade/resource/GroovyResourceTransformer.java
 
b/src/main/java/org/apache/maven/plugins/shade/resource/GroovyResourceTransformer.java
index 0eac450..ced9c71 100644
--- 
a/src/main/java/org/apache/maven/plugins/shade/resource/GroovyResourceTransformer.java
+++ 
b/src/main/java/org/apache/maven/plugins/shade/resource/GroovyResourceTransformer.java
@@ -41,9 +41,9 @@ public class GroovyResourceTransformer
 
     static final String EXT_MODULE_NAME = 
"META-INF/services/org.codehaus.groovy.runtime.ExtensionModule";
 
-    private List<String> extensionClassesList = new ArrayList<String>();
+    private List<String> extensionClassesList = new ArrayList<>();
 
-    private List<String> staticExtensionClassesList = new ArrayList<String>();
+    private List<String> staticExtensionClassesList = new ArrayList<>();
 
     private String extModuleName = "no-module-name";
 
diff --git 
a/src/main/java/org/apache/maven/plugins/shade/resource/PluginXmlResourceTransformer.java
 
b/src/main/java/org/apache/maven/plugins/shade/resource/PluginXmlResourceTransformer.java
index ad3c116..98e18e6 100644
--- 
a/src/main/java/org/apache/maven/plugins/shade/resource/PluginXmlResourceTransformer.java
+++ 
b/src/main/java/org/apache/maven/plugins/shade/resource/PluginXmlResourceTransformer.java
@@ -1,234 +1,234 @@
-package org.apache.maven.plugins.shade.resource;
-
-/*
- * 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 java.io.BufferedInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.Writer;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.jar.JarEntry;
-import java.util.jar.JarOutputStream;
-
-import org.apache.maven.plugins.shade.relocation.Relocator;
-import org.codehaus.plexus.util.IOUtil;
-import org.codehaus.plexus.util.ReaderFactory;
-import org.codehaus.plexus.util.WriterFactory;
-import org.codehaus.plexus.util.xml.Xpp3Dom;
-import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
-import org.codehaus.plexus.util.xml.Xpp3DomWriter;
-
-/**
- * A resource processor that aggregates Maven <code>plugin.xml</code> files.
- * 
- * @author Robert Scholte
- * @since 3.0
- */
-public class PluginXmlResourceTransformer
-    implements ResourceTransformer
-{
-    private List<Xpp3Dom> mojos = new LinkedList<Xpp3Dom>();
-
-    public static final String PLUGIN_XML_PATH = "META-INF/maven/plugin.xml";
-
-    public boolean canTransformResource( String resource )
-    {
-        return PLUGIN_XML_PATH.equals( resource );
-    }
-
-    public void processResource( String resource, InputStream is, 
List<Relocator> relocators )
-        throws IOException
-    {
-        Xpp3Dom newDom;
-
-        try
-        {
-            BufferedInputStream bis = new BufferedInputStream( is )
-            {
-                public void close()
-                    throws IOException
-                {
-                    // leave ZIP open
-                }
-            };
-
-            Reader reader = ReaderFactory.newXmlReader( bis );
-
-            newDom = Xpp3DomBuilder.build( reader );
-        }
-        catch ( Exception e )
-        {
-            throw (IOException) new IOException( "Error parsing plugin.xml in 
" + is ).initCause( e );
-        }
-
-        // Only try to merge in mojos if there are some elements in the plugin
-        if ( newDom.getChild( "mojos" ) == null )
-        {
-            return;
-        }
-
-        for ( Xpp3Dom mojo : newDom.getChild( "mojos" ).getChildren( "mojo" ) )
-        {
-
-            String impl = getValue( mojo, "implementation" );
-            impl = getRelocatedClass( impl, relocators );
-            setValue( mojo, "implementation", impl );
-
-            Xpp3Dom parameters = mojo.getChild( "parameters" );
-            if ( parameters != null )
-            {
-                for ( Xpp3Dom parameter : parameters.getChildren() )
-                {
-                    String type = getValue( parameter, "type" );
-                    type = getRelocatedClass( type, relocators );
-                    setValue( parameter, "type", type );
-                }
-            }
-
-            Xpp3Dom configuration = mojo.getChild( "configuration" );
-            if ( configuration != null )
-            {
-                for ( Xpp3Dom configurationEntry : configuration.getChildren() 
)
-                {
-                    String implementation = getAttribute( configurationEntry, 
"implementation" );
-                    implementation = getRelocatedClass( implementation, 
relocators );
-                    setAttribute( configurationEntry, "implementation", 
implementation );
-                }
-            }
-
-            Xpp3Dom requirements = mojo.getChild( "requirements" );
-            if ( requirements != null && requirements.getChildCount() > 0 )
-            {
-                for ( Xpp3Dom requirement : requirements.getChildren() )
-                {
-                    String requiredRole = getValue( requirement, "role" );
-                    requiredRole = getRelocatedClass( requiredRole, relocators 
);
-                    setValue( requirement, "role", requiredRole );
-                }
-            }
-            mojos.add( mojo );
-        }
-    }
-
-    public void modifyOutputStream( JarOutputStream jos )
-        throws IOException
-    {
-        byte[] data = getTransformedResource();
-
-        jos.putNextEntry( new JarEntry( PLUGIN_XML_PATH ) );
-
-        IOUtil.copy( data, jos );
-
-        mojos.clear();
-    }
-
-    public boolean hasTransformedResource()
-    {
-        return !mojos.isEmpty();
-    }
-
-    byte[] getTransformedResource()
-        throws IOException
-    {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream( 1024 * 4 );
-
-        Writer writer = WriterFactory.newXmlWriter( baos );
-        try
-        {
-            Xpp3Dom dom = new Xpp3Dom( "plugin" );
-
-            Xpp3Dom componentDom = new Xpp3Dom( "mojos" );
-
-            dom.addChild( componentDom );
-
-            for ( Xpp3Dom mojo : mojos )
-            {
-                componentDom.addChild( mojo );
-            }
-
-            Xpp3DomWriter.write( writer, dom );
-
-            writer.close();
-            writer = null;
-        }
-        finally
-        {
-            IOUtil.close( writer );
-        }
-
-        return baos.toByteArray();
-    }
-
-    private String getRelocatedClass( String className, List<Relocator> 
relocators )
-    {
-        if ( className != null && className.length() > 0 && relocators != null 
)
-        {
-            for ( Relocator relocator : relocators )
-            {
-                if ( relocator.canRelocateClass( className ) )
-                {
-                    return relocator.relocateClass( className );
-                }
-            }
-        }
-
-        return className;
-    }
-
-    private static String getValue( Xpp3Dom dom, String element )
-    {
-        Xpp3Dom child = dom.getChild( element );
-
-        return ( child != null && child.getValue() != null ) ? 
child.getValue() : "";
-    }
-
-    private static void setValue( Xpp3Dom dom, String element, String value )
-    {
-        Xpp3Dom child = dom.getChild( element );
-
-        if ( child == null || value == null || value.length() <= 0 )
-        {
-            return;
-        }
-
-        child.setValue( value );
-    }
-
-    private static String getAttribute( Xpp3Dom dom, String attribute )
-    {
-        return ( dom.getAttribute( attribute ) != null ) ? dom.getAttribute( 
attribute ) : "";
-    }
-
-    private static void setAttribute( Xpp3Dom dom, String attribute, String 
value )
-    {
-        String attr = dom.getAttribute( attribute );
-
-        if ( attr == null || value == null || value.length() <= 0 )
-        {
-            return;
-        }
-
-        dom.setAttribute( attribute, value );
-    }
-
-}
+package org.apache.maven.plugins.shade.resource;
+
+/*
+ * 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 java.io.BufferedInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.io.Writer;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
+
+import org.apache.maven.plugins.shade.relocation.Relocator;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.WriterFactory;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
+import org.codehaus.plexus.util.xml.Xpp3DomWriter;
+
+/**
+ * A resource processor that aggregates Maven <code>plugin.xml</code> files.
+ * 
+ * @author Robert Scholte
+ * @since 3.0
+ */
+public class PluginXmlResourceTransformer
+    implements ResourceTransformer
+{
+    private List<Xpp3Dom> mojos = new LinkedList<>();
+
+    public static final String PLUGIN_XML_PATH = "META-INF/maven/plugin.xml";
+
+    public boolean canTransformResource( String resource )
+    {
+        return PLUGIN_XML_PATH.equals( resource );
+    }
+
+    public void processResource( String resource, InputStream is, 
List<Relocator> relocators )
+        throws IOException
+    {
+        Xpp3Dom newDom;
+
+        try
+        {
+            BufferedInputStream bis = new BufferedInputStream( is )
+            {
+                public void close()
+                    throws IOException
+                {
+                    // leave ZIP open
+                }
+            };
+
+            Reader reader = ReaderFactory.newXmlReader( bis );
+
+            newDom = Xpp3DomBuilder.build( reader );
+        }
+        catch ( Exception e )
+        {
+            throw (IOException) new IOException( "Error parsing plugin.xml in 
" + is ).initCause( e );
+        }
+
+        // Only try to merge in mojos if there are some elements in the plugin
+        if ( newDom.getChild( "mojos" ) == null )
+        {
+            return;
+        }
+
+        for ( Xpp3Dom mojo : newDom.getChild( "mojos" ).getChildren( "mojo" ) )
+        {
+
+            String impl = getValue( mojo, "implementation" );
+            impl = getRelocatedClass( impl, relocators );
+            setValue( mojo, "implementation", impl );
+
+            Xpp3Dom parameters = mojo.getChild( "parameters" );
+            if ( parameters != null )
+            {
+                for ( Xpp3Dom parameter : parameters.getChildren() )
+                {
+                    String type = getValue( parameter, "type" );
+                    type = getRelocatedClass( type, relocators );
+                    setValue( parameter, "type", type );
+                }
+            }
+
+            Xpp3Dom configuration = mojo.getChild( "configuration" );
+            if ( configuration != null )
+            {
+                for ( Xpp3Dom configurationEntry : configuration.getChildren() 
)
+                {
+                    String implementation = getAttribute( configurationEntry, 
"implementation" );
+                    implementation = getRelocatedClass( implementation, 
relocators );
+                    setAttribute( configurationEntry, "implementation", 
implementation );
+                }
+            }
+
+            Xpp3Dom requirements = mojo.getChild( "requirements" );
+            if ( requirements != null && requirements.getChildCount() > 0 )
+            {
+                for ( Xpp3Dom requirement : requirements.getChildren() )
+                {
+                    String requiredRole = getValue( requirement, "role" );
+                    requiredRole = getRelocatedClass( requiredRole, relocators 
);
+                    setValue( requirement, "role", requiredRole );
+                }
+            }
+            mojos.add( mojo );
+        }
+    }
+
+    public void modifyOutputStream( JarOutputStream jos )
+        throws IOException
+    {
+        byte[] data = getTransformedResource();
+
+        jos.putNextEntry( new JarEntry( PLUGIN_XML_PATH ) );
+
+        IOUtil.copy( data, jos );
+
+        mojos.clear();
+    }
+
+    public boolean hasTransformedResource()
+    {
+        return !mojos.isEmpty();
+    }
+
+    byte[] getTransformedResource()
+        throws IOException
+    {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream( 1024 * 4 );
+
+        Writer writer = WriterFactory.newXmlWriter( baos );
+        try
+        {
+            Xpp3Dom dom = new Xpp3Dom( "plugin" );
+
+            Xpp3Dom componentDom = new Xpp3Dom( "mojos" );
+
+            dom.addChild( componentDom );
+
+            for ( Xpp3Dom mojo : mojos )
+            {
+                componentDom.addChild( mojo );
+            }
+
+            Xpp3DomWriter.write( writer, dom );
+
+            writer.close();
+            writer = null;
+        }
+        finally
+        {
+            IOUtil.close( writer );
+        }
+
+        return baos.toByteArray();
+    }
+
+    private String getRelocatedClass( String className, List<Relocator> 
relocators )
+    {
+        if ( className != null && className.length() > 0 && relocators != null 
)
+        {
+            for ( Relocator relocator : relocators )
+            {
+                if ( relocator.canRelocateClass( className ) )
+                {
+                    return relocator.relocateClass( className );
+                }
+            }
+        }
+
+        return className;
+    }
+
+    private static String getValue( Xpp3Dom dom, String element )
+    {
+        Xpp3Dom child = dom.getChild( element );
+
+        return ( child != null && child.getValue() != null ) ? 
child.getValue() : "";
+    }
+
+    private static void setValue( Xpp3Dom dom, String element, String value )
+    {
+        Xpp3Dom child = dom.getChild( element );
+
+        if ( child == null || value == null || value.length() <= 0 )
+        {
+            return;
+        }
+
+        child.setValue( value );
+    }
+
+    private static String getAttribute( Xpp3Dom dom, String attribute )
+    {
+        return ( dom.getAttribute( attribute ) != null ) ? dom.getAttribute( 
attribute ) : "";
+    }
+
+    private static void setAttribute( Xpp3Dom dom, String attribute, String 
value )
+    {
+        String attr = dom.getAttribute( attribute );
+
+        if ( attr == null || value == null || value.length() <= 0 )
+        {
+            return;
+        }
+
+        dom.setAttribute( attribute, value );
+    }
+
+}
diff --git 
a/src/main/java/org/apache/maven/plugins/shade/resource/ResourceBundleAppendingTransformer.java
 
b/src/main/java/org/apache/maven/plugins/shade/resource/ResourceBundleAppendingTransformer.java
index 7d5e232..7d73ed8 100644
--- 
a/src/main/java/org/apache/maven/plugins/shade/resource/ResourceBundleAppendingTransformer.java
+++ 
b/src/main/java/org/apache/maven/plugins/shade/resource/ResourceBundleAppendingTransformer.java
@@ -1,97 +1,97 @@
-package org.apache.maven.plugins.shade.resource;
-
-/*
- * 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 java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.jar.JarEntry;
-import java.util.jar.JarOutputStream;
-import java.util.regex.Pattern;
-
-import org.apache.maven.plugins.shade.relocation.Relocator;
-import org.codehaus.plexus.util.IOUtil;
-
-/**
- * An appending transformer for resource bundles
- * 
- * @author Robert Scholte
- * @since 3.0.0
- */
-public class ResourceBundleAppendingTransformer implements ResourceTransformer
-{
-    private Map<String, ByteArrayOutputStream>  dataMap = new HashMap<String, 
ByteArrayOutputStream>();
-    
-    private Pattern resourceBundlePattern;
-    
-    /**
-     * the base name of the resource bundle, a fully qualified class name
-     */
-    public void setBasename( String basename )
-    {
-        resourceBundlePattern = Pattern.compile( basename + 
"(_[a-zA-Z]+){0,3}\\.properties" );
-    }
-
-    public boolean canTransformResource( String r )
-    {
-        if ( resourceBundlePattern != null && resourceBundlePattern.matcher( r 
).matches() )
-        {
-            return true;
-        }
-
-        return false;
-    }
-
-    public void processResource( String resource, InputStream is, 
List<Relocator> relocators )
-        throws IOException
-    {
-        ByteArrayOutputStream data = dataMap.get( resource );
-        if ( data == null )
-        {
-            data = new ByteArrayOutputStream();
-            dataMap.put( resource, data );
-        }
-        
-        IOUtil.copy( is, data );
-        data.write( '\n' );
-    }
-
-    public boolean hasTransformedResource()
-    {
-        return !dataMap.isEmpty();
-    }
-
-    public void modifyOutputStream( JarOutputStream jos )
-        throws IOException
-    {
-        for ( Map.Entry<String, ByteArrayOutputStream> dataEntry : 
dataMap.entrySet() )
-        {
-            jos.putNextEntry( new JarEntry( dataEntry.getKey() ) );
-
-            IOUtil.copy( new ByteArrayInputStream( 
dataEntry.getValue().toByteArray() ), jos );
-            dataEntry.getValue().reset();
-        }
-    }
-
-}
+package org.apache.maven.plugins.shade.resource;
+
+/*
+ * 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 java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
+import java.util.regex.Pattern;
+
+import org.apache.maven.plugins.shade.relocation.Relocator;
+import org.codehaus.plexus.util.IOUtil;
+
+/**
+ * An appending transformer for resource bundles
+ * 
+ * @author Robert Scholte
+ * @since 3.0.0
+ */
+public class ResourceBundleAppendingTransformer implements ResourceTransformer
+{
+    private Map<String, ByteArrayOutputStream>  dataMap = new HashMap<>();
+    
+    private Pattern resourceBundlePattern;
+    
+    /**
+     * the base name of the resource bundle, a fully qualified class name
+     */
+    public void setBasename( String basename )
+    {
+        resourceBundlePattern = Pattern.compile( basename + 
"(_[a-zA-Z]+){0,3}\\.properties" );
+    }
+
+    public boolean canTransformResource( String r )
+    {
+        if ( resourceBundlePattern != null && resourceBundlePattern.matcher( r 
).matches() )
+        {
+            return true;
+        }
+
+        return false;
+    }
+
+    public void processResource( String resource, InputStream is, 
List<Relocator> relocators )
+        throws IOException
+    {
+        ByteArrayOutputStream data = dataMap.get( resource );
+        if ( data == null )
+        {
+            data = new ByteArrayOutputStream();
+            dataMap.put( resource, data );
+        }
+        
+        IOUtil.copy( is, data );
+        data.write( '\n' );
+    }
+
+    public boolean hasTransformedResource()
+    {
+        return !dataMap.isEmpty();
+    }
+
+    public void modifyOutputStream( JarOutputStream jos )
+        throws IOException
+    {
+        for ( Map.Entry<String, ByteArrayOutputStream> dataEntry : 
dataMap.entrySet() )
+        {
+            jos.putNextEntry( new JarEntry( dataEntry.getKey() ) );
+
+            IOUtil.copy( new ByteArrayInputStream( 
dataEntry.getValue().toByteArray() ), jos );
+            dataEntry.getValue().reset();
+        }
+    }
+
+}
diff --git 
a/src/main/java/org/apache/maven/plugins/shade/resource/ServicesResourceTransformer.java
 
b/src/main/java/org/apache/maven/plugins/shade/resource/ServicesResourceTransformer.java
index f1cb9d6..ea5b784 100644
--- 
a/src/main/java/org/apache/maven/plugins/shade/resource/ServicesResourceTransformer.java
+++ 
b/src/main/java/org/apache/maven/plugins/shade/resource/ServicesResourceTransformer.java
@@ -51,7 +51,7 @@ public class ServicesResourceTransformer
 
     private static final String SERVICES_PATH = "META-INF/services";
 
-    private Map<String, ServiceStream> serviceEntries = new HashMap<String, 
ServiceStream>();
+    private Map<String, ServiceStream> serviceEntries = new HashMap<>();
 
     private List<Relocator> relocators;
 
diff --git 
a/src/test/java/org/apache/maven/plugins/shade/DefaultShaderTest.java 
b/src/test/java/org/apache/maven/plugins/shade/DefaultShaderTest.java
index e45e642..08eedea 100644
--- a/src/test/java/org/apache/maven/plugins/shade/DefaultShaderTest.java
+++ b/src/test/java/org/apache/maven/plugins/shade/DefaultShaderTest.java
@@ -62,17 +62,17 @@ public class DefaultShaderTest
     {
         Shader s = newShader();
 
-        Set<File> set = new LinkedHashSet<File>();
+        Set<File> set = new LinkedHashSet<>();
 
         set.add( new File( "src/test/jars/test-artifact-1.0-SNAPSHOT.jar" ) );
 
-        List<Relocator> relocators = new ArrayList<Relocator>();
+        List<Relocator> relocators = new ArrayList<>();
 
         relocators.add( new SimpleRelocator( "org.apache.maven.plugins.shade", 
null, null, null ) );
 
-        List<ResourceTransformer> resourceTransformers = new 
ArrayList<ResourceTransformer>();
+        List<ResourceTransformer> resourceTransformers = new ArrayList<>();
 
-        List<Filter> filters = new ArrayList<Filter>();
+        List<Filter> filters = new ArrayList<>();
 
         File file = new File( 
"target/testShaderWithStaticInitializedClass.jar" );
 
@@ -111,22 +111,22 @@ public class DefaultShaderTest
     {
         DefaultShader s = newShader();
 
-        Set<File> set = new LinkedHashSet<File>();
+        Set<File> set = new LinkedHashSet<>();
 
         set.add( new File( "src/test/jars/test-project-1.0-SNAPSHOT.jar" ) );
 
         set.add( new File( "src/test/jars/plexus-utils-1.4.1.jar" ) );
 
-        List<Relocator> relocators = new ArrayList<Relocator>();
+        List<Relocator> relocators = new ArrayList<>();
 
         relocators.add( new SimpleRelocator( "org/codehaus/plexus/util/", 
"_plexus/util/__", null,
                                              Arrays.<String> asList() ) );
 
-        List<ResourceTransformer> resourceTransformers = new 
ArrayList<ResourceTransformer>();
+        List<ResourceTransformer> resourceTransformers = new ArrayList<>();
 
         resourceTransformers.add( new ComponentsXmlResourceTransformer() );
 
-        List<Filter> filters = new ArrayList<Filter>();
+        List<Filter> filters = new ArrayList<>();
 
         File file = new File( "target/foo-relocate-class.jar" );
 
@@ -165,21 +165,21 @@ public class DefaultShaderTest
     {
         DefaultShader s = newShader();
 
-        Set<File> set = new LinkedHashSet<File>();
+        Set<File> set = new LinkedHashSet<>();
 
         set.add( new File( "src/test/jars/test-project-1.0-SNAPSHOT.jar" ) );
 
         set.add( new File( "src/test/jars/plexus-utils-1.4.1.jar" ) );
 
-        List<Relocator> relocators = new ArrayList<Relocator>();
+        List<Relocator> relocators = new ArrayList<>();
 
         relocators.add( new SimpleRelocator( "org/codehaus/plexus/util", 
shadedPattern, null, Arrays.asList( excludes ) ) );
 
-        List<ResourceTransformer> resourceTransformers = new 
ArrayList<ResourceTransformer>();
+        List<ResourceTransformer> resourceTransformers = new ArrayList<>();
 
         resourceTransformers.add( new ComponentsXmlResourceTransformer() );
 
-        List<Filter> filters = new ArrayList<Filter>();
+        List<Filter> filters = new ArrayList<>();
 
         ShadeRequest shadeRequest = new ShadeRequest();
         shadeRequest.setJars( set );
diff --git 
a/src/test/java/org/apache/maven/plugins/shade/filter/MinijarFilterTest.java 
b/src/test/java/org/apache/maven/plugins/shade/filter/MinijarFilterTest.java
index b13e47c..bd32ef2 100644
--- a/src/test/java/org/apache/maven/plugins/shade/filter/MinijarFilterTest.java
+++ b/src/test/java/org/apache/maven/plugins/shade/filter/MinijarFilterTest.java
@@ -124,7 +124,7 @@ public class MinijarFilterTest
             new DefaultArtifact( "dep.com", "dep.aid", "1.0", "compile", 
"jar", "classifier2", null );
         dependencyArtifact.setFile( file );
 
-        Set<Artifact> artifacts = new TreeSet<Artifact>();
+        Set<Artifact> artifacts = new TreeSet<>();
         artifacts.add( dependencyArtifact );
 
         when( mavenProject.getArtifacts() ).thenReturn( artifacts );
diff --git 
a/src/test/java/org/apache/maven/plugins/shade/mojo/ShadeMojoTest.java 
b/src/test/java/org/apache/maven/plugins/shade/mojo/ShadeMojoTest.java
index fa869c8..5bc8ee6 100644
--- a/src/test/java/org/apache/maven/plugins/shade/mojo/ShadeMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/shade/mojo/ShadeMojoTest.java
@@ -79,16 +79,16 @@ public class ShadeMojoTest
 
         Shader s = (Shader) lookup( Shader.ROLE, "default" );
 
-        Set<File> set = new LinkedHashSet<File>();
+        Set<File> set = new LinkedHashSet<>();
         set.add( new File( getBasedir(), 
"src/test/jars/test-artifact-1.0-SNAPSHOT.jar" ) );
 
-        List<Relocator> relocators = new ArrayList<Relocator>();
+        List<Relocator> relocators = new ArrayList<>();
         relocators.add( new SimpleRelocator( "org.codehaus.plexus.util", 
"hidden", null, Arrays.asList(
                 "org.codehaus.plexus.util.xml.Xpp3Dom", 
"org.codehaus.plexus.util.xml.pull.*") ) );
 
-        List<ResourceTransformer> resourceTransformers = new 
ArrayList<ResourceTransformer>();
+        List<ResourceTransformer> resourceTransformers = new ArrayList<>();
 
-        List<Filter> filters = new ArrayList<Filter>();
+        List<Filter> filters = new ArrayList<>();
 
         ShadeRequest shadeRequest = new ShadeRequest();
         shadeRequest.setJars( set );
@@ -220,22 +220,22 @@ public class ShadeMojoTest
     {
         Shader s = (Shader) lookup( Shader.ROLE );
 
-        Set<File> set = new LinkedHashSet<File>();
+        Set<File> set = new LinkedHashSet<>();
 
         set.add( new File( getBasedir(), 
"src/test/jars/test-project-1.0-SNAPSHOT.jar" ) );
 
         set.add( new File( getBasedir(), 
"src/test/jars/plexus-utils-1.4.1.jar" ) );
 
-        List<Relocator> relocators = new ArrayList<Relocator>();
+        List<Relocator> relocators = new ArrayList<>();
 
         relocators.add( new SimpleRelocator( "org/codehaus/plexus/util", 
shadedPattern, null, Arrays.asList(
                 "org/codehaus/plexus/util/xml/Xpp3Dom", 
"org/codehaus/plexus/util/xml/pull.*") ) );
 
-        List<ResourceTransformer> resourceTransformers = new 
ArrayList<ResourceTransformer>();
+        List<ResourceTransformer> resourceTransformers = new ArrayList<>();
 
         resourceTransformers.add( new ComponentsXmlResourceTransformer() );
 
-        List<Filter> filters = new ArrayList<Filter>();
+        List<Filter> filters = new ArrayList<>();
 
         ShadeRequest shadeRequest = new ShadeRequest();
         shadeRequest.setJars( set );

Reply via email to