You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2022/10/29 11:50:33 UTC

[commons-bcel] branch master updated (65f10995 -> 1e1fb830)

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

ggregory pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/commons-bcel.git


    from 65f10995 Merge branch 'master' of https://gitbox.apache.org/repos/asf/commons-bcel.git
     new a2145fb1 Use Java 8 API
     new 70d94ab8 Spelling
     new 441a5902 Use Java 8 Map API
     new f497d444 Use Integer instead of custom class as keys to allow reuse of the Integer cache.
     new 0b6ca2a1 Use Java 8 Map API
     new 1e1fb830 Declare variables where they are used

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 src/examples/Package.java                          |   5 +-
 .../org/apache/bcel/classfile/ConstantUtf8.java    |   4 +-
 .../org/apache/bcel/generic/ConstantPoolGen.java   | 161 ++++++++-------------
 .../org/apache/bcel/verifier/PassVerifier.java     |  21 ++-
 .../java/org/apache/bcel/verifier/Verifier.java    |   8 +-
 5 files changed, 88 insertions(+), 111 deletions(-)


[commons-bcel] 04/06: Use Integer instead of custom class as keys to allow reuse of the Integer cache.

Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-bcel.git

commit f497d4442bf7e0e9edcf0c74dba7cbedc9718dd5
Author: Gary David Gregory (Code signing key) <gg...@apache.org>
AuthorDate: Sat Oct 29 07:28:06 2022 -0400

    Use Integer instead of custom class as keys to allow reuse of the
    Integer cache.
---
 .../org/apache/bcel/generic/ConstantPoolGen.java   | 72 ++++++++++------------
 1 file changed, 32 insertions(+), 40 deletions(-)

diff --git a/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java b/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java
index 1e888be3..7fe4ec8d 100644
--- a/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java
+++ b/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java
@@ -49,15 +49,6 @@ import org.apache.bcel.classfile.Utility;
  */
 public class ConstantPoolGen {
 
-    private static class Index {
-
-        final int index;
-
-        Index(final int i) {
-            index = i;
-        }
-    }
-
     private static final int DEFAULT_BUFFER_SIZE = 256;
 
     private static final String METHODREF_DELIM = ":";
@@ -86,15 +77,15 @@ public class ConstantPoolGen {
     @Deprecated
     protected int index = 1; // First entry (0) used by JVM
 
-    private final Map<String, Index> stringTable = new HashMap<>();
+    private final Map<String, Integer> stringTable = new HashMap<>();
 
-    private final Map<String, Index> classTable = new HashMap<>();
+    private final Map<String, Integer> classTable = new HashMap<>();
 
-    private final Map<String, Index> utf8Table = new HashMap<>();
+    private final Map<String, Integer> utf8Table = new HashMap<>();
 
-    private final Map<String, Index> natTable = new HashMap<>();
+    private final Map<String, Integer> natTable = new HashMap<>();
 
-    private final Map<String, Index> cpTable = new HashMap<>();
+    private final Map<String, Integer> cpTable = new HashMap<>();
 
     /**
      * Create empty constant pool.
@@ -127,14 +118,14 @@ public class ConstantPoolGen {
                 final ConstantUtf8 u8 = (ConstantUtf8) constants[s.getStringIndex()];
                 final String key = u8.getBytes();
                 if (!stringTable.containsKey(key)) {
-                    stringTable.put(key, new Index(i));
+                    stringTable.put(key, Integer.valueOf(i));
                 }
             } else if (c instanceof ConstantClass) {
                 final ConstantClass s = (ConstantClass) c;
                 final ConstantUtf8 u8 = (ConstantUtf8) constants[s.getNameIndex()];
                 final String key = u8.getBytes();
                 if (!classTable.containsKey(key)) {
-                    classTable.put(key, new Index(i));
+                    classTable.put(key, Integer.valueOf(i));
                 }
             } else if (c instanceof ConstantNameAndType) {
                 final ConstantNameAndType n = (ConstantNameAndType) c;
@@ -148,13 +139,13 @@ public class ConstantPoolGen {
                 sb.delete(0, sb.length());
 
                 if (!natTable.containsKey(key)) {
-                    natTable.put(key, new Index(i));
+                    natTable.put(key, Integer.valueOf(i));
                 }
             } else if (c instanceof ConstantUtf8) {
                 final ConstantUtf8 u = (ConstantUtf8) c;
                 final String key = u.getBytes();
                 if (!utf8Table.containsKey(key)) {
-                    utf8Table.put(key, new Index(i));
+                    utf8Table.put(key, Integer.valueOf(i));
                 }
             } else if (c instanceof ConstantCP) {
                 final ConstantCP m = (ConstantCP) c;
@@ -194,7 +185,7 @@ public class ConstantPoolGen {
                 sb.delete(0, sb.length());
 
                 if (!cpTable.containsKey(key)) {
-                    cpTable.put(key, new Index(i));
+                    cpTable.put(key, Integer.valueOf(i));
                 }
             } else if (c == null) { // entries may be null
                 // nothing to do
@@ -267,7 +258,7 @@ public class ConstantPoolGen {
         final ConstantClass c = new ConstantClass(addUtf8(clazz));
         final int ret = index;
         constants[index++] = c;
-        classTable.computeIfAbsent(clazz, k -> new Index(ret));
+        classTable.computeIfAbsent(clazz, k -> Integer.valueOf(ret));
         return ret;
     }
 
@@ -371,7 +362,7 @@ public class ConstantPoolGen {
         constants[index++] = new ConstantFieldref(classIndex, nameAndTypeIndex);
         final String key = className + FIELDREF_DELIM + fieldName + FIELDREF_DELIM + signature;
         if (!cpTable.containsKey(key)) {
-            cpTable.put(key, new Index(ret));
+            cpTable.put(key, Integer.valueOf(ret));
         }
         return ret;
     }
@@ -436,7 +427,7 @@ public class ConstantPoolGen {
         constants[index++] = new ConstantInterfaceMethodref(classIndex, nameAndTypeIndex);
         final String key = className + IMETHODREF_DELIM + methodName + IMETHODREF_DELIM + signature;
         if (!cpTable.containsKey(key)) {
-            cpTable.put(key, new Index(ret));
+            cpTable.put(key, Integer.valueOf(ret));
         }
         return ret;
     }
@@ -485,7 +476,7 @@ public class ConstantPoolGen {
         constants[index++] = new ConstantMethodref(classIndex, nameAndTypeIndex);
         final String key = className + METHODREF_DELIM + methodName + METHODREF_DELIM + signature;
         if (!cpTable.containsKey(key)) {
-            cpTable.put(key, new Index(ret));
+            cpTable.put(key, Integer.valueOf(ret));
         }
         return ret;
     }
@@ -511,7 +502,7 @@ public class ConstantPoolGen {
         constants[index++] = new ConstantNameAndType(nameIndex, signatureIndex);
         final String key = name + NAT_DELIM + signature;
         if (!natTable.containsKey(key)) {
-            natTable.put(key, new Index(ret));
+            natTable.put(key, Integer.valueOf(ret));
         }
         return ret;
     }
@@ -533,7 +524,7 @@ public class ConstantPoolGen {
         ret = index;
         constants[index++] = s;
         if (!stringTable.containsKey(str)) {
-            stringTable.put(str, new Index(ret));
+            stringTable.put(str, Integer.valueOf(ret));
         }
         return ret;
     }
@@ -553,7 +544,7 @@ public class ConstantPoolGen {
         ret = index;
         constants[index++] = new ConstantUtf8(n);
         if (!utf8Table.containsKey(n)) {
-            utf8Table.put(n, new Index(ret));
+            utf8Table.put(n, Integer.valueOf(ret));
         }
         return ret;
     }
@@ -603,6 +594,10 @@ public class ConstantPoolGen {
         return new ConstantPool(cs);
     }
 
+    private int getIndex(final Map<String, Integer> map, final String key) {
+        return toIndex(map.get(key));
+    }
+
     /**
      * @return current size of constant pool
      */
@@ -617,8 +612,7 @@ public class ConstantPoolGen {
      * @return index on success, -1 otherwise
      */
     public int lookupClass(final String str) {
-        final Index index = classTable.get(str.replace('.', '/'));
-        return index != null ? index.index : -1;
+        return getIndex(classTable, str.replace('.', '/'));
     }
 
     /**
@@ -649,8 +643,7 @@ public class ConstantPoolGen {
      * @return index on success, -1 otherwise
      */
     public int lookupFieldref(final String className, final String fieldName, final String signature) {
-        final Index index = cpTable.get(className + FIELDREF_DELIM + fieldName + FIELDREF_DELIM + signature);
-        return index != null ? index.index : -1;
+        return getIndex(cpTable, className + FIELDREF_DELIM + fieldName + FIELDREF_DELIM + signature);
     }
 
     /**
@@ -703,8 +696,7 @@ public class ConstantPoolGen {
      * @return index on success, -1 otherwise
      */
     public int lookupInterfaceMethodref(final String className, final String methodName, final String signature) {
-        final Index index = cpTable.get(className + IMETHODREF_DELIM + methodName + IMETHODREF_DELIM + signature);
-        return index != null ? index.index : -1;
+        return getIndex(cpTable, className + IMETHODREF_DELIM + methodName + IMETHODREF_DELIM + signature);
     }
 
     /**
@@ -738,8 +730,7 @@ public class ConstantPoolGen {
      * @return index on success, -1 otherwise
      */
     public int lookupMethodref(final String className, final String methodName, final String signature) {
-        final Index index = cpTable.get(className + METHODREF_DELIM + methodName + METHODREF_DELIM + signature);
-        return index != null ? index.index : -1;
+        return getIndex(cpTable, className + METHODREF_DELIM + methodName + METHODREF_DELIM + signature);
     }
 
     /**
@@ -750,8 +741,7 @@ public class ConstantPoolGen {
      * @return index on success, -1 otherwise
      */
     public int lookupNameAndType(final String name, final String signature) {
-        final Index index = natTable.get(name + NAT_DELIM + signature);
-        return index != null ? index.index : -1;
+        return getIndex(natTable, name + NAT_DELIM + signature);
     }
 
     /**
@@ -761,8 +751,7 @@ public class ConstantPoolGen {
      * @return index on success, -1 otherwise
      */
     public int lookupString(final String str) {
-        final Index index = stringTable.get(str);
-        return index != null ? index.index : -1;
+        return getIndex(stringTable, str);
     }
 
     /**
@@ -772,8 +761,7 @@ public class ConstantPoolGen {
      * @return index on success, -1 otherwise
      */
     public int lookupUtf8(final String n) {
-        final Index index = utf8Table.get(n);
-        return index != null ? index.index : -1;
+        return getIndex(utf8Table, n);
     }
 
     /**
@@ -786,6 +774,10 @@ public class ConstantPoolGen {
         constants[i] = c;
     }
 
+    private int toIndex(final Integer index) {
+        return index != null ? index.intValue() : -1;
+    }
+
     /**
      * @return String representation.
      */


[commons-bcel] 03/06: Use Java 8 Map API

Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-bcel.git

commit 441a5902f49df2039fd4613afc2f4716cd488bee
Author: Gary David Gregory (Code signing key) <gg...@apache.org>
AuthorDate: Sat Oct 29 07:12:36 2022 -0400

    Use Java 8 Map API
---
 .../java/org/apache/bcel/generic/ConstantPoolGen.java     | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java b/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java
index 1ed3a324..1e888be3 100644
--- a/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java
+++ b/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java
@@ -65,12 +65,15 @@ public class ConstantPoolGen {
     private static final String IMETHODREF_DELIM = "#";
 
     private static final String FIELDREF_DELIM = "&";
+
     private static final String NAT_DELIM = "%"; // Name and Type
+
     /**
      * @deprecated (since 6.0) will be made private; do not access directly, use getter/setter
      */
     @Deprecated
     protected int size;
+
     /**
      * @deprecated (since 6.0) will be made private; do not access directly, use getter/setter
      */
@@ -256,17 +259,15 @@ public class ConstantPoolGen {
     }
 
     private int addClass_(final String clazz) {
-        int ret;
-        if ((ret = lookupClass(clazz)) != -1) {
-            return ret; // Already in CP
+        final int cpRet;
+        if ((cpRet = lookupClass(clazz)) != -1) {
+            return cpRet; // Already in CP
         }
         adjustSize();
         final ConstantClass c = new ConstantClass(addUtf8(clazz));
-        ret = index;
+        final int ret = index;
         constants[index++] = c;
-        if (!classTable.containsKey(clazz)) {
-            classTable.put(clazz, new Index(ret));
-        }
+        classTable.computeIfAbsent(clazz, k -> new Index(ret));
         return ret;
     }
 


[commons-bcel] 02/06: Spelling

Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-bcel.git

commit 70d94ab891ba86b3d24dcbeff9d41adc1dd8372e
Author: Gary David Gregory (Code signing key) <gg...@apache.org>
AuthorDate: Sat Oct 29 07:04:28 2022 -0400

    Spelling
---
 src/main/java/org/apache/bcel/classfile/ConstantUtf8.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/apache/bcel/classfile/ConstantUtf8.java b/src/main/java/org/apache/bcel/classfile/ConstantUtf8.java
index bc5d01e0..5b8aa66a 100644
--- a/src/main/java/org/apache/bcel/classfile/ConstantUtf8.java
+++ b/src/main/java/org/apache/bcel/classfile/ConstantUtf8.java
@@ -107,7 +107,7 @@ public final class ConstantUtf8 extends Constant {
         Cache.CACHE.clear();
     }
 
-    // for accesss by test code
+    // for access by test code
     static synchronized void clearStats() {
         hits = considered = skipped = created = 0;
     }
@@ -169,7 +169,7 @@ public final class ConstantUtf8 extends Constant {
         return Cache.isEnabled() ? getCachedInstance(value) : new ConstantUtf8(value);
     }
 
-    // for accesss by test code
+    // for access by test code
     static void printStats() {
         final String prefix = "[Apache Commons BCEL]";
         System.err.printf("%s Cache hit %,d/%,d, %d skipped.%n", prefix, hits, considered, skipped);


[commons-bcel] 06/06: Declare variables where they are used

Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-bcel.git

commit 1e1fb830d74afcec27597be2cf6847bf87cb0882
Author: Gary David Gregory (Code signing key) <gg...@apache.org>
AuthorDate: Sat Oct 29 07:50:26 2022 -0400

    Declare variables where they are used
---
 .../org/apache/bcel/generic/ConstantPoolGen.java   | 24 ++++++++--------------
 1 file changed, 8 insertions(+), 16 deletions(-)

diff --git a/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java b/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java
index 30d2c93c..3c1556e6 100644
--- a/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java
+++ b/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java
@@ -349,14 +349,12 @@ public class ConstantPoolGen {
      */
     public int addFieldref(final String className, final String fieldName, final String signature) {
         final int cpRet;
-        int classIndex;
-        int nameAndTypeIndex;
         if ((cpRet = lookupFieldref(className, fieldName, signature)) != -1) {
             return cpRet; // Already in CP
         }
         adjustSize();
-        classIndex = addClass(className);
-        nameAndTypeIndex = addNameAndType(fieldName, signature);
+        int classIndex = addClass(className);
+        int nameAndTypeIndex = addNameAndType(fieldName, signature);
         final int ret = index;
         constants[index++] = new ConstantFieldref(classIndex, nameAndTypeIndex);
         return computeIfAbsent(cpTable, className + FIELDREF_DELIM + fieldName + FIELDREF_DELIM + signature, ret);
@@ -410,14 +408,12 @@ public class ConstantPoolGen {
      */
     public int addInterfaceMethodref(final String className, final String methodName, final String signature) {
         final int cpRet;
-        int classIndex;
-        int nameAndTypeIndex;
         if ((cpRet = lookupInterfaceMethodref(className, methodName, signature)) != -1) {
             return cpRet; // Already in CP
         }
         adjustSize();
-        classIndex = addClass(className);
-        nameAndTypeIndex = addNameAndType(methodName, signature);
+        int classIndex = addClass(className);
+        int nameAndTypeIndex = addNameAndType(methodName, signature);
         final int ret = index;
         constants[index++] = new ConstantInterfaceMethodref(classIndex, nameAndTypeIndex);
         return computeIfAbsent(cpTable, className + IMETHODREF_DELIM + methodName + IMETHODREF_DELIM + signature, ret);
@@ -454,14 +450,12 @@ public class ConstantPoolGen {
      */
     public int addMethodref(final String className, final String methodName, final String signature) {
         final int cpRet;
-        int classIndex;
-        int nameAndTypeIndex;
         if ((cpRet = lookupMethodref(className, methodName, signature)) != -1) {
             return cpRet; // Already in CP
         }
         adjustSize();
-        nameAndTypeIndex = addNameAndType(methodName, signature);
-        classIndex = addClass(className);
+        int nameAndTypeIndex = addNameAndType(methodName, signature);
+        int classIndex = addClass(className);
         final int ret = index;
         constants[index++] = new ConstantMethodref(classIndex, nameAndTypeIndex);
         return computeIfAbsent(cpTable, className + METHODREF_DELIM + methodName + METHODREF_DELIM + signature, ret);
@@ -476,14 +470,12 @@ public class ConstantPoolGen {
      */
     public int addNameAndType(final String name, final String signature) {
         int ret;
-        int nameIndex;
-        int signatureIndex;
         if ((ret = lookupNameAndType(name, signature)) != -1) {
             return ret; // Already in CP
         }
         adjustSize();
-        nameIndex = addUtf8(name);
-        signatureIndex = addUtf8(signature);
+        int nameIndex = addUtf8(name);
+        int signatureIndex = addUtf8(signature);
         ret = index;
         constants[index++] = new ConstantNameAndType(nameIndex, signatureIndex);
         return computeIfAbsent(natTable, name + NAT_DELIM + signature, ret);


[commons-bcel] 01/06: Use Java 8 API

Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-bcel.git

commit a2145fb14a9e2e68b52df81667eda76c947463f9
Author: Gary David Gregory (Code signing key) <gg...@apache.org>
AuthorDate: Sat Oct 29 07:04:19 2022 -0400

    Use Java 8 API
---
 src/examples/Package.java                           |  5 ++---
 .../java/org/apache/bcel/verifier/PassVerifier.java | 21 +++++++++++++++++++--
 .../java/org/apache/bcel/verifier/Verifier.java     |  8 ++------
 3 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/src/examples/Package.java b/src/examples/Package.java
index cc656e7e..1d630235 100644
--- a/src/examples/Package.java
+++ b/src/examples/Package.java
@@ -34,6 +34,7 @@ import org.apache.bcel.classfile.ConstantPool;
 import org.apache.bcel.classfile.ConstantUtf8;
 import org.apache.bcel.classfile.JavaClass;
 import org.apache.bcel.util.ClassPath;
+import org.apache.commons.lang3.ArraySorter;
 
 /**
  * Package the client. Creates a jar file in the current directory that contains a minimal set of classes needed to run
@@ -245,9 +246,7 @@ public class Package {
     void printAllClasses() {
         final List<String> names = new ArrayList<>(allClasses.keySet());
         Collections.sort(names);
-        for (final String cl : names) {
-            System.err.println(cl);
-        }
+        names.forEach(System.err::println);
     }
 
     public void usage() {
diff --git a/src/main/java/org/apache/bcel/verifier/PassVerifier.java b/src/main/java/org/apache/bcel/verifier/PassVerifier.java
index 21e95336..b037384a 100644
--- a/src/main/java/org/apache/bcel/verifier/PassVerifier.java
+++ b/src/main/java/org/apache/bcel/verifier/PassVerifier.java
@@ -47,24 +47,40 @@ public abstract class PassVerifier {
      * This method adds a (warning) message to the message pool of this PassVerifier. This method is normally only
      * internally used by BCEL's class file verifier "JustIce" and should not be used from the outside.
      *
+     * @param message message to be appended to the message list. 
      * @see #getMessages()
      */
     public void addMessage(final String message) {
         messages.add(message);
     }
 
-    /** Does the real verification work, uncached. */
+    /**
+     * Verifies, not cached.
+     * 
+     * @return The VerificationResult
+     */
     public abstract VerificationResult do_verify();
 
     /**
      * Returns the (warning) messages that this PassVerifier accumulated during its do_verify()ing work.
      *
+     * @return the (warning) messages.
      * @see #addMessage(String)
      * @see #do_verify()
      */
     public String[] getMessages() {
+        return getMessagesList().toArray(ArrayUtils.EMPTY_STRING_ARRAY);
+    }
+
+    /**
+     * Returns the (warning) messages that this PassVerifier accumulated during its do_verify()ing work.
+     *
+     * @see #addMessage(String)
+     * @see #do_verify()
+     */
+    public List<String> getMessagesList() {
         verify(); // create messages if not already done (cached!)
-        return messages.toArray(ArrayUtils.EMPTY_STRING_ARRAY);
+        return messages;
     }
 
     /**
@@ -73,6 +89,7 @@ public abstract class PassVerifier {
      * this result may be returned after every invocation of this method instead of running the verification pass anew;
      * likewise with the result of getMessages().
      *
+     * @return a VerificationResult.
      * @see #getMessages()
      * @see #addMessage(String)
      */
diff --git a/src/main/java/org/apache/bcel/verifier/Verifier.java b/src/main/java/org/apache/bcel/verifier/Verifier.java
index 75be8764..a07a21fc 100644
--- a/src/main/java/org/apache/bcel/verifier/Verifier.java
+++ b/src/main/java/org/apache/bcel/verifier/Verifier.java
@@ -192,14 +192,10 @@ public class Verifier {
     public String[] getMessages() throws ClassNotFoundException {
         final List<String> messages = new ArrayList<>();
         if (p1v != null) {
-            for (final String element : p1v.getMessages()) {
-                messages.add("Pass 1: " + element);
-            }
+            p1v.getMessagesList().forEach(element -> messages.add("Pass 1: " + element));
         }
         if (p2v != null) {
-            for (final String element : p2v.getMessages()) {
-                messages.add("Pass 2: " + element);
-            }
+            p2v.getMessagesList().forEach(element -> messages.add("Pass 2: " + element));
         }
         for (final Pass3aVerifier pv : p3avs.values()) {
             final int meth = pv.getMethodNo();


[commons-bcel] 05/06: Use Java 8 Map API

Posted by gg...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-bcel.git

commit 0b6ca2a1af09a69b3e13464031cbc4c9844403b4
Author: Gary David Gregory (Code signing key) <gg...@apache.org>
AuthorDate: Sat Oct 29 07:43:51 2022 -0400

    Use Java 8 Map API
---
 .../org/apache/bcel/generic/ConstantPoolGen.java   | 66 ++++++++--------------
 1 file changed, 23 insertions(+), 43 deletions(-)

diff --git a/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java b/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java
index 7fe4ec8d..30d2c93c 100644
--- a/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java
+++ b/src/main/java/org/apache/bcel/generic/ConstantPoolGen.java
@@ -258,8 +258,7 @@ public class ConstantPoolGen {
         final ConstantClass c = new ConstantClass(addUtf8(clazz));
         final int ret = index;
         constants[index++] = c;
-        classTable.computeIfAbsent(clazz, k -> Integer.valueOf(ret));
-        return ret;
+        return computeIfAbsent(classTable, clazz, ret);
     }
 
     /**
@@ -349,22 +348,18 @@ public class ConstantPoolGen {
      * @return index of entry
      */
     public int addFieldref(final String className, final String fieldName, final String signature) {
-        int ret;
+        final int cpRet;
         int classIndex;
         int nameAndTypeIndex;
-        if ((ret = lookupFieldref(className, fieldName, signature)) != -1) {
-            return ret; // Already in CP
+        if ((cpRet = lookupFieldref(className, fieldName, signature)) != -1) {
+            return cpRet; // Already in CP
         }
         adjustSize();
         classIndex = addClass(className);
         nameAndTypeIndex = addNameAndType(fieldName, signature);
-        ret = index;
+        final int ret = index;
         constants[index++] = new ConstantFieldref(classIndex, nameAndTypeIndex);
-        final String key = className + FIELDREF_DELIM + fieldName + FIELDREF_DELIM + signature;
-        if (!cpTable.containsKey(key)) {
-            cpTable.put(key, Integer.valueOf(ret));
-        }
-        return ret;
+        return computeIfAbsent(cpTable, className + FIELDREF_DELIM + fieldName + FIELDREF_DELIM + signature, ret);
     }
 
     /**
@@ -414,22 +409,18 @@ public class ConstantPoolGen {
      * @return index of entry
      */
     public int addInterfaceMethodref(final String className, final String methodName, final String signature) {
-        int ret;
+        final int cpRet;
         int classIndex;
         int nameAndTypeIndex;
-        if ((ret = lookupInterfaceMethodref(className, methodName, signature)) != -1) {
-            return ret; // Already in CP
+        if ((cpRet = lookupInterfaceMethodref(className, methodName, signature)) != -1) {
+            return cpRet; // Already in CP
         }
         adjustSize();
         classIndex = addClass(className);
         nameAndTypeIndex = addNameAndType(methodName, signature);
-        ret = index;
+        final int ret = index;
         constants[index++] = new ConstantInterfaceMethodref(classIndex, nameAndTypeIndex);
-        final String key = className + IMETHODREF_DELIM + methodName + IMETHODREF_DELIM + signature;
-        if (!cpTable.containsKey(key)) {
-            cpTable.put(key, Integer.valueOf(ret));
-        }
-        return ret;
+        return computeIfAbsent(cpTable, className + IMETHODREF_DELIM + methodName + IMETHODREF_DELIM + signature, ret);
     }
 
     /**
@@ -449,7 +440,6 @@ public class ConstantPoolGen {
         index += 2; // Wastes one entry according to spec
         return ret;
     }
-
     public int addMethodref(final MethodGen method) {
         return addMethodref(method.getClassName(), method.getName(), method.getSignature());
     }
@@ -463,22 +453,18 @@ public class ConstantPoolGen {
      * @return index of entry
      */
     public int addMethodref(final String className, final String methodName, final String signature) {
-        int ret;
+        final int cpRet;
         int classIndex;
         int nameAndTypeIndex;
-        if ((ret = lookupMethodref(className, methodName, signature)) != -1) {
-            return ret; // Already in CP
+        if ((cpRet = lookupMethodref(className, methodName, signature)) != -1) {
+            return cpRet; // Already in CP
         }
         adjustSize();
         nameAndTypeIndex = addNameAndType(methodName, signature);
         classIndex = addClass(className);
-        ret = index;
+        final int ret = index;
         constants[index++] = new ConstantMethodref(classIndex, nameAndTypeIndex);
-        final String key = className + METHODREF_DELIM + methodName + METHODREF_DELIM + signature;
-        if (!cpTable.containsKey(key)) {
-            cpTable.put(key, Integer.valueOf(ret));
-        }
-        return ret;
+        return computeIfAbsent(cpTable, className + METHODREF_DELIM + methodName + METHODREF_DELIM + signature, ret);
     }
 
     /**
@@ -500,11 +486,7 @@ public class ConstantPoolGen {
         signatureIndex = addUtf8(signature);
         ret = index;
         constants[index++] = new ConstantNameAndType(nameIndex, signatureIndex);
-        final String key = name + NAT_DELIM + signature;
-        if (!natTable.containsKey(key)) {
-            natTable.put(key, Integer.valueOf(ret));
-        }
-        return ret;
+        return computeIfAbsent(natTable, name + NAT_DELIM + signature, ret);
     }
 
     /**
@@ -523,10 +505,7 @@ public class ConstantPoolGen {
         final ConstantString s = new ConstantString(utf8);
         ret = index;
         constants[index++] = s;
-        if (!stringTable.containsKey(str)) {
-            stringTable.put(str, Integer.valueOf(ret));
-        }
-        return ret;
+        return computeIfAbsent(stringTable, str, ret);
     }
 
     /**
@@ -543,10 +522,7 @@ public class ConstantPoolGen {
         adjustSize();
         ret = index;
         constants[index++] = new ConstantUtf8(n);
-        if (!utf8Table.containsKey(n)) {
-            utf8Table.put(n, Integer.valueOf(ret));
-        }
-        return ret;
+        return computeIfAbsent(utf8Table, n, ret);
     }
 
     /**
@@ -570,6 +546,10 @@ public class ConstantPoolGen {
         }
     }
 
+    private int computeIfAbsent(final Map<String, Integer> map, final String key, final int value) {
+        return map.computeIfAbsent(key, k -> Integer.valueOf(value));
+    }
+
     /**
      * @param i index in constant pool
      * @return constant pool entry at index i