From fd30a962bb143322f59b82b4bd06c5b5829f26e8 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 18 Nov 2020 16:48:54 +0100 Subject: [PATCH 1/4] Minor syntax change --- .../codehaus/plexus/archiver/jar/JarToolModularJarArchiver.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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] ); } } From ce135f711ab122aa633cc6e63354ff24272d01f1 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 18 Nov 2020 16:49:29 +0100 Subject: [PATCH 2/4] Use non synchronized collections --- .../archiver/zip/AbstractZipArchiver.java | 4 ++-- .../plexus/archiver/zip/AddedDirs.java | 21 +++++++------------ 2 files changed, 9 insertions(+), 16 deletions(-) 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..144676d42 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.asStringStack( 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..e536ccf31 100644 --- a/src/main/java/org/codehaus/plexus/archiver/zip/AddedDirs.java +++ b/src/main/java/org/codehaus/plexus/archiver/zip/AddedDirs.java @@ -16,10 +16,10 @@ */ 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; /** * A list of directories that have been added to an archive. @@ -27,11 +27,11 @@ public class AddedDirs { - private final Hashtable addedDirs = new Hashtable(); + private final Set addedDirs = new HashSet(); - public Stack asStringStack( String entry ) + public Deque asStringStack(String entry ) { - Stack directories = new Stack(); + Deque directories = new ArrayDeque<>(); // Don't include the last entry itself if it's // a dir; it will be added on its own. @@ -65,19 +65,12 @@ public void clear() */ 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 ); } } From a814f3e86fa715dcdd3cfbd014d4953f71d13050 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Sat, 20 Mar 2021 15:34:19 +0100 Subject: [PATCH 3/4] Avoid breaking compatibility and deprecate the existing method in favor of the new one instead --- .../archiver/zip/AbstractZipArchiver.java | 2 +- .../plexus/archiver/zip/AddedDirs.java | 29 ++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) 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 144676d42..a0446ca2f 100755 --- a/src/main/java/org/codehaus/plexus/archiver/zip/AbstractZipArchiver.java +++ b/src/main/java/org/codehaus/plexus/archiver/zip/AbstractZipArchiver.java @@ -408,7 +408,7 @@ private void addParentDirs( ArchiveEntry archiveEntry, File baseDir, String entr { if ( !doFilesonly && getIncludeEmptyDirs() ) { - Deque 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 e536ccf31..1326ee608 100644 --- a/src/main/java/org/codehaus/plexus/archiver/zip/AddedDirs.java +++ b/src/main/java/org/codehaus/plexus/archiver/zip/AddedDirs.java @@ -20,6 +20,7 @@ import java.util.Deque; import java.util.HashSet; import java.util.Set; +import java.util.Stack; /** * A list of directories that have been added to an archive. @@ -29,7 +30,33 @@ public class AddedDirs private final Set addedDirs = new HashSet(); - public Deque asStringStack(String entry ) + /** + * @deprecated use {@link #asStringDeque(String)} instead. + */ + @Deprecated + public Stack asStringStack( String entry ) + { + 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<>(); From c13e33336f8f827d970b645cd414be46dc43b86f Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Sat, 20 Mar 2021 17:04:20 +0100 Subject: [PATCH 4/4] Update javadoc according to the code --- src/main/java/org/codehaus/plexus/archiver/zip/AddedDirs.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 1326ee608..4d5438364 100644 --- a/src/main/java/org/codehaus/plexus/archiver/zip/AddedDirs.java +++ b/src/main/java/org/codehaus/plexus/archiver/zip/AddedDirs.java @@ -88,7 +88,7 @@ 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 ) {