diff --git a/src/main/java/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiver.java b/src/main/java/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiver.java index 1e6fc7b17..df6d0790f 100644 --- a/src/main/java/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiver.java +++ b/src/main/java/org/codehaus/plexus/archiver/jar/JarToolModularJarArchiver.java @@ -205,7 +205,7 @@ private String[] getJarToolArguments() args.add( tempEmptyDir.getAbsolutePath() ); args.add( "." ); - return args.toArray( new String[]{} ); + return args.toArray( new String[0] ); } } diff --git a/src/main/java/org/codehaus/plexus/archiver/zip/AbstractZipArchiver.java b/src/main/java/org/codehaus/plexus/archiver/zip/AbstractZipArchiver.java index 1090f86e6..a0446ca2f 100755 --- a/src/main/java/org/codehaus/plexus/archiver/zip/AbstractZipArchiver.java +++ b/src/main/java/org/codehaus/plexus/archiver/zip/AbstractZipArchiver.java @@ -26,8 +26,8 @@ import java.nio.charset.Charset; import java.util.Calendar; import java.util.Date; +import java.util.Deque; import java.util.Hashtable; -import java.util.Stack; import java.util.concurrent.ExecutionException; import java.util.zip.CRC32; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; @@ -408,7 +408,7 @@ private void addParentDirs( ArchiveEntry archiveEntry, File baseDir, String entr { if ( !doFilesonly && getIncludeEmptyDirs() ) { - Stack directories = addedDirs.asStringStack( entry ); + Deque directories = addedDirs.asStringDeque( entry ); while ( !directories.isEmpty() ) { diff --git a/src/main/java/org/codehaus/plexus/archiver/zip/AddedDirs.java b/src/main/java/org/codehaus/plexus/archiver/zip/AddedDirs.java index 7d8283b68..4d5438364 100644 --- a/src/main/java/org/codehaus/plexus/archiver/zip/AddedDirs.java +++ b/src/main/java/org/codehaus/plexus/archiver/zip/AddedDirs.java @@ -16,8 +16,9 @@ */ package org.codehaus.plexus.archiver.zip; +import java.util.ArrayDeque; +import java.util.Deque; import java.util.HashSet; -import java.util.Hashtable; import java.util.Set; import java.util.Stack; @@ -27,11 +28,37 @@ public class AddedDirs { - private final Hashtable addedDirs = new Hashtable(); + private final Set addedDirs = new HashSet(); + /** + * @deprecated use {@link #asStringDeque(String)} instead. + */ + @Deprecated public Stack asStringStack( String entry ) { - Stack directories = new Stack(); + Stack directories = new Stack<>(); + + // Don't include the last entry itself if it's + // a dir; it will be added on its own. + int slashPos = entry.length() - ( entry.endsWith( "/" ) ? 1 : 0 ); + + while ( ( slashPos = entry.lastIndexOf( '/', slashPos - 1 ) ) != -1 ) + { + String dir = entry.substring( 0, slashPos + 1 ); + + if ( addedDirs.contains( dir ) ) + { + break; + } + + directories.push( dir ); + } + return directories; + } + + public Deque asStringDeque( String entry ) + { + Deque directories = new ArrayDeque<>(); // Don't include the last entry itself if it's // a dir; it will be added on its own. @@ -61,23 +88,16 @@ public void clear() * * @param vPath The path to add. * - * @return true if the path was not present, false if it already existed. + * @return true if the path was already present, false if it has been added. */ public boolean update( String vPath ) { - if ( addedDirs.get( vPath ) != null ) - { - // don't add directories we've already added. - // no warning if we try, it is harmless in and of itself - return true; - } - addedDirs.put( vPath, vPath ); - return false; + return !addedDirs.add( vPath ); } public Set allAddedDirs() { - return new HashSet( addedDirs.keySet() ); + return new HashSet( addedDirs ); } }