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

michaelo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-shared-jar.git


The following commit(s) were added to refs/heads/master by this push:
     new 6d4cb41  [MSHARED-1411] Allow access the root entries if it is a 
multi-release JAR file
6d4cb41 is described below

commit 6d4cb413fdd52850520a163b5d2f1f06100c53c9
Author: Gabriel Belingueres <belingue...@gmail.com>
AuthorDate: Fri Jun 14 05:33:36 2024 +0200

    [MSHARED-1411] Allow access the root entries if it is a multi-release JAR 
file
    
    This closes #40
---
 src/main/java/org/apache/maven/shared/jar/JarData.java  | 17 +++++++++++++++++
 .../maven/shared/jar/classes/JarClassesAnalysis.java    | 16 +++++++++-------
 .../maven/shared/jar/classes/JarVersionedRuntime.java   |  4 ++++
 .../shared/jar/classes/JarClassesAnalyzerTest.java      | 12 +++++++++---
 4 files changed, 39 insertions(+), 10 deletions(-)

diff --git a/src/main/java/org/apache/maven/shared/jar/JarData.java 
b/src/main/java/org/apache/maven/shared/jar/JarData.java
index de2781f..d6f6b1c 100644
--- a/src/main/java/org/apache/maven/shared/jar/JarData.java
+++ b/src/main/java/org/apache/maven/shared/jar/JarData.java
@@ -77,6 +77,11 @@ public final class JarData {
      */
     private final List<JarEntry> entries;
 
+    /**
+     * The JAR entries of the root content, when it is a multi-release JAR
+     */
+    private List<JarEntry> rootEntries;
+
     /**
      * Information about the JAR's identifying features.
      */
@@ -109,6 +114,14 @@ public final class JarData {
         return entries;
     }
 
+    public List<JarEntry> getRootEntries() {
+        return rootEntries;
+    }
+
+    public void setRootEntries(List<JarEntry> rootEntries) {
+        this.rootEntries = rootEntries;
+    }
+
     public Manifest getManifest() {
         return manifest;
     }
@@ -153,6 +166,10 @@ public final class JarData {
         return entries.size();
     }
 
+    public int getNumRootEntries() {
+        return rootEntries.size();
+    }
+
     public int getNumClasses() {
         return jarClasses.getClassNames().size();
     }
diff --git 
a/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalysis.java 
b/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalysis.java
index bd9cb22..1c6663f 100644
--- a/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalysis.java
+++ b/src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalysis.java
@@ -61,8 +61,8 @@ public class JarClassesAnalysis {
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
     /**
-     * Constant representing the classes in the root of a Multi-Release JAR 
file.
-     * Meaning outside of any given META-INF/versions/NN/... entry.
+     * Constant representing the root content of a Multi-Release JAR file, 
thus outside of
+     * any given META-INF/versions/NN/... entry.
      */
     private static final Integer ROOT = 0;
 
@@ -145,10 +145,12 @@ public class JarClassesAnalysis {
             runtimeVersionsMap.put(runtimeVersion, new 
JarVersionedRuntime(runtimeVersionEntryList, classes));
         }
 
-        JarVersionedRuntime baseJarRelease = runtimeVersionsMap.remove(ROOT);
-        JarClasses baseJarClasses = baseJarRelease.getJarClasses();
+        JarData jarData = jarAnalyzer.getJarData();
 
-        jarAnalyzer.getJarData().setJarClasses(baseJarClasses);
+        JarVersionedRuntime rootContentVersionedRuntime = 
runtimeVersionsMap.remove(ROOT);
+        jarData.setRootEntries(rootContentVersionedRuntime.getEntries());
+        JarClasses rootJarClasses = 
rootContentVersionedRuntime.getJarClasses();
+        jarData.setJarClasses(rootJarClasses);
 
         // Paranoid?
         for (Map.Entry<Integer, JarVersionedRuntime> runtimeVersionEntry : 
runtimeVersionsMap.entrySet()) {
@@ -163,9 +165,9 @@ public class JarClassesAnalysis {
             }
         }
 
-        jarAnalyzer.getJarData().setVersionedRuntimes(new 
JarVersionedRuntimes(runtimeVersionsMap));
+        jarData.setVersionedRuntimes(new 
JarVersionedRuntimes(runtimeVersionsMap));
 
-        return baseJarClasses;
+        return rootJarClasses;
     }
 
     private JarClasses analyzeRoot(JarAnalyzer jarAnalyzer) {
diff --git 
a/src/main/java/org/apache/maven/shared/jar/classes/JarVersionedRuntime.java 
b/src/main/java/org/apache/maven/shared/jar/classes/JarVersionedRuntime.java
index f76cd30..6a4b90b 100644
--- a/src/main/java/org/apache/maven/shared/jar/classes/JarVersionedRuntime.java
+++ b/src/main/java/org/apache/maven/shared/jar/classes/JarVersionedRuntime.java
@@ -48,4 +48,8 @@ public class JarVersionedRuntime {
     public JarClasses getJarClasses() {
         return jarClasses;
     }
+
+    public int getNumEntries() {
+        return entries.size();
+    }
 }
diff --git 
a/src/test/java/org/apache/maven/shared/jar/classes/JarClassesAnalyzerTest.java 
b/src/test/java/org/apache/maven/shared/jar/classes/JarClassesAnalyzerTest.java
index dc7c1db..3862712 100644
--- 
a/src/test/java/org/apache/maven/shared/jar/classes/JarClassesAnalyzerTest.java
+++ 
b/src/test/java/org/apache/maven/shared/jar/classes/JarClassesAnalyzerTest.java
@@ -152,7 +152,9 @@ class JarClassesAnalyzerTest extends 
AbstractJarAnalyzerTestCase {
     @Test
     void testAnalyzeJarWithOnlyModuleInfoClass() throws Exception {
         JarData jarData = getJarData("module-info-only-test-0.0.1.jar");
-        // root level classes
+        assertEquals(10, jarData.getNumEntries());
+        // root level information
+        assertEquals(9, jarData.getNumRootEntries());
         JarClasses jclass = jarData.getJarClasses();
         assertTrue(jclass.getImports().isEmpty());
         assertTrue(jclass.getPackages().isEmpty());
@@ -174,15 +176,17 @@ class JarClassesAnalyzerTest extends 
AbstractJarAnalyzerTestCase {
         assertEquals("", jarClasses11.getPackages().get(0));
         assertEquals(1, jarClasses11.getClassNames().size());
         assertTrue(jarClasses11.getMethods().isEmpty());
-        assertEquals(1, jarVersionedRuntime11.getEntries().size());
+        assertEquals(1, jarVersionedRuntime11.getNumEntries());
         assertEntriesContains(jarVersionedRuntime11.getEntries(), 
"META-INF/versions/11/module-info.class");
     }
 
     @Test
     void testAnalyzeMultiReleaseJarVersion() throws Exception {
         JarData jarData = getJarData("multi-release-test-0.0.1.jar");
+        assertEquals(37, jarData.getNumEntries());
+        // root level information
+        assertEquals(19, jarData.getNumRootEntries());
         JarClasses jclass = jarData.getJarClasses();
-
         assertEquals("1.8", jclass.getJdkRevision());
         assertFalse(jclass.getImports().isEmpty());
         assertEquals(1, jclass.getPackages().size());
@@ -203,6 +207,7 @@ class JarClassesAnalyzerTest extends 
AbstractJarAnalyzerTestCase {
         assertEquals(1, jarClasses9.getPackages().size());
         assertEquals(1, jarClasses9.getClassNames().size());
         assertFalse(jarClasses9.getMethods().isEmpty());
+        assertEquals(9, jarVersionedRuntime9.getNumEntries());
         assertEntriesContains(jarVersionedRuntime9.getEntries(), 
"META-INF/versions/9/resource.txt");
 
         JarVersionedRuntime jarVersionedRuntime11 = 
jarVersionedRuntimes.getJarVersionedRuntime(11);
@@ -212,6 +217,7 @@ class JarClassesAnalyzerTest extends 
AbstractJarAnalyzerTestCase {
         assertEquals(1, jarClasses11.getPackages().size());
         assertEquals(1, jarClasses11.getClassNames().size());
         assertFalse(jarClasses11.getMethods().isEmpty());
+        assertEquals(9, jarVersionedRuntime11.getNumEntries());
         assertEntriesContains(jarVersionedRuntime11.getEntries(), 
"META-INF/versions/11/resource.txt");
 
         // test ordering

Reply via email to