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 4d58176 Define and reuse constants within Commons BCEL and from Commons Lang. 4d58176 is described below commit 4d581761689b67e2305204a6a02b97532be90aab Author: Gary Gregory <gardgreg...@gmail.com> AuthorDate: Sat Jan 16 13:28:24 2021 -0500 Define and reuse constants within Commons BCEL and from Commons Lang. Bump minor version since we added a public element. --- pom.xml | 7 +++---- src/main/java/org/apache/bcel/ExceptionConst.java | 9 +++++++++ .../java/org/apache/bcel/ExceptionConstants.java | 8 ++++++++ .../java/org/apache/bcel/classfile/Attribute.java | 7 +++++++ src/main/java/org/apache/bcel/classfile/Code.java | 13 +++++++------ .../org/apache/bcel/classfile/CodeException.java | 5 +++++ .../org/apache/bcel/classfile/ExceptionTable.java | 5 +++-- src/main/java/org/apache/bcel/classfile/Field.java | 5 +++++ .../java/org/apache/bcel/classfile/InnerClasses.java | 9 +++++++-- .../java/org/apache/bcel/classfile/JavaClass.java | 9 +++++---- src/main/java/org/apache/bcel/classfile/Method.java | 5 +++++ .../org/apache/bcel/classfile/MethodParameters.java | 7 ++++++- .../org/apache/bcel/classfile/ModulePackages.java | 5 +++-- .../java/org/apache/bcel/classfile/NestMembers.java | 5 +++-- .../org/apache/bcel/classfile/StackMapEntry.java | 17 +++++++++++------ .../org/apache/bcel/generic/AnnotationEntryGen.java | 2 +- .../org/apache/bcel/generic/InstructionHandle.java | 14 +++++++++++++- .../org/apache/bcel/generic/InstructionList.java | 3 ++- src/main/java/org/apache/bcel/generic/MethodGen.java | 2 +- src/main/java/org/apache/bcel/generic/Type.java | 6 +++++- .../org/apache/bcel/verifier/VerifierAppFrame.java | 9 +++++---- .../bcel/verifier/structurals/ControlFlowGraph.java | 5 ++--- .../bcel/verifier/structurals/ExceptionHandlers.java | 20 +++++++++++--------- .../bcel/verifier/structurals/Subroutines.java | 7 +++---- 24 files changed, 130 insertions(+), 54 deletions(-) diff --git a/pom.xml b/pom.xml index e535918..fe3e420 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,7 @@ <groupId>org.apache.bcel</groupId> <artifactId>bcel</artifactId> <packaging>jar</packaging> - <version>6.5.1-SNAPSHOT</version> + <version>6.6.0-SNAPSHOT</version> <name>Apache Commons BCEL</name> <description>Apache Commons Bytecode Engineering Library</description> @@ -47,10 +47,10 @@ <maven.compiler.target>1.8</maven.compiler.target> <commons.componentid>bcel</commons.componentid> <commons.module.name>org.apache.bcel</commons.module.name> - <commons.release.version>6.5.0</commons.release.version> + <commons.release.version>6.6.0</commons.release.version> <commons.release.isDistModule>true</commons.release.isDistModule> <commons.rc.version>RC1</commons.rc.version> - <commons.bc.version>6.4.1</commons.bc.version> + <commons.bc.version>6.5.0</commons.bc.version> <commons.release.desc>(Java 8)</commons.release.desc> <commons.scmPubUrl>https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-bcel</commons.scmPubUrl> <commons.distSvnStagingUrl>scm:svn:https://dist.apache.org/repos/dist/dev/commons/${commons.componentid}</commons.distSvnStagingUrl> @@ -477,7 +477,6 @@ <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.11</version> - <scope>test</scope> </dependency> <dependency> <!-- BCEL-336 refers to this specific version. --> diff --git a/src/main/java/org/apache/bcel/ExceptionConst.java b/src/main/java/org/apache/bcel/ExceptionConst.java index ed2c426..6cffc56 100644 --- a/src/main/java/org/apache/bcel/ExceptionConst.java +++ b/src/main/java/org/apache/bcel/ExceptionConst.java @@ -78,8 +78,17 @@ public final class ExceptionConst { private static final Class<?>[] EXCS_FIELD_AND_METHOD_RESOLUTION = { NO_SUCH_FIELD_ERROR, ILLEGAL_ACCESS_ERROR, NO_SUCH_METHOD_ERROR }; // Chapter 5.2 + + /** + * Empty array. + */ private static final Class<?>[] EXCS_INTERFACE_METHOD_RESOLUTION = new Class[0]; // Chapter 5.3 (as below) + + /** + * Empty array. + */ private static final Class<?>[] EXCS_STRING_RESOLUTION = new Class[0]; + // Chapter 5.4 (no errors but the ones that _always_ could happen! How stupid.) private static final Class<?>[] EXCS_ARRAY_EXCEPTION = { NULL_POINTER_EXCEPTION, ARRAY_INDEX_OUT_OF_BOUNDS_EXCEPTION diff --git a/src/main/java/org/apache/bcel/ExceptionConstants.java b/src/main/java/org/apache/bcel/ExceptionConstants.java index ea0e1ce..ed9c846 100644 --- a/src/main/java/org/apache/bcel/ExceptionConstants.java +++ b/src/main/java/org/apache/bcel/ExceptionConstants.java @@ -74,8 +74,16 @@ public interface ExceptionConstants { Class<?>[] EXCS_FIELD_AND_METHOD_RESOLUTION = { NO_SUCH_FIELD_ERROR, ILLEGAL_ACCESS_ERROR, NO_SUCH_METHOD_ERROR }; // Chapter 5.2 + + /** + * Empty array. + */ @Deprecated Class<?>[] EXCS_INTERFACE_METHOD_RESOLUTION = new Class[0]; // Chapter 5.3 (as below) + + /** + * Empty array. + */ @Deprecated Class<?>[] EXCS_STRING_RESOLUTION = new Class[0]; // Chapter 5.4 (no errors but the ones that _always_ could happen! How stupid.) diff --git a/src/main/java/org/apache/bcel/classfile/Attribute.java b/src/main/java/org/apache/bcel/classfile/Attribute.java index 72e5c4e..185360e 100644 --- a/src/main/java/org/apache/bcel/classfile/Attribute.java +++ b/src/main/java/org/apache/bcel/classfile/Attribute.java @@ -53,6 +53,13 @@ public abstract class Attribute implements Cloneable, Node { private static final Map<String, Object> readers = new HashMap<>(); /** + * Empty array. + * + * @since 6.6.0 + */ + public static final Attribute[] EMPTY_ATTRIBUTE_ARRAY = new Attribute[0]; + + /** * Add an Attribute reader capable of parsing (user-defined) attributes * named "name". You should not add readers for the standard attributes such * as "LineNumberTable", because those are handled internally. diff --git a/src/main/java/org/apache/bcel/classfile/Code.java b/src/main/java/org/apache/bcel/classfile/Code.java index 5e81d21..cedc535 100644 --- a/src/main/java/org/apache/bcel/classfile/Code.java +++ b/src/main/java/org/apache/bcel/classfile/Code.java @@ -22,6 +22,7 @@ import java.io.DataOutputStream; import java.io.IOException; import org.apache.bcel.Const; +import org.apache.commons.lang3.ArrayUtils; /** * This class represents a chunk of Java byte code contained in a @@ -112,9 +113,9 @@ public final class Code extends Attribute { super(Const.ATTR_CODE, name_index, length, constant_pool); this.maxStack = maxStack; this.maxLocals = maxLocals; - this.code = code != null ? code : new byte[0]; - this.exceptionTable = exceptionTable != null ? exceptionTable : new CodeException[0]; - this.attributes = attributes != null ? attributes : new Attribute[0]; + this.code = code != null ? code : ArrayUtils.EMPTY_BYTE_ARRAY; + this.exceptionTable = exceptionTable != null ? exceptionTable : CodeException.EMPTY_CODE_EXCEPTION_ARRAY; + this.attributes = attributes != null ? attributes : EMPTY_ATTRIBUTE_ARRAY; super.setLength(calculateLength()); // Adjust length } @@ -256,7 +257,7 @@ public final class Code extends Attribute { * @param attributes the attributes to set for this Code */ public void setAttributes( final Attribute[] attributes ) { - this.attributes = attributes != null ? attributes : new Attribute[0]; + this.attributes = attributes != null ? attributes : EMPTY_ATTRIBUTE_ARRAY; super.setLength(calculateLength()); // Adjust length } @@ -265,7 +266,7 @@ public final class Code extends Attribute { * @param code byte code */ public void setCode( final byte[] code ) { - this.code = code != null ? code : new byte[0]; + this.code = code != null ? code : ArrayUtils.EMPTY_BYTE_ARRAY; super.setLength(calculateLength()); // Adjust length } @@ -274,7 +275,7 @@ public final class Code extends Attribute { * @param exceptionTable exception table */ public void setExceptionTable( final CodeException[] exceptionTable ) { - this.exceptionTable = exceptionTable != null ? exceptionTable : new CodeException[0]; + this.exceptionTable = exceptionTable != null ? exceptionTable : CodeException.EMPTY_CODE_EXCEPTION_ARRAY; super.setLength(calculateLength()); // Adjust length } diff --git a/src/main/java/org/apache/bcel/classfile/CodeException.java b/src/main/java/org/apache/bcel/classfile/CodeException.java index d223f08..9c7cdf1 100644 --- a/src/main/java/org/apache/bcel/classfile/CodeException.java +++ b/src/main/java/org/apache/bcel/classfile/CodeException.java @@ -43,6 +43,11 @@ public final class CodeException implements Cloneable, Node, Constants { * exception class which is to be caught. */ + /** + * Empty array. + */ + static final CodeException[] EMPTY_CODE_EXCEPTION_ARRAY = new CodeException[0]; + /** * Initialize from another object. diff --git a/src/main/java/org/apache/bcel/classfile/ExceptionTable.java b/src/main/java/org/apache/bcel/classfile/ExceptionTable.java index f267566..6333f2b 100644 --- a/src/main/java/org/apache/bcel/classfile/ExceptionTable.java +++ b/src/main/java/org/apache/bcel/classfile/ExceptionTable.java @@ -22,6 +22,7 @@ import java.io.DataOutputStream; import java.io.IOException; import org.apache.bcel.Const; +import org.apache.commons.lang3.ArrayUtils; /** * This class represents the table of exceptions that are thrown by a @@ -56,7 +57,7 @@ public final class ExceptionTable extends Attribute { public ExceptionTable(final int name_index, final int length, final int[] exceptionIndexTable, final ConstantPool constant_pool) { super(Const.ATTR_EXCEPTIONS, name_index, length, constant_pool); - this.exceptionIndexTable = exceptionIndexTable != null ? exceptionIndexTable : new int[0]; + this.exceptionIndexTable = exceptionIndexTable != null ? exceptionIndexTable : ArrayUtils.EMPTY_INT_ARRAY; } @@ -141,7 +142,7 @@ public final class ExceptionTable extends Attribute { * Also redefines number_of_exceptions according to table length. */ public void setExceptionIndexTable( final int[] exceptionIndexTable ) { - this.exceptionIndexTable = exceptionIndexTable != null ? exceptionIndexTable : new int[0]; + this.exceptionIndexTable = exceptionIndexTable != null ? exceptionIndexTable : ArrayUtils.EMPTY_INT_ARRAY; } diff --git a/src/main/java/org/apache/bcel/classfile/Field.java b/src/main/java/org/apache/bcel/classfile/Field.java index 7dea3dd..ad0328d 100644 --- a/src/main/java/org/apache/bcel/classfile/Field.java +++ b/src/main/java/org/apache/bcel/classfile/Field.java @@ -50,6 +50,11 @@ public final class Field extends FieldOrMethod { } }; + /** + * Empty array. + */ + static final Field[] EMPTY_FIELD_ARRAY = new Field[0]; + /** * Initialize from another object. Note that both objects use the same diff --git a/src/main/java/org/apache/bcel/classfile/InnerClasses.java b/src/main/java/org/apache/bcel/classfile/InnerClasses.java index cb3aadc..d0518be 100644 --- a/src/main/java/org/apache/bcel/classfile/InnerClasses.java +++ b/src/main/java/org/apache/bcel/classfile/InnerClasses.java @@ -33,6 +33,11 @@ import org.apache.bcel.Const; */ public final class InnerClasses extends Attribute { + /** + * Empty array. + */ + private static final InnerClass[] EMPTY_INNER_CLASSE_ARRAY = new InnerClass[0]; + private InnerClass[] innerClasses; @@ -54,7 +59,7 @@ public final class InnerClasses extends Attribute { public InnerClasses(final int name_index, final int length, final InnerClass[] innerClasses, final ConstantPool constant_pool) { super(Const.ATTR_INNER_CLASSES, name_index, length, constant_pool); - this.innerClasses = innerClasses != null ? innerClasses : new InnerClass[0]; + this.innerClasses = innerClasses != null ? innerClasses : EMPTY_INNER_CLASSE_ARRAY; } @@ -119,7 +124,7 @@ public final class InnerClasses extends Attribute { * @param innerClasses the array of inner classes */ public void setInnerClasses( final InnerClass[] innerClasses ) { - this.innerClasses = innerClasses != null ? innerClasses : new InnerClass[0]; + this.innerClasses = innerClasses != null ? innerClasses : EMPTY_INNER_CLASSE_ARRAY; } diff --git a/src/main/java/org/apache/bcel/classfile/JavaClass.java b/src/main/java/org/apache/bcel/classfile/JavaClass.java index 9a07272..86dab53 100644 --- a/src/main/java/org/apache/bcel/classfile/JavaClass.java +++ b/src/main/java/org/apache/bcel/classfile/JavaClass.java @@ -35,6 +35,7 @@ import org.apache.bcel.generic.Type; import org.apache.bcel.util.BCELComparator; import org.apache.bcel.util.ClassQueue; import org.apache.bcel.util.SyntheticRepository; +import org.apache.commons.lang3.ArrayUtils; /** * Represents a Java class, i.e., the data structures, constant pool, @@ -121,16 +122,16 @@ public class JavaClass extends AccessFlags implements Cloneable, Node, Comparabl Field[] fields, Method[] methods, Attribute[] attributes, final byte source) { super(access_flags); if (interfaces == null) { - interfaces = new int[0]; + interfaces = ArrayUtils.EMPTY_INT_ARRAY; } if (attributes == null) { - attributes = new Attribute[0]; + attributes = Attribute.EMPTY_ATTRIBUTE_ARRAY; } if (fields == null) { - fields = new Field[0]; + fields = Field.EMPTY_FIELD_ARRAY; } if (methods == null) { - methods = new Method[0]; + methods = Method.EMPTY_METHOD_ARRAY; } this.classNameIndex = classNameIndex; this.superclassNameIndex = superclassNameIndex; diff --git a/src/main/java/org/apache/bcel/classfile/Method.java b/src/main/java/org/apache/bcel/classfile/Method.java index 8f9b8d6..a414de7 100644 --- a/src/main/java/org/apache/bcel/classfile/Method.java +++ b/src/main/java/org/apache/bcel/classfile/Method.java @@ -55,6 +55,11 @@ public final class Method extends FieldOrMethod { private ParameterAnnotationEntry[] parameterAnnotationEntries; /** + * Empty array. + */ + static final Method[] EMPTY_METHOD_ARRAY = new Method[0]; + + /** * Empty constructor, all attributes have to be defined via `setXXX' * methods. Use at your own risk. */ diff --git a/src/main/java/org/apache/bcel/classfile/MethodParameters.java b/src/main/java/org/apache/bcel/classfile/MethodParameters.java index b811436..91e2825 100644 --- a/src/main/java/org/apache/bcel/classfile/MethodParameters.java +++ b/src/main/java/org/apache/bcel/classfile/MethodParameters.java @@ -32,7 +32,12 @@ import org.apache.bcel.Const; */ public class MethodParameters extends Attribute { - private MethodParameter[] parameters = new MethodParameter[0]; + /** + * Empty array. + */ + private static final MethodParameter[] EMPTY_METHOD_PARAMETER_ARRAY = new MethodParameter[0]; + + private MethodParameter[] parameters = EMPTY_METHOD_PARAMETER_ARRAY; MethodParameters(final int name_index, final int length, final DataInput input, final ConstantPool constant_pool) throws IOException { super(Const.ATTR_METHOD_PARAMETERS, name_index, length, constant_pool); diff --git a/src/main/java/org/apache/bcel/classfile/ModulePackages.java b/src/main/java/org/apache/bcel/classfile/ModulePackages.java index e6aa307..70fa193 100644 --- a/src/main/java/org/apache/bcel/classfile/ModulePackages.java +++ b/src/main/java/org/apache/bcel/classfile/ModulePackages.java @@ -21,6 +21,7 @@ import java.io.DataInput; import java.io.DataOutputStream; import java.io.IOException; +import org.apache.commons.lang3.ArrayUtils; import org.apache.bcel.Const; /** @@ -52,7 +53,7 @@ public final class ModulePackages extends Attribute { public ModulePackages(final int nameIndex, final int length, final int[] packageIndexTable, final ConstantPool constantPool) { super(Const.ATTR_MODULE_PACKAGES, nameIndex, length, constantPool); - this.packageIndexTable = packageIndexTable != null ? packageIndexTable : new int[0]; + this.packageIndexTable = packageIndexTable != null ? packageIndexTable : ArrayUtils.EMPTY_INT_ARRAY; } @@ -137,7 +138,7 @@ public final class ModulePackages extends Attribute { * Also redefines number_of_packages according to table length. */ public void setPackageIndexTable( final int[] packageIndexTable ) { - this.packageIndexTable = packageIndexTable != null ? packageIndexTable : new int[0]; + this.packageIndexTable = packageIndexTable != null ? packageIndexTable : ArrayUtils.EMPTY_INT_ARRAY; } diff --git a/src/main/java/org/apache/bcel/classfile/NestMembers.java b/src/main/java/org/apache/bcel/classfile/NestMembers.java index 4dbb185..a8a5ae2 100644 --- a/src/main/java/org/apache/bcel/classfile/NestMembers.java +++ b/src/main/java/org/apache/bcel/classfile/NestMembers.java @@ -22,6 +22,7 @@ import java.io.DataOutputStream; import java.io.IOException; import org.apache.bcel.Const; +import org.apache.commons.lang3.ArrayUtils; /** * This class is derived from <em>Attribute</em> and records the classes and interfaces that @@ -53,7 +54,7 @@ public final class NestMembers extends Attribute { public NestMembers(final int name_index, final int length, final int[] classes, final ConstantPool constant_pool) { super(Const.ATTR_NEST_MEMBERS, name_index, length, constant_pool); - this.classes = classes != null ? classes : new int[0]; + this.classes = classes != null ? classes : ArrayUtils.EMPTY_INT_ARRAY; } @@ -138,7 +139,7 @@ public final class NestMembers extends Attribute { * Also redefines number_of_classes according to table length. */ public void setClasses( final int[] classes ) { - this.classes = classes != null ? classes : new int[0]; + this.classes = classes != null ? classes : ArrayUtils.EMPTY_INT_ARRAY; } diff --git a/src/main/java/org/apache/bcel/classfile/StackMapEntry.java b/src/main/java/org/apache/bcel/classfile/StackMapEntry.java index ef23b71..9a11104 100644 --- a/src/main/java/org/apache/bcel/classfile/StackMapEntry.java +++ b/src/main/java/org/apache/bcel/classfile/StackMapEntry.java @@ -33,6 +33,11 @@ import org.apache.bcel.Const; public final class StackMapEntry implements Node, Cloneable { + /** + * Empty array. + */ + private static final StackMapType[] EMPTY_STACK_MAP_TYPE_ARRAY = new StackMapType[0]; + private int frameType; private int byteCodeOffset; private StackMapType[] typesOfLocals; @@ -106,8 +111,8 @@ public final class StackMapEntry implements Node, Cloneable final StackMapType[] typesOfLocals, final int numberOfStackItems, final StackMapType[] typesOfStackItems, final ConstantPool constantPool) { this.byteCodeOffset = byteCodeOffset; - this.typesOfLocals = typesOfLocals != null ? typesOfLocals : new StackMapType[0]; - this.typesOfStackItems = typesOfStackItems != null ? typesOfStackItems : new StackMapType[0]; + this.typesOfLocals = typesOfLocals != null ? typesOfLocals : EMPTY_STACK_MAP_TYPE_ARRAY; + this.typesOfStackItems = typesOfStackItems != null ? typesOfStackItems : EMPTY_STACK_MAP_TYPE_ARRAY; this.constantPool = constantPool; } @@ -125,8 +130,8 @@ public final class StackMapEntry implements Node, Cloneable final StackMapType[] typesOfStackItems, final ConstantPool constantPool) { this.frameType = tag; this.byteCodeOffset = byteCodeOffset; - this.typesOfLocals = typesOfLocals != null ? typesOfLocals : new StackMapType[0]; - this.typesOfStackItems = typesOfStackItems != null ? typesOfStackItems : new StackMapType[0]; + this.typesOfLocals = typesOfLocals != null ? typesOfLocals : EMPTY_STACK_MAP_TYPE_ARRAY; + this.typesOfStackItems = typesOfStackItems != null ? typesOfStackItems : EMPTY_STACK_MAP_TYPE_ARRAY; this.constantPool = constantPool; } @@ -349,7 +354,7 @@ public final class StackMapEntry implements Node, Cloneable public void setTypesOfLocals( final StackMapType[] types ) { - typesOfLocals = types != null ? types : new StackMapType[0]; + typesOfLocals = types != null ? types : EMPTY_STACK_MAP_TYPE_ARRAY; } @@ -373,7 +378,7 @@ public final class StackMapEntry implements Node, Cloneable public void setTypesOfStackItems( final StackMapType[] types ) { - typesOfStackItems = types != null ? types : new StackMapType[0]; + typesOfStackItems = types != null ? types : EMPTY_STACK_MAP_TYPE_ARRAY; } diff --git a/src/main/java/org/apache/bcel/generic/AnnotationEntryGen.java b/src/main/java/org/apache/bcel/generic/AnnotationEntryGen.java index 016655d..5832af9 100644 --- a/src/main/java/org/apache/bcel/generic/AnnotationEntryGen.java +++ b/src/main/java/org/apache/bcel/generic/AnnotationEntryGen.java @@ -198,7 +198,7 @@ public class AnnotationEntryGen { */ static Attribute[] getAnnotationAttributes(final ConstantPoolGen cp, final AnnotationEntryGen[] annotationEntryGens) { if (annotationEntryGens.length == 0) { - return new Attribute[0]; + return Attribute.EMPTY_ATTRIBUTE_ARRAY; } try { diff --git a/src/main/java/org/apache/bcel/generic/InstructionHandle.java b/src/main/java/org/apache/bcel/generic/InstructionHandle.java index 2e68219..0441339 100644 --- a/src/main/java/org/apache/bcel/generic/InstructionHandle.java +++ b/src/main/java/org/apache/bcel/generic/InstructionHandle.java @@ -43,6 +43,18 @@ import org.apache.bcel.classfile.Utility; */ public class InstructionHandle { + /** + * Empty array. + * + * @since 6.6.0 + */ + public static final InstructionHandle[] EMPTY_INSTRUCTION_HANDLE_ARRAY = new InstructionHandle[0]; + + /** + * Empty array. + */ + static final InstructionTargeter[] EMPTY_INSTRUCTION_TARGETER_ARRAY = new InstructionTargeter[0]; + private InstructionHandle next; private InstructionHandle prev; private Instruction instruction; @@ -216,7 +228,7 @@ public class InstructionHandle { */ public InstructionTargeter[] getTargeters() { if (!hasTargeters()) { - return new InstructionTargeter[0]; + return EMPTY_INSTRUCTION_TARGETER_ARRAY; } final InstructionTargeter[] t = new InstructionTargeter[targeters.size()]; targeters.toArray(t); diff --git a/src/main/java/org/apache/bcel/generic/InstructionList.java b/src/main/java/org/apache/bcel/generic/InstructionList.java index 9e591bf..53ce717 100644 --- a/src/main/java/org/apache/bcel/generic/InstructionList.java +++ b/src/main/java/org/apache/bcel/generic/InstructionList.java @@ -30,6 +30,7 @@ import java.util.NoSuchElementException; import org.apache.bcel.Const; import org.apache.bcel.classfile.Constant; import org.apache.bcel.util.ByteSequence; +import org.apache.commons.lang3.ArrayUtils; /** * This class is a container for a list of <a href="Instruction.html">Instruction</a> objects. Instructions can be appended, inserted, moved, deleted, etc.. @@ -945,7 +946,7 @@ public class InstructionList implements Iterable<InstructionHandle> { out.flush(); } catch (final IOException e) { System.err.println(e); - return new byte[0]; + return ArrayUtils.EMPTY_BYTE_ARRAY; } return b.toByteArray(); } diff --git a/src/main/java/org/apache/bcel/generic/MethodGen.java b/src/main/java/org/apache/bcel/generic/MethodGen.java index f744241..b127e46 100644 --- a/src/main/java/org/apache/bcel/generic/MethodGen.java +++ b/src/main/java/org/apache/bcel/generic/MethodGen.java @@ -640,7 +640,7 @@ public class MethodGen extends FieldGenOrMethodGen { private Attribute[] addRuntimeParameterAnnotationsAsAttribute(final ConstantPoolGen cp) { if (!hasParameterAnnotations) { - return new Attribute[0]; + return Attribute.EMPTY_ATTRIBUTE_ARRAY; } final Attribute[] attrs = AnnotationEntryGen.getParameterAnnotationAttributes(cp, paramAnnotations); for (final Attribute attr : attrs) { diff --git a/src/main/java/org/apache/bcel/generic/Type.java b/src/main/java/org/apache/bcel/generic/Type.java index 956eda9..4c3a6ba 100644 --- a/src/main/java/org/apache/bcel/generic/Type.java +++ b/src/main/java/org/apache/bcel/generic/Type.java @@ -58,7 +58,11 @@ public abstract class Type { public static final ObjectType STRING = new ObjectType("java.lang.String"); public static final ObjectType STRINGBUFFER = new ObjectType("java.lang.StringBuffer"); public static final ObjectType THROWABLE = new ObjectType("java.lang.Throwable"); - public static final Type[] NO_ARGS = new Type[0]; // EMPTY, so immutable + + /** + * Empty array. + */ + public static final Type[] NO_ARGS = new Type[0]; public static final ReferenceType NULL = new ReferenceType() { }; public static final Type UNKNOWN = new Type(Const.T_UNKNOWN, "<unknown object>") { diff --git a/src/main/java/org/apache/bcel/verifier/VerifierAppFrame.java b/src/main/java/org/apache/bcel/verifier/VerifierAppFrame.java index a5599aa..d17ee56 100644 --- a/src/main/java/org/apache/bcel/verifier/VerifierAppFrame.java +++ b/src/main/java/org/apache/bcel/verifier/VerifierAppFrame.java @@ -41,6 +41,7 @@ import javax.swing.event.ListSelectionEvent; import org.apache.bcel.Repository; import org.apache.bcel.classfile.JavaClass; +import org.apache.commons.lang3.ArrayUtils; /** * This class implements a machine-generated frame for use with @@ -227,10 +228,10 @@ public class VerifierAppFrame extends JFrame { pass2TextPane.setText(""); pass2TextPane.setBackground(Color.yellow); pass3aTextPane.setText(""); - pass3aJList.setListData(new String[0]); + pass3aJList.setListData(ArrayUtils.EMPTY_STRING_ARRAY); pass3aTextPane.setBackground(Color.yellow); pass3bTextPane.setText(""); - pass3bJList.setListData(new String[0]); + pass3bJList.setListData(ArrayUtils.EMPTY_STRING_ARRAY); pass3bTextPane.setBackground(Color.yellow); } else { // Must be VERIFIED_OK, Pass 1 does not know VERIFIED_NOTYET pass1TextPane.setBackground(Color.green); @@ -241,10 +242,10 @@ public class VerifierAppFrame extends JFrame { pass2TextPane.setBackground(Color.red); pass3aTextPane.setText(""); pass3aTextPane.setBackground(Color.yellow); - pass3aJList.setListData(new String[0]); + pass3aJList.setListData(ArrayUtils.EMPTY_STRING_ARRAY); pass3bTextPane.setText(""); pass3bTextPane.setBackground(Color.yellow); - pass3bJList.setListData(new String[0]); + pass3bJList.setListData(ArrayUtils.EMPTY_STRING_ARRAY); } else { // must be Verified_OK, because Pass1 was OK (cannot be Verified_NOTYET). pass2TextPane.setText(vr.getMessage()); pass2TextPane.setBackground(Color.green); diff --git a/src/main/java/org/apache/bcel/verifier/structurals/ControlFlowGraph.java b/src/main/java/org/apache/bcel/verifier/structurals/ControlFlowGraph.java index 62c0fce..568f0e6 100644 --- a/src/main/java/org/apache/bcel/verifier/structurals/ControlFlowGraph.java +++ b/src/main/java/org/apache/bcel/verifier/structurals/ControlFlowGraph.java @@ -326,7 +326,6 @@ public class ControlFlowGraph{ */ // TODO: implement caching! private InstructionHandle[] _getSuccessors() { - final InstructionHandle[] empty = new InstructionHandle[0]; final InstructionHandle[] single = new InstructionHandle[1]; final Instruction inst = getInstruction().getInstruction(); @@ -352,13 +351,13 @@ public class ControlFlowGraph{ // Terminates method normally. if (inst instanceof ReturnInstruction) { - return empty; + return InstructionHandle.EMPTY_INSTRUCTION_HANDLE_ARRAY; } // Terminates method abnormally, because JustIce mandates // subroutines not to be protected by exception handlers. if (inst instanceof ATHROW) { - return empty; + return InstructionHandle.EMPTY_INSTRUCTION_HANDLE_ARRAY; } // See method comment. diff --git a/src/main/java/org/apache/bcel/verifier/structurals/ExceptionHandlers.java b/src/main/java/org/apache/bcel/verifier/structurals/ExceptionHandlers.java index 68529f2..66403f2 100644 --- a/src/main/java/org/apache/bcel/verifier/structurals/ExceptionHandlers.java +++ b/src/main/java/org/apache/bcel/verifier/structurals/ExceptionHandlers.java @@ -17,7 +17,6 @@ */ package org.apache.bcel.verifier.structurals; - import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -29,12 +28,16 @@ import org.apache.bcel.generic.MethodGen; /** * This class allows easy access to ExceptionHandler objects. - * */ -public class ExceptionHandlers{ +public class ExceptionHandlers { + + /** + * Empty array. + */ + private static final ExceptionHandler[] EMPTY_EXCEPTION_HANDLER_ARRAY = new ExceptionHandler[0]; + /** - * The ExceptionHandler instances. - * Key: InstructionHandle objects, Values: HashSet<ExceptionHandler> instances. + * The ExceptionHandler instances. Key: InstructionHandle objects, Values: HashSet<ExceptionHandler> instances. */ private final Map<InstructionHandle, Set<ExceptionHandler>> exceptionHandlers; @@ -46,7 +49,7 @@ public class ExceptionHandlers{ final CodeExceptionGen[] cegs = mg.getExceptionHandlers(); for (final CodeExceptionGen ceg : cegs) { final ExceptionHandler eh = new ExceptionHandler(ceg.getCatchType(), ceg.getHandlerPC()); - for (InstructionHandle ih=ceg.getStartPC(); ih != ceg.getEndPC().getNext(); ih=ih.getNext()) { + for (InstructionHandle ih = ceg.getStartPC(); ih != ceg.getEndPC().getNext(); ih = ih.getNext()) { Set<ExceptionHandler> hs; hs = exceptionHandlers.get(ih); if (hs == null) { @@ -59,13 +62,12 @@ public class ExceptionHandlers{ } /** - * Returns all the ExceptionHandler instances representing exception - * handlers that protect the instruction ih. + * Returns all the ExceptionHandler instances representing exception handlers that protect the instruction ih. */ public ExceptionHandler[] getExceptionHandlers(final InstructionHandle ih) { final Set<ExceptionHandler> hsSet = exceptionHandlers.get(ih); if (hsSet == null) { - return new ExceptionHandler[0]; + return EMPTY_EXCEPTION_HANDLER_ARRAY; } return hsSet.toArray(new ExceptionHandler[hsSet.size()]); } diff --git a/src/main/java/org/apache/bcel/verifier/structurals/Subroutines.java b/src/main/java/org/apache/bcel/verifier/structurals/Subroutines.java index 7247926..b5b6ba2 100644 --- a/src/main/java/org/apache/bcel/verifier/structurals/Subroutines.java +++ b/src/main/java/org/apache/bcel/verifier/structurals/Subroutines.java @@ -620,24 +620,23 @@ public class Subroutines{ * (opposed to its target) as defined here. */ private static InstructionHandle[] getSuccessors(final InstructionHandle instruction) { - final InstructionHandle[] empty = new InstructionHandle[0]; final InstructionHandle[] single = new InstructionHandle[1]; final Instruction inst = instruction.getInstruction(); if (inst instanceof RET) { - return empty; + return InstructionHandle.EMPTY_INSTRUCTION_HANDLE_ARRAY; } // Terminates method normally. if (inst instanceof ReturnInstruction) { - return empty; + return InstructionHandle.EMPTY_INSTRUCTION_HANDLE_ARRAY; } // Terminates method abnormally, because JustIce mandates // subroutines not to be protected by exception handlers. if (inst instanceof ATHROW) { - return empty; + return InstructionHandle.EMPTY_INSTRUCTION_HANDLE_ARRAY; } // See method comment.