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)); + } +}