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


The following commit(s) were added to refs/heads/master by this push:
     new f230b001 BCELComparator now uses generics
f230b001 is described below

commit f230b0016628bef3bbfd2648d14ba4e607fb03ca
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Sun Jan 7 12:06:12 2024 -0500

    BCELComparator now uses generics
    
    Avoid NPEs in BCELComparator implementations
---
 src/changes/changes.xml                            |  8 ++++
 .../java/org/apache/bcel/classfile/Constant.java   | 21 +++++------
 src/main/java/org/apache/bcel/classfile/Field.java | 25 ++++++------
 .../java/org/apache/bcel/classfile/JavaClass.java  | 24 ++++++------
 .../java/org/apache/bcel/classfile/Method.java     | 25 ++++++------
 .../java/org/apache/bcel/generic/ClassGen.java     | 19 ++++------
 .../java/org/apache/bcel/generic/FieldGen.java     | 27 ++++++-------
 .../java/org/apache/bcel/generic/MethodGen.java    | 23 +++++------
 .../java/org/apache/bcel/util/BCELComparator.java  | 23 +++++------
 .../org/apache/bcel/classfile/ConstantTest.java}   | 38 +++++++++----------
 .../java/org/apache/bcel/classfile/FieldTest.java} | 38 +++++++++----------
 .../org/apache/bcel/generic/ClassGenTest.java}     | 38 +++++++++----------
 .../java/org/apache/bcel/generic/FieldGenTest.java | 44 ++++++++++++++++++++++
 13 files changed, 187 insertions(+), 166 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index b0b8a17b..8f6bea68 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -68,6 +68,14 @@ The <action> type attribute can be add,update,fix,remove.
       <!-- FIX  -->
       <action                  type="fix" dev="ggregory" due-to="Gary 
Gregory">Replace internal use of StringBuffer with StringBuilder.</action>
       <action issue="BCEL-370" type="fix" dev="ggregory" due-to="Gary 
Gregory">CONSTANT_Dynamic is not handled in LDC #254.</action>
+      <action                  type="fix" dev="ggregory" due-to="Gary 
Gregory">BCELComparator now uses generics.</action>
+      <action                  type="fix" dev="ggregory" due-to="Gary 
Gregory">Avoid NullPointerException in ClassGen.BCELComparator#equals() and 
ClassGen.BCELComparator#hashCode().</action>
+      <action                  type="fix" dev="ggregory" due-to="Gary 
Gregory">Avoid NullPointerException in Constant.BCELComparator#equals() and 
Constant.BCELComparator#hashCode().</action>
+      <action                  type="fix" dev="ggregory" due-to="Gary 
Gregory">Avoid NullPointerException in Field.BCELComparator#equals() and 
Field.BCELComparator#hashCode().</action>
+      <action                  type="fix" dev="ggregory" due-to="Gary 
Gregory">Avoid NullPointerException in FieldGen.BCELComparator#equals() and 
FieldGen.BCELComparator#hashCode().</action>
+      <action                  type="fix" dev="ggregory" due-to="Gary 
Gregory">Avoid NullPointerException in JavaClass.BCELComparator#equals() and 
JavaClass.BCELComparator#hashCode().</action>
+      <action                  type="fix" dev="ggregory" due-to="Gary 
Gregory">Avoid NullPointerException in Method.BCELComparator#equals() and 
Method.BCELComparator#hashCode().</action>
+      <action                  type="fix" dev="ggregory" due-to="Gary 
Gregory">Avoid NullPointerException in MethodGen.BCELComparator#equals() and 
MethodGen.BCELComparator#hashCode().</action>
       <!-- UPDATE -->
       <action                  type="update" dev="ggregory" 
due-to="Dependabot">Bump GitHub various actions for CI builds.</action>
       <action                  type="update" dev="ggregory" 
due-to="Dependabot">Bump jna.version from 5.13.0 to 5.14.0 #250.</action>
diff --git a/src/main/java/org/apache/bcel/classfile/Constant.java 
b/src/main/java/org/apache/bcel/classfile/Constant.java
index a70400cd..6ed876d0 100644
--- a/src/main/java/org/apache/bcel/classfile/Constant.java
+++ b/src/main/java/org/apache/bcel/classfile/Constant.java
@@ -30,26 +30,23 @@ import org.apache.bcel.util.BCELComparator;
  */
 public abstract class Constant implements Cloneable, Node {
 
-    private static BCELComparator bcelComparator = new BCELComparator() {
+    private static BCELComparator<Constant> bcelComparator = new 
BCELComparator<Constant>() {
 
         @Override
-        public boolean equals(final Object o1, final Object o2) {
-            final Constant THIS = (Constant) o1;
-            final Constant THAT = (Constant) o2;
-            return Objects.equals(THIS.toString(), THAT.toString());
+        public boolean equals(final Constant a, final Constant b) {
+            return a == b || a != null && b != null && 
Objects.equals(a.toString(), b.toString());
         }
 
         @Override
-        public int hashCode(final Object o) {
-            final Constant THIS = (Constant) o;
-            return THIS.toString().hashCode();
+        public int hashCode(final Constant o) {
+            return o != null ? Objects.hashCode(o.toString()) : 0;
         }
     };
 
     /**
-     * @return Comparison strategy object
+     * @return Comparison strategy object.
      */
-    public static BCELComparator getComparator() {
+    public static BCELComparator<Constant> getComparator() {
         return bcelComparator;
     }
 
@@ -107,7 +104,7 @@ public abstract class Constant implements Cloneable, Node {
     /**
      * @param comparator Comparison strategy object
      */
-    public static void setComparator(final BCELComparator comparator) {
+    public static void setComparator(final BCELComparator<Constant> 
comparator) {
         bcelComparator = comparator;
     }
 
@@ -168,7 +165,7 @@ public abstract class Constant implements Cloneable, Node {
      */
     @Override
     public boolean equals(final Object obj) {
-        return bcelComparator.equals(this, obj);
+        return obj instanceof Constant && bcelComparator.equals(this, 
(Constant) obj);
     }
 
     /**
diff --git a/src/main/java/org/apache/bcel/classfile/Field.java 
b/src/main/java/org/apache/bcel/classfile/Field.java
index e7b967b8..a7f002e0 100644
--- a/src/main/java/org/apache/bcel/classfile/Field.java
+++ b/src/main/java/org/apache/bcel/classfile/Field.java
@@ -37,19 +37,16 @@ public final class Field extends FieldOrMethod {
      */
     public static final Field[] EMPTY_ARRAY = {};
 
-    private static BCELComparator bcelComparator = new BCELComparator() {
+    private static BCELComparator<Field> bcelComparator = new 
BCELComparator<Field>() {
 
         @Override
-        public boolean equals(final Object o1, final Object o2) {
-            final Field THIS = (Field) o1;
-            final Field THAT = (Field) o2;
-            return Objects.equals(THIS.getName(), THAT.getName()) && 
Objects.equals(THIS.getSignature(), THAT.getSignature());
+        public boolean equals(final Field a, final Field b) {
+            return a == b || a != null && b != null && 
Objects.equals(a.getName(), b.getName()) && Objects.equals(a.getSignature(), 
b.getSignature());
         }
 
         @Override
-        public int hashCode(final Object o) {
-            final Field THIS = (Field) o;
-            return THIS.getSignature().hashCode() ^ THIS.getName().hashCode();
+        public int hashCode(final Field o) {
+            return o != null ? Objects.hash(o.getSignature(), o.getName()) : 0;
         }
     };
 
@@ -59,23 +56,23 @@ public final class Field extends FieldOrMethod {
     static final Field[] EMPTY_FIELD_ARRAY = {};
 
     /**
-     * @return Comparison strategy object
+     * @return Comparison strategy object.
      */
-    public static BCELComparator getComparator() {
+    public static BCELComparator<Field> getComparator() {
         return bcelComparator;
     }
 
     /**
-     * @param comparator Comparison strategy object
+     * @param comparator Comparison strategy object.
      */
-    public static void setComparator(final BCELComparator comparator) {
+    public static void setComparator(final BCELComparator<Field> comparator) {
         bcelComparator = comparator;
     }
 
     /**
      * Constructs object from file stream.
      *
-     * @param file Input stream
+     * @param file Input stream.
      */
     Field(final DataInput file, final ConstantPool constantPool) throws 
IOException, ClassFormatException {
         super(file, constantPool);
@@ -128,7 +125,7 @@ public final class Field extends FieldOrMethod {
      */
     @Override
     public boolean equals(final Object obj) {
-        return bcelComparator.equals(this, obj);
+        return obj instanceof Field && bcelComparator.equals(this, (Field) 
obj);
     }
 
     /**
diff --git a/src/main/java/org/apache/bcel/classfile/JavaClass.java 
b/src/main/java/org/apache/bcel/classfile/JavaClass.java
index 067a9f53..5bcd5c7e 100644
--- a/src/main/java/org/apache/bcel/classfile/JavaClass.java
+++ b/src/main/java/org/apache/bcel/classfile/JavaClass.java
@@ -65,19 +65,17 @@ public class JavaClass extends AccessFlags implements 
Cloneable, Node, Comparabl
     public static final byte FILE = 2;
     public static final byte ZIP = 3;
     private static final boolean debug = 
Boolean.getBoolean("JavaClass.debug"); // Debugging on/off
-    private static BCELComparator bcelComparator = new BCELComparator() {
+
+    private static BCELComparator<JavaClass> bcelComparator = new 
BCELComparator<JavaClass>() {
 
         @Override
-        public boolean equals(final Object o1, final Object o2) {
-            final JavaClass THIS = (JavaClass) o1;
-            final JavaClass THAT = (JavaClass) o2;
-            return Objects.equals(THIS.getClassName(), THAT.getClassName());
+        public boolean equals(final JavaClass a, final JavaClass b) {
+            return a == b || a != null && b != null && 
Objects.equals(a.getClassName(), b.getClassName());
         }
 
         @Override
-        public int hashCode(final Object o) {
-            final JavaClass THIS = (JavaClass) o;
-            return THIS.getClassName().hashCode();
+        public int hashCode(final JavaClass o) {
+            return o != null ? Objects.hashCode(o.getClassName()) : 0;
         }
     };
 
@@ -91,9 +89,9 @@ public class JavaClass extends AccessFlags implements 
Cloneable, Node, Comparabl
     }
 
     /**
-     * @return Comparison strategy object
+     * @return Comparison strategy object.
      */
-    public static BCELComparator getComparator() {
+    public static BCELComparator<JavaClass> getComparator() {
         return bcelComparator;
     }
 
@@ -107,9 +105,9 @@ public class JavaClass extends AccessFlags implements 
Cloneable, Node, Comparabl
     }
 
     /**
-     * @param comparator Comparison strategy object
+     * @param comparator Comparison strategy object.
      */
-    public static void setComparator(final BCELComparator comparator) {
+    public static void setComparator(final BCELComparator<JavaClass> 
comparator) {
         bcelComparator = comparator;
     }
 
@@ -391,7 +389,7 @@ public class JavaClass extends AccessFlags implements 
Cloneable, Node, Comparabl
      */
     @Override
     public boolean equals(final Object obj) {
-        return bcelComparator.equals(this, obj);
+        return obj instanceof JavaClass && bcelComparator.equals(this, 
(JavaClass) obj);
     }
 
     /**
diff --git a/src/main/java/org/apache/bcel/classfile/Method.java 
b/src/main/java/org/apache/bcel/classfile/Method.java
index b9c1e368..84d7e475 100644
--- a/src/main/java/org/apache/bcel/classfile/Method.java
+++ b/src/main/java/org/apache/bcel/classfile/Method.java
@@ -36,19 +36,16 @@ public final class Method extends FieldOrMethod {
      */
     public static final Method[] EMPTY_ARRAY = {};
 
-    private static BCELComparator bcelComparator = new BCELComparator() {
+    private static BCELComparator<Method> bcelComparator = new 
BCELComparator<Method>() {
 
         @Override
-        public boolean equals(final Object o1, final Object o2) {
-            final Method THIS = (Method) o1;
-            final Method THAT = (Method) o2;
-            return Objects.equals(THIS.getName(), THAT.getName()) && 
Objects.equals(THIS.getSignature(), THAT.getSignature());
+        public boolean equals(final Method a, final Method b) {
+            return a == b || a != null && b != null && 
Objects.equals(a.getName(), b.getName()) && Objects.equals(a.getSignature(), 
b.getSignature());
         }
 
         @Override
-        public int hashCode(final Object o) {
-            final Method THIS = (Method) o;
-            return THIS.getSignature().hashCode() ^ THIS.getName().hashCode();
+        public int hashCode(final Method o) {
+            return o != null ? Objects.hash(o.getSignature(), o.getName()) : 0;
         }
     };
 
@@ -58,20 +55,20 @@ public final class Method extends FieldOrMethod {
     static final Method[] EMPTY_METHOD_ARRAY = {};
 
     /**
-     * @return Comparison strategy object
+     * @return Comparison strategy object.
      */
-    public static BCELComparator getComparator() {
+    public static BCELComparator<Method> getComparator() {
         return bcelComparator;
     }
 
     /**
-     * @param comparator Comparison strategy object
+     * @param comparator Comparison strategy object.
      */
-    public static void setComparator(final BCELComparator comparator) {
+    public static void setComparator(final BCELComparator<Method> comparator) {
         bcelComparator = comparator;
     }
 
-    // annotations defined on the parameters of a method
+    /** Annotations defined on the parameters of a method. */
     private ParameterAnnotationEntry[] parameterAnnotationEntries;
 
     /**
@@ -138,7 +135,7 @@ public final class Method extends FieldOrMethod {
      */
     @Override
     public boolean equals(final Object obj) {
-        return bcelComparator.equals(this, obj);
+        return obj instanceof Method && bcelComparator.equals(this, (Method) 
obj);
     }
 
     /**
diff --git a/src/main/java/org/apache/bcel/generic/ClassGen.java 
b/src/main/java/org/apache/bcel/generic/ClassGen.java
index cb4ecb5e..b612050a 100644
--- a/src/main/java/org/apache/bcel/generic/ClassGen.java
+++ b/src/main/java/org/apache/bcel/generic/ClassGen.java
@@ -44,33 +44,30 @@ import org.apache.commons.lang3.ArrayUtils;
  */
 public class ClassGen extends AccessFlags implements Cloneable {
 
-    private static BCELComparator bcelComparator = new BCELComparator() {
+    private static BCELComparator<ClassGen> bcelComparator = new 
BCELComparator<ClassGen>() {
 
         @Override
-        public boolean equals(final Object o1, final Object o2) {
-            final ClassGen THIS = (ClassGen) o1;
-            final ClassGen THAT = (ClassGen) o2;
-            return Objects.equals(THIS.getClassName(), THAT.getClassName());
+        public boolean equals(final ClassGen a, final ClassGen b) {
+            return a == b || a != null && b != null && 
Objects.equals(a.getClassName(), b.getClassName());
         }
 
         @Override
-        public int hashCode(final Object o) {
-            final ClassGen THIS = (ClassGen) o;
-            return THIS.getClassName().hashCode();
+        public int hashCode(final ClassGen o) {
+            return o != null ? Objects.hashCode(o.getClassName()) : 0;
         }
     };
 
     /**
      * @return Comparison strategy object
      */
-    public static BCELComparator getComparator() {
+    public static BCELComparator<ClassGen> getComparator() {
         return bcelComparator;
     }
 
     /**
      * @param comparator Comparison strategy object
      */
-    public static void setComparator(final BCELComparator comparator) {
+    public static void setComparator(final BCELComparator<ClassGen> 
comparator) {
         bcelComparator = comparator;
     }
 
@@ -279,7 +276,7 @@ public class ClassGen extends AccessFlags implements 
Cloneable {
      */
     @Override
     public boolean equals(final Object obj) {
-        return bcelComparator.equals(this, obj);
+        return obj instanceof ClassGen && bcelComparator.equals(this, 
(ClassGen) obj);
     }
 
     // J5TODO: Should we make calling unpackAnnotations() lazy and put it in 
here?
diff --git a/src/main/java/org/apache/bcel/generic/FieldGen.java 
b/src/main/java/org/apache/bcel/generic/FieldGen.java
index 052ab4c4..d964d15b 100644
--- a/src/main/java/org/apache/bcel/generic/FieldGen.java
+++ b/src/main/java/org/apache/bcel/generic/FieldGen.java
@@ -40,33 +40,30 @@ import org.apache.bcel.util.BCELComparator;
  */
 public class FieldGen extends FieldGenOrMethodGen {
 
-    private static BCELComparator bcelComparator = new BCELComparator() {
+    private static BCELComparator<FieldGen> bcelComparator = new 
BCELComparator<FieldGen>() {
 
         @Override
-        public boolean equals(final Object o1, final Object o2) {
-            final FieldGen THIS = (FieldGen) o1;
-            final FieldGen THAT = (FieldGen) o2;
-            return Objects.equals(THIS.getName(), THAT.getName()) && 
Objects.equals(THIS.getSignature(), THAT.getSignature());
+        public boolean equals(final FieldGen a, final FieldGen b) {
+            return a == b || a != null && b != null && 
Objects.equals(a.getName(), b.getName()) && Objects.equals(a.getSignature(), 
b.getSignature());
         }
 
         @Override
-        public int hashCode(final Object o) {
-            final FieldGen THIS = (FieldGen) o;
-            return THIS.getSignature().hashCode() ^ THIS.getName().hashCode();
+        public int hashCode(final FieldGen o) {
+            return o != null ? Objects.hash(o.getSignature(), o.getName()) : 0;
         }
     };
 
     /**
-     * @return Comparison strategy object
+     * @return Comparison strategy object.
      */
-    public static BCELComparator getComparator() {
+    public static BCELComparator<FieldGen> getComparator() {
         return bcelComparator;
     }
 
     /**
-     * @param comparator Comparison strategy object
+     * @param comparator Comparison strategy object.
      */
-    public static void setComparator(final BCELComparator comparator) {
+    public static void setComparator(final BCELComparator<FieldGen> 
comparator) {
         bcelComparator = comparator;
     }
 
@@ -77,8 +74,8 @@ public class FieldGen extends FieldGenOrMethodGen {
     /**
      * Instantiate from existing field.
      *
-     * @param field Field object
-     * @param cp constant pool (must contain the same entries as the field's 
constant pool)
+     * @param field Field object.
+     * @param cp constant pool (must contain the same entries as the field's 
constant pool).
      */
     public FieldGen(final Field field, final ConstantPoolGen cp) {
         this(field.getAccessFlags(), Type.getType(field.getSignature()), 
field.getName(), cp);
@@ -183,7 +180,7 @@ public class FieldGen extends FieldGenOrMethodGen {
      */
     @Override
     public boolean equals(final Object obj) {
-        return bcelComparator.equals(this, obj);
+        return obj instanceof FieldGen && bcelComparator.equals(this, 
(FieldGen) obj);
     }
 
     /**
diff --git a/src/main/java/org/apache/bcel/generic/MethodGen.java 
b/src/main/java/org/apache/bcel/generic/MethodGen.java
index 3cf8f733..1cccda44 100644
--- a/src/main/java/org/apache/bcel/generic/MethodGen.java
+++ b/src/main/java/org/apache/bcel/generic/MethodGen.java
@@ -99,19 +99,16 @@ public class MethodGen extends FieldGenOrMethodGen {
         }
     }
 
-    private static BCELComparator bcelComparator = new BCELComparator() {
+    private static BCELComparator<FieldGenOrMethodGen> bcelComparator = new 
BCELComparator<FieldGenOrMethodGen>() {
 
         @Override
-        public boolean equals(final Object o1, final Object o2) {
-            final FieldGenOrMethodGen THIS = (FieldGenOrMethodGen) o1;
-            final FieldGenOrMethodGen THAT = (FieldGenOrMethodGen) o2;
-            return Objects.equals(THIS.getName(), THAT.getName()) && 
Objects.equals(THIS.getSignature(), THAT.getSignature());
+        public boolean equals(final FieldGenOrMethodGen a, final 
FieldGenOrMethodGen b) {
+            return a == b || a != null && b != null && 
Objects.equals(a.getName(), b.getName()) && Objects.equals(a.getSignature(), 
b.getSignature());
         }
 
         @Override
-        public int hashCode(final Object o) {
-            final FieldGenOrMethodGen THIS = (FieldGenOrMethodGen) o;
-            return THIS.getSignature().hashCode() ^ THIS.getName().hashCode();
+        public int hashCode(final FieldGenOrMethodGen o) {
+            return o != null ? Objects.hash(o.getSignature(), o.getName()) : 0;
         }
     };
 
@@ -124,9 +121,9 @@ public class MethodGen extends FieldGenOrMethodGen {
     }
 
     /**
-     * @return Comparison strategy object
+     * @return Comparison strategy object.
      */
-    public static BCELComparator getComparator() {
+    public static BCELComparator<FieldGenOrMethodGen> getComparator() {
         return bcelComparator;
     }
 
@@ -203,9 +200,9 @@ public class MethodGen extends FieldGenOrMethodGen {
     }
 
     /**
-     * @param comparator Comparison strategy object
+     * @param comparator Comparison strategy object.
      */
-    public static void setComparator(final BCELComparator comparator) {
+    public static void setComparator(final BCELComparator<FieldGenOrMethodGen> 
comparator) {
         bcelComparator = comparator;
     }
 
@@ -633,7 +630,7 @@ public class MethodGen extends FieldGenOrMethodGen {
      */
     @Override
     public boolean equals(final Object obj) {
-        return bcelComparator.equals(this, obj);
+        return obj instanceof FieldGenOrMethodGen && 
bcelComparator.equals(this, (FieldGenOrMethodGen) obj);
     }
 
     // J5TODO: Should paramAnnotations be an array of arrays? Rather than an 
array of lists, this
diff --git a/src/main/java/org/apache/bcel/util/BCELComparator.java 
b/src/main/java/org/apache/bcel/util/BCELComparator.java
index 4e0d8a4a..98e5d50f 100644
--- a/src/main/java/org/apache/bcel/util/BCELComparator.java
+++ b/src/main/java/org/apache/bcel/util/BCELComparator.java
@@ -17,26 +17,27 @@
 package org.apache.bcel.util;
 
 /**
- * Used for BCEL comparison strategy
+ * Used for BCEL comparison strategy.
  *
+ * @param <T> What type we are comparing.
  * @since 5.2
  */
-public interface BCELComparator {
+public interface BCELComparator<T> {
 
     /**
-     * Compare two objects and return what THIS.equals(THAT) should return
+     * Compares two objects and return what a.equals(b) should return.
      *
-     * @param THIS
-     * @param THAT
-     * @return true if and only if THIS equals THAT
+     * @param a an object.
+     * @param b an object to be compared with {@code a} for equality.
+     * @return {@code true} if the arguments are equal to each other and 
{@code false} otherwise.
      */
-    boolean equals(Object THIS, Object THAT);
+    boolean equals(T a, T b);
 
     /**
-     * Return hash code for THIS.hashCode()
+     * Gets the hash code for o.hashCode()
      *
-     * @param THIS
-     * @return hash code for THIS.hashCode()
+     * @param o
+     * @return hash code for o.hashCode()
      */
-    int hashCode(Object THIS);
+    int hashCode(T o);
 }
diff --git a/src/main/java/org/apache/bcel/util/BCELComparator.java 
b/src/test/java/org/apache/bcel/classfile/ConstantTest.java
similarity index 56%
copy from src/main/java/org/apache/bcel/util/BCELComparator.java
copy to src/test/java/org/apache/bcel/classfile/ConstantTest.java
index 4e0d8a4a..3769b58b 100644
--- a/src/main/java/org/apache/bcel/util/BCELComparator.java
+++ b/src/test/java/org/apache/bcel/classfile/ConstantTest.java
@@ -14,29 +14,25 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.bcel.util;
+
+package org.apache.bcel.classfile;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.Test;
 
 /**
- * Used for BCEL comparison strategy
- *
- * @since 5.2
+ * Tests {@link Constant}.
  */
-public interface BCELComparator {
-
-    /**
-     * Compare two objects and return what THIS.equals(THAT) should return
-     *
-     * @param THIS
-     * @param THAT
-     * @return true if and only if THIS equals THAT
-     */
-    boolean equals(Object THIS, Object THAT);
+public class ConstantTest {
 
-    /**
-     * Return hash code for THIS.hashCode()
-     *
-     * @param THIS
-     * @return hash code for THIS.hashCode()
-     */
-    int hashCode(Object THIS);
+    @Test
+    public void testBCELComparator() throws Exception {
+        final Constant obj = new ConstantClass(1);
+        assertTrue(Constant.getComparator().equals(null, null));
+        assertTrue(Constant.getComparator().equals(obj, obj));
+        assertFalse(Constant.getComparator().equals(obj, null));
+        assertFalse(Constant.getComparator().equals(null, obj));
+    }
 }
diff --git a/src/main/java/org/apache/bcel/util/BCELComparator.java 
b/src/test/java/org/apache/bcel/classfile/FieldTest.java
similarity index 57%
copy from src/main/java/org/apache/bcel/util/BCELComparator.java
copy to src/test/java/org/apache/bcel/classfile/FieldTest.java
index 4e0d8a4a..3b41293f 100644
--- a/src/main/java/org/apache/bcel/util/BCELComparator.java
+++ b/src/test/java/org/apache/bcel/classfile/FieldTest.java
@@ -14,29 +14,25 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.bcel.util;
+
+package org.apache.bcel.classfile;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.Test;
 
 /**
- * Used for BCEL comparison strategy
- *
- * @since 5.2
+ * Tests {@link Field}.
  */
-public interface BCELComparator {
-
-    /**
-     * Compare two objects and return what THIS.equals(THAT) should return
-     *
-     * @param THIS
-     * @param THAT
-     * @return true if and only if THIS equals THAT
-     */
-    boolean equals(Object THIS, Object THAT);
+public class FieldTest {
 
-    /**
-     * Return hash code for THIS.hashCode()
-     *
-     * @param THIS
-     * @return hash code for THIS.hashCode()
-     */
-    int hashCode(Object THIS);
+    @Test
+    public void testBCELComparator() throws Exception {
+        final Field obj = new Field(1, 1, 1, null, null);
+        assertTrue(Field.getComparator().equals(null, null));
+        assertTrue(Field.getComparator().equals(obj, obj));
+        assertFalse(Field.getComparator().equals(obj, null));
+        assertFalse(Field.getComparator().equals(null, obj));
+    }
 }
diff --git a/src/main/java/org/apache/bcel/util/BCELComparator.java 
b/src/test/java/org/apache/bcel/generic/ClassGenTest.java
similarity index 56%
copy from src/main/java/org/apache/bcel/util/BCELComparator.java
copy to src/test/java/org/apache/bcel/generic/ClassGenTest.java
index 4e0d8a4a..742805b2 100644
--- a/src/main/java/org/apache/bcel/util/BCELComparator.java
+++ b/src/test/java/org/apache/bcel/generic/ClassGenTest.java
@@ -14,29 +14,25 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.bcel.util;
+
+package org.apache.bcel.generic;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.Test;
 
 /**
- * Used for BCEL comparison strategy
- *
- * @since 5.2
+ * Tests {@link ClassGen}.
  */
-public interface BCELComparator {
-
-    /**
-     * Compare two objects and return what THIS.equals(THAT) should return
-     *
-     * @param THIS
-     * @param THAT
-     * @return true if and only if THIS equals THAT
-     */
-    boolean equals(Object THIS, Object THAT);
+public class ClassGenTest {
 
-    /**
-     * Return hash code for THIS.hashCode()
-     *
-     * @param THIS
-     * @return hash code for THIS.hashCode()
-     */
-    int hashCode(Object THIS);
+    @Test
+    public void testBCELComparator() throws Exception {
+        final ClassGen obj = new ClassGen("", "", "", 0, null);
+        assertTrue(ClassGen.getComparator().equals(null, null));
+        assertTrue(ClassGen.getComparator().equals(obj, obj));
+        assertFalse(ClassGen.getComparator().equals(obj, null));
+        assertFalse(ClassGen.getComparator().equals(null, obj));
+    }
 }
diff --git a/src/test/java/org/apache/bcel/generic/FieldGenTest.java 
b/src/test/java/org/apache/bcel/generic/FieldGenTest.java
new file mode 100644
index 00000000..cbf366bb
--- /dev/null
+++ b/src/test/java/org/apache/bcel/generic/FieldGenTest.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.bcel.generic;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.apache.bcel.classfile.ConstantLong;
+import org.apache.bcel.classfile.ConstantPool;
+import org.apache.bcel.classfile.Field;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Tests {@link FieldGen}.
+ */
+public class FieldGenTest {
+
+    @Test
+    @Disabled
+    public void testBCELComparator() throws Exception {
+        final ConstantLong[] constantPool = { new ConstantLong(0), new 
ConstantLong(0) };
+        final FieldGen obj = new FieldGen(new Field(0, 0, 0, null, new 
ConstantPool(constantPool)), new ConstantPoolGen(constantPool));
+        assertTrue(FieldGen.getComparator().equals(null, null));
+        assertTrue(FieldGen.getComparator().equals(obj, obj));
+        assertFalse(FieldGen.getComparator().equals(obj, null));
+        assertFalse(FieldGen.getComparator().equals(null, obj));
+    }
+}

Reply via email to