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

rmaucher pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat-jakartaee-migration.git


The following commit(s) were added to refs/heads/main by this push:
     new 062f48f  Minor fixes from code review
062f48f is described below

commit 062f48f13d043d6080a259cdae316a59b41646c1
Author: remm <[email protected]>
AuthorDate: Fri Jun 5 12:04:12 2026 +0200

    Minor fixes from code review
---
 .../org/apache/tomcat/jakartaee/CacheEntry.java     | 16 ++++++++++------
 .../org/apache/tomcat/jakartaee/GlobMatcher.java    |  4 ++--
 .../apache/tomcat/jakartaee/ManifestConverter.java  |  6 +++++-
 .../java/org/apache/tomcat/jakartaee/Migration.java | 21 +++++++++++++--------
 .../org/apache/tomcat/jakartaee/MigrationTask.java  |  8 +++++++-
 .../org/apache/tomcat/jakartaee/StringManager.java  | 14 ++++++++------
 .../org/apache/tomcat/jakartaee/TextConverter.java  |  2 +-
 .../apache/tomcat/jakartaee/LocalStrings.properties |  5 ++++-
 8 files changed, 50 insertions(+), 26 deletions(-)

diff --git a/src/main/java/org/apache/tomcat/jakartaee/CacheEntry.java 
b/src/main/java/org/apache/tomcat/jakartaee/CacheEntry.java
index 8cb8110..525f5ae 100644
--- a/src/main/java/org/apache/tomcat/jakartaee/CacheEntry.java
+++ b/src/main/java/org/apache/tomcat/jakartaee/CacheEntry.java
@@ -90,7 +90,9 @@ class CacheEntry {
      * @throws IOException if an I/O error occurs
      */
     public void commitStore() throws IOException {
-        fos.close();
+        if (fos != null) {
+            fos.close();
+        }
         if (!tempFile.exists()) {
             throw new IOException(sm.getString("cacheEntry.tempNotExist", 
tempFile));
         }
@@ -99,7 +101,7 @@ class CacheEntry {
         if (!parentDir.exists()) {
             parentDir.mkdirs();
         }
-        // Atomic rename
+        // Rename temp file to final cache location (usually atomic)
         if (!tempFile.renameTo(cacheFile)) {
             throw new IOException(sm.getString("cacheEntry.tempRenameFail", 
tempFile, cacheFile));
         }
@@ -117,10 +119,12 @@ class CacheEntry {
      * Rollback the store operation - delete temp file.
      */
     public void rollbackStore() {
-        try {
-            fos.close();
-        } catch (IOException ioe) {
-            // Ignore
+        if (fos != null) {
+            try {
+                fos.close();
+            } catch (IOException ioe) {
+                // Ignore
+            }
         }
         if (tempFile.exists()) {
             tempFile.delete();
diff --git a/src/main/java/org/apache/tomcat/jakartaee/GlobMatcher.java 
b/src/main/java/org/apache/tomcat/jakartaee/GlobMatcher.java
index 5f25a34..2e706e6 100644
--- a/src/main/java/org/apache/tomcat/jakartaee/GlobMatcher.java
+++ b/src/main/java/org/apache/tomcat/jakartaee/GlobMatcher.java
@@ -31,9 +31,9 @@ public final class GlobMatcher {
 
 
     /**
-     * Construct the matcher.
+     * All static.
      */
-    public GlobMatcher() {}
+    private GlobMatcher() {}
 
 
     /**
diff --git a/src/main/java/org/apache/tomcat/jakartaee/ManifestConverter.java 
b/src/main/java/org/apache/tomcat/jakartaee/ManifestConverter.java
index cc93965..b316c41 100644
--- a/src/main/java/org/apache/tomcat/jakartaee/ManifestConverter.java
+++ b/src/main/java/org/apache/tomcat/jakartaee/ManifestConverter.java
@@ -132,7 +132,11 @@ public class ManifestConverter implements Converter {
         }
         // Update package names in values
         for (Entry<Object, Object> entry : attributes.entrySet()) {
-            String newValue = profile.convert((String) entry.getValue());
+            Object value = entry.getValue();
+            if (!(value instanceof String)) {
+                continue;
+            }
+            String newValue = profile.convert((String) value);
             String header = entry.getKey().toString();
             try {
                 // Need to be careful with OSGI headers.
diff --git a/src/main/java/org/apache/tomcat/jakartaee/Migration.java 
b/src/main/java/org/apache/tomcat/jakartaee/Migration.java
index 9f15698..4c1c7d6 100644
--- a/src/main/java/org/apache/tomcat/jakartaee/Migration.java
+++ b/src/main/java/org/apache/tomcat/jakartaee/Migration.java
@@ -162,7 +162,7 @@ public class Migration {
 
     /**
      * Enable the default exclusion list for the tool.
-     * @param enableDefaultExcludes true to enable the default
+     * @param enableDefaultExcludes true to enable the default excludes
      */
     public void setEnableDefaultExcludes(boolean enableDefaultExcludes) {
         this.enableDefaultExcludes = enableDefaultExcludes;
@@ -222,10 +222,12 @@ public class Migration {
 
 
     /**
-     * <b>NOTE</b>:
-     * this method is not to indicate that no changes were made,
-     * but that the source can be used and satisfy the selected profile.
-     * @return true if converted occurs
+     * Returns whether any files were converted during migration.
+     * Note: a return value of {@code false} means the source already
+     * satisfied the selected profile and no changes were necessary.
+     *
+     * @return true if at least one file was converted
+     * @throws IllegalStateException if migration has not completed
      */
     public boolean hasConverted() {
         if (state != State.COMPLETE) {
@@ -238,6 +240,7 @@ public class Migration {
     /**
      * Execute migration operation.
      * @throws IOException when an exception occurs
+     * @throws IllegalStateException if migration is already running
      */
     public void execute() throws IOException {
         if (state == State.RUNNING) {
@@ -296,7 +299,7 @@ public class Migration {
 
     private void migrateFile(File src, File dest) throws IOException {
         if (src.equals(dest)) {
-            ByteArrayOutputStream buffer = new ByteArrayOutputStream((int) 
(src.length() * 1.05));
+            ByteArrayOutputStream buffer = new 
ByteArrayOutputStream(Math.toIntExact((long) (src.length() * 1.05)));
 
             try (InputStream is = new FileInputStream(src)) {
                 if (migrateStream(src.getAbsolutePath(), is, buffer)) {
@@ -342,7 +345,8 @@ public class Migration {
                 }
                 String destName = profile.convert(srcName);
                 if (srcZipEntry.getMethod() == ZipEntry.STORED) {
-                    ByteArrayOutputStream tempBuffer = new 
ByteArrayOutputStream((int) (srcZipEntry.getSize() * 1.05));
+                    ByteArrayOutputStream tempBuffer =
+                            new ByteArrayOutputStream(Math.toIntExact((long) 
(srcZipEntry.getSize() * 1.05)));
                     convertedStream = migrateStream(srcName, srcZipStream, 
tempBuffer);
                     crc32.update(tempBuffer.toByteArray(), 0, 
tempBuffer.size());
                     MigrationZipArchiveEntry destZipEntry = new 
MigrationZipArchiveEntry(srcZipEntry);
@@ -407,7 +411,7 @@ public class Migration {
         }
 
         // Write the destination back to the stream
-        ByteArrayInputStream bais = new 
ByteArrayInputStream(destByteChannel.array(), 0, (int) destByteChannel.size());
+        ByteArrayInputStream bais = new 
ByteArrayInputStream(destByteChannel.array(), 0, 
Math.toIntExact(destByteChannel.size()));
         IOUtils.copy(bais, dest);
 
         return convertedArchive;
@@ -448,6 +452,7 @@ public class Migration {
                     // Cache hit! Copy cached result to dest and return
                     logger.log(Level.INFO, sm.getString("cache.hit", name, 
cacheEntry.getHash()));
                     cacheEntry.copyToDestination(dest);
+                    // Although it is from the cache, this still counts as 
converting the source
                     return true;
                 }
 
diff --git a/src/main/java/org/apache/tomcat/jakartaee/MigrationTask.java 
b/src/main/java/org/apache/tomcat/jakartaee/MigrationTask.java
index e3e5d5b..c39ce09 100644
--- a/src/main/java/org/apache/tomcat/jakartaee/MigrationTask.java
+++ b/src/main/java/org/apache/tomcat/jakartaee/MigrationTask.java
@@ -108,6 +108,12 @@ public class MigrationTask extends Task {
         } catch (IllegalArgumentException e) {
             throw new BuildException("Invalid profile specified: " + 
this.profile, getLocation()); // todo i18n
         }
+        if (src == null || !src.exists() || !src.canRead()) {
+            throw new BuildException("Invalid or missing source parameter: " + 
src); // todo i18n
+        }
+        if (dest == null) {
+            throw new BuildException("Missing destination parameter"); // todo 
i18n
+        }
 
         Migration migration = new Migration();
         migration.setSource(src);
@@ -118,7 +124,7 @@ public class MigrationTask extends Task {
         if (this.excludes != null) {
             String[] excludes= this.excludes.split(",");
             for (String exclude : excludes) {
-                migration.addExclude(exclude);
+                migration.addExclude(exclude.trim());
             }
         }
 
diff --git a/src/main/java/org/apache/tomcat/jakartaee/StringManager.java 
b/src/main/java/org/apache/tomcat/jakartaee/StringManager.java
index 4187348..1813186 100644
--- a/src/main/java/org/apache/tomcat/jakartaee/StringManager.java
+++ b/src/main/java/org/apache/tomcat/jakartaee/StringManager.java
@@ -60,10 +60,10 @@ public class StringManager {
 
 
     /**
-     * Creates a new StringManager for a given package. This is a
-     * private method and all access to it is arbitrated by the
-     * static getManager method call so that only one StringManager
-     * per package will be created.
+     * Creates a new StringManager for a given package and locale.
+     * Access is arbitrated by the static {@link #getManager(Class)}
+     * method which caches instances per package/locale combination
+     * using an LRU cache.
      *
      * @param packageName Name of package to create StringManager for.
      */
@@ -75,7 +75,7 @@ public class StringManager {
             // use of the ROOT Locale else incorrect results may be obtained if
             // the system default locale is not English and translations are
             // available for the system default locale.
-            if (locale.getLanguage().equals(Locale.ENGLISH.getLanguage())) {
+            if (Locale.ENGLISH.getLanguage().equals(locale.getLanguage())) {
                 locale = Locale.ROOT;
             }
             bnd = ResourceBundle.getBundle(bundleName, locale);
@@ -167,7 +167,9 @@ public class StringManager {
         }
 
         MessageFormat mf = new MessageFormat(value);
-        mf.setLocale(locale);
+        if (locale != null) {
+            mf.setLocale(locale);
+        }
         return mf.format(args, new StringBuffer(), null).toString();
     }
 
diff --git a/src/main/java/org/apache/tomcat/jakartaee/TextConverter.java 
b/src/main/java/org/apache/tomcat/jakartaee/TextConverter.java
index cee3917..7421165 100644
--- a/src/main/java/org/apache/tomcat/jakartaee/TextConverter.java
+++ b/src/main/java/org/apache/tomcat/jakartaee/TextConverter.java
@@ -87,7 +87,7 @@ public class TextConverter implements Converter {
             }
         } else {
             if (logger.isLoggable(Level.FINEST)) {
-                logger.log(Level.FINEST, 
sm.getString("classConverter.noConversion", path));
+                logger.log(Level.FINEST, 
sm.getString("textConverter.noConversion", path));
             }
         }
 
diff --git 
a/src/main/resources/org/apache/tomcat/jakartaee/LocalStrings.properties 
b/src/main/resources/org/apache/tomcat/jakartaee/LocalStrings.properties
index f493afc..e87a484 100644
--- a/src/main/resources/org/apache/tomcat/jakartaee/LocalStrings.properties
+++ b/src/main/resources/org/apache/tomcat/jakartaee/LocalStrings.properties
@@ -27,7 +27,7 @@ migration.done=Migration completed successfully in [{0}] 
milliseconds
 migration.error=Error performing migration
 migration.execute=Performing migration from source [{0}] to destination [{1}] 
with Jakarta EE specification profile [{2}]
 migration.jdk8303866=Due to size of [{0}], migrated JAR will fail if used in a 
JDK without the fix for https://bugs.openjdk.org/browse/JDK-8303866 - Using an 
in memory migration rather than a streaming migration may work-around the issue.
-migration.mkdirError=Error creating destination directory [{0}]a
+migration.mkdirError=Error creating destination directory [{0}]
 migration.skip=Migration skipped for archive [{0}] because it is excluded (the 
archive was copied unchanged)
 migration.skipSignatureFile=Drop cryptographic signature file [{0}]
 migration.usage=Usage: Migration [options] <source> <destination>\n\
@@ -100,6 +100,9 @@ cache.pruned.entry=Pruned cache entry {0} (last accessed: 
{1})
 cache.pruned.failed=Failed to delete cache entry {0}
 cache.pruned.summary=Pruned {0} cache entries totaling {1} MB (retention 
period: {2} days)
 cache.pruned.none=No cache entries to prune (retention period: {0} days)
+cache.tempfile.cleaned=Cache temporary file [{0}] was cleaned
+cache.tempfile.cleanFailed=Cache temporary file [{0}] cleaning failed
+cache.tempfiles.cleaned=[{0}] cache temporary files were cleaned
 
 cacheEntry.copyNotExist=Cannot copy - cache entry does not exist
 cacheEntry.tempNotExist=Temporary file [{0}] does not exist


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to