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 9b6f88a4959186b6169035b1d06726700a3244b8 Author: Gary Gregory <gardgreg...@gmail.com> AuthorDate: Mon Aug 15 15:17:25 2022 -0400 Use streams, less boilerplate, Javadoc --- .../org/apache/bcel/classfile/AnnotationEntry.java | 28 +-- .../java/org/apache/bcel/classfile/Attribute.java | 12 +- .../java/org/apache/bcel/classfile/Deprecated.java | 2 +- .../apache/bcel/classfile/DescendingVisitor.java | 248 +++++++-------------- .../org/apache/bcel/classfile/ExceptionTable.java | 13 +- .../org/apache/bcel/classfile/FieldOrMethod.java | 29 ++- .../java/org/apache/bcel/generic/ClassGen.java | 28 +-- .../java/org/apache/bcel/generic/FieldGen.java | 15 +- 8 files changed, 126 insertions(+), 249 deletions(-) diff --git a/src/main/java/org/apache/bcel/classfile/AnnotationEntry.java b/src/main/java/org/apache/bcel/classfile/AnnotationEntry.java index 543f1ecc..36b5c963 100644 --- a/src/main/java/org/apache/bcel/classfile/AnnotationEntry.java +++ b/src/main/java/org/apache/bcel/classfile/AnnotationEntry.java @@ -21,13 +21,13 @@ import java.io.DataInput; import java.io.DataOutputStream; import java.io.IOException; import java.util.ArrayList; -import java.util.Collections; import java.util.List; +import java.util.stream.Stream; import org.apache.bcel.Const; /** - * represents one annotation in the annotation table + * Represents one annotation in the annotation table * * @since 6.0 */ @@ -37,36 +37,32 @@ public class AnnotationEntry implements Node { public static AnnotationEntry[] createAnnotationEntries(final Attribute[] attrs) { // Find attributes that contain annotation data - final List<AnnotationEntry> accumulatedAnnotations = new ArrayList<>(attrs.length); - for (final Attribute attribute : attrs) { - if (attribute instanceof Annotations) { - final Annotations runtimeAnnotations = (Annotations) attribute; - Collections.addAll(accumulatedAnnotations, runtimeAnnotations.getAnnotationEntries()); - } - } - return accumulatedAnnotations.toArray(AnnotationEntry.EMPTY_ARRAY); + return Stream.of(attrs).filter(Annotations.class::isInstance) + .flatMap(e -> Stream.of(((Annotations) e).getAnnotationEntries())).toArray(AnnotationEntry[]::new); } - /* + + /** * Factory method to create an AnnotionEntry from a DataInput * * @param input * @param constantPool * @param isRuntimeVisible * @return the entry - * @throws IOException + * @throws IOException if an I/O error occurs. */ - public static AnnotationEntry read(final DataInput input, final ConstantPool constant_pool, final boolean isRuntimeVisible) throws IOException { + public static AnnotationEntry read(final DataInput input, final ConstantPool constantPool, final boolean isRuntimeVisible) throws IOException { - final AnnotationEntry annotationEntry = new AnnotationEntry(input.readUnsignedShort(), constant_pool, isRuntimeVisible); + final AnnotationEntry annotationEntry = new AnnotationEntry(input.readUnsignedShort(), constantPool, isRuntimeVisible); final int num_element_value_pairs = input.readUnsignedShort(); annotationEntry.elementValuePairs = new ArrayList<>(); for (int i = 0; i < num_element_value_pairs; i++) { annotationEntry.elementValuePairs.add( - new ElementValuePair(input.readUnsignedShort(), ElementValue.readElementValue(input, constant_pool), - constant_pool)); + new ElementValuePair(input.readUnsignedShort(), ElementValue.readElementValue(input, constantPool), + constantPool)); } return annotationEntry; } + private final int typeIndex; private final ConstantPool constantPool; diff --git a/src/main/java/org/apache/bcel/classfile/Attribute.java b/src/main/java/org/apache/bcel/classfile/Attribute.java index b2037224..f48d3562 100644 --- a/src/main/java/org/apache/bcel/classfile/Attribute.java +++ b/src/main/java/org/apache/bcel/classfile/Attribute.java @@ -104,12 +104,11 @@ public abstract class Attribute implements Cloneable, Node { * @param file Input stream * @param constant_pool Array of constants * @return Attribute - * @throws IOException - * @throws ClassFormatException + * @throws IOException if an I/O error occurs. * @since 6.0 */ public static Attribute readAttribute(final DataInput file, final ConstantPool constant_pool) - throws IOException, ClassFormatException + throws IOException { byte tag = Const.ATTR_UNKNOWN; // Unknown attribute // Get class name from constant pool via `name_index' indirection @@ -216,11 +215,10 @@ public abstract class Attribute implements Cloneable, Node { * @param file Input stream * @param constant_pool Array of constants * @return Attribute - * @throws IOException - * @throws ClassFormatException + * @throws IOException if an I/O error occurs. */ public static Attribute readAttribute(final DataInputStream file, final ConstantPool constant_pool) - throws IOException, ClassFormatException + throws IOException { return readAttribute((DataInput) file, constant_pool); } @@ -309,7 +307,7 @@ public abstract class Attribute implements Cloneable, Node { * * @param file * Output file stream - * @throws IOException + * @throws IOException if an I/O error occurs. */ public void dump(final DataOutputStream file) throws IOException { diff --git a/src/main/java/org/apache/bcel/classfile/Deprecated.java b/src/main/java/org/apache/bcel/classfile/Deprecated.java index d136525f..24e8da9b 100644 --- a/src/main/java/org/apache/bcel/classfile/Deprecated.java +++ b/src/main/java/org/apache/bcel/classfile/Deprecated.java @@ -108,7 +108,7 @@ public final class Deprecated extends Attribute { * Dump source file attribute to file stream in binary format. * * @param file Output file stream - * @throws IOException + * @throws IOException if an I/O error occurs. */ @Override public void dump( final DataOutputStream file ) throws IOException { diff --git a/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java b/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java index 3fed1457..c87a1759 100644 --- a/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java +++ b/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java @@ -17,16 +17,16 @@ */ package org.apache.bcel.classfile; +import java.util.Objects; import java.util.Stack; +import java.util.stream.Stream; /** - * Traverses a JavaClass with another Visitor object 'piggy-backed' that is - * applied to all components of a JavaClass object. I.e. this class supplies the - * traversal strategy, other classes can make use of it. + * Traverses a JavaClass with another Visitor object 'piggy-backed' that is applied to all components of a JavaClass + * object. I.e. this class supplies the traversal strategy, other classes can make use of it. * */ -public class DescendingVisitor implements Visitor -{ +public class DescendingVisitor implements Visitor { private final JavaClass clazz; private final Visitor visitor; @@ -34,43 +34,39 @@ public class DescendingVisitor implements Visitor private final Stack<Object> stack = new Stack<>(); /** - * @param clazz - * Class to traverse - * @param visitor - * visitor object to apply to all components + * @param clazz Class to traverse + * @param visitor visitor object to apply to all components */ - public DescendingVisitor(final JavaClass clazz, final Visitor visitor) - { + public DescendingVisitor(final JavaClass clazz, final Visitor visitor) { this.clazz = clazz; this.visitor = visitor; } + private <E extends Node> void accept(final E[] node) { + Stream.of(node).forEach(e -> e.accept(this)); + } + /** * @return current object */ - public Object current() - { + public Object current() { return stack.peek(); } /** * @return container of current entitity, i.e., predecessor during traversal */ - public Object predecessor() - { + public Object predecessor() { return predecessor(0); } /** - * @param level - * nesting level, i.e., 0 returns the direct predecessor + * @param level nesting level, i.e., 0 returns the direct predecessor * @return container of current entitity, i.e., predecessor during traversal */ - public Object predecessor(final int level) - { + public Object predecessor(final int level) { final int size = stack.size(); - if (size < 2 || level < 0) - { + if (size < 2 || level < 0) { return null; } return stack.elementAt(size - (level + 2)); // size - 1 == current @@ -79,8 +75,7 @@ public class DescendingVisitor implements Visitor /** * Start traversal. */ - public void visit() - { + public void visit() { clazz.accept(this); } @@ -88,13 +83,10 @@ public class DescendingVisitor implements Visitor * @since 6.0 */ @Override - public void visitAnnotation(final Annotations annotation) - { + public void visitAnnotation(final Annotations annotation) { stack.push(annotation); annotation.accept(visitor); - for (final AnnotationEntry entrie : annotation.getAnnotationEntries()) { - entrie.accept(this); - } + accept(annotation.getAnnotationEntries()); stack.pop(); } @@ -102,8 +94,7 @@ public class DescendingVisitor implements Visitor * @since 6.0 */ @Override - public void visitAnnotationDefault(final AnnotationDefault obj) - { + public void visitAnnotationDefault(final AnnotationDefault obj) { stack.push(obj); obj.accept(visitor); stack.pop(); @@ -113,8 +104,7 @@ public class DescendingVisitor implements Visitor * @since 6.0 */ @Override - public void visitAnnotationEntry(final AnnotationEntry annotationEntry) - { + public void visitAnnotationEntry(final AnnotationEntry annotationEntry) { stack.push(annotationEntry); annotationEntry.accept(visitor); stack.pop(); @@ -124,51 +114,42 @@ public class DescendingVisitor implements Visitor * @since 6.0 */ @Override - public void visitBootstrapMethods(final BootstrapMethods bm) - { + public void visitBootstrapMethods(final BootstrapMethods bm) { stack.push(bm); bm.accept(visitor); // BootstrapMethod[] bms = bm.getBootstrapMethods(); // for (int i = 0; i < bms.length; i++) // { - // bms[i].accept(this); + // bms[i].accept(this); // } stack.pop(); } @Override - public void visitCode(final Code code) - { + public void visitCode(final Code code) { stack.push(code); code.accept(visitor); - for (final CodeException element : code.getExceptionTable()) { - element.accept(this); - } - for (final Attribute attribute : code.getAttributes()) { - attribute.accept(this); - } + accept(code.getExceptionTable()); + accept(code.getAttributes()); stack.pop(); } @Override - public void visitCodeException(final CodeException ce) - { + public void visitCodeException(final CodeException ce) { stack.push(ce); ce.accept(visitor); stack.pop(); } @Override - public void visitConstantClass(final ConstantClass constant) - { + public void visitConstantClass(final ConstantClass constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } @Override - public void visitConstantDouble(final ConstantDouble constant) - { + public void visitConstantDouble(final ConstantDouble constant) { stack.push(constant); constant.accept(visitor); stack.pop(); @@ -183,33 +164,28 @@ public class DescendingVisitor implements Visitor } @Override - public void visitConstantFieldref(final ConstantFieldref constant) - { + public void visitConstantFieldref(final ConstantFieldref constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } @Override - public void visitConstantFloat(final ConstantFloat constant) - { + public void visitConstantFloat(final ConstantFloat constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } @Override - public void visitConstantInteger(final ConstantInteger constant) - { + public void visitConstantInteger(final ConstantInteger constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } @Override - public void visitConstantInterfaceMethodref( - final ConstantInterfaceMethodref constant) - { + public void visitConstantInterfaceMethodref(final ConstantInterfaceMethodref constant) { stack.push(constant); constant.accept(visitor); stack.pop(); @@ -219,17 +195,14 @@ public class DescendingVisitor implements Visitor * @since 6.0 */ @Override - public void visitConstantInvokeDynamic( - final ConstantInvokeDynamic constant) - { + public void visitConstantInvokeDynamic(final ConstantInvokeDynamic constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } @Override - public void visitConstantLong(final ConstantLong constant) - { + public void visitConstantLong(final ConstantLong constant) { stack.push(constant); constant.accept(visitor); stack.pop(); @@ -244,8 +217,7 @@ public class DescendingVisitor implements Visitor } @Override - public void visitConstantMethodref(final ConstantMethodref constant) - { + public void visitConstantMethodref(final ConstantMethodref constant) { stack.push(constant); constant.accept(visitor); stack.pop(); @@ -268,8 +240,7 @@ public class DescendingVisitor implements Visitor } @Override - public void visitConstantNameAndType(final ConstantNameAndType constant) - { + public void visitConstantNameAndType(final ConstantNameAndType constant) { stack.push(constant); constant.accept(visitor); stack.pop(); @@ -284,48 +255,36 @@ public class DescendingVisitor implements Visitor } @Override - public void visitConstantPool(final ConstantPool cp) - { + public void visitConstantPool(final ConstantPool cp) { stack.push(cp); cp.accept(visitor); - final Constant[] constants = cp.getConstantPool(); - for (int i = 1; i < constants.length; i++) - { - if (constants[i] != null) - { - constants[i].accept(this); - } - } + Stream.of(cp.getConstantPool()).filter(Objects::nonNull).forEach(e -> e.accept(this)); stack.pop(); } @Override - public void visitConstantString(final ConstantString constant) - { + public void visitConstantString(final ConstantString constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } @Override - public void visitConstantUtf8(final ConstantUtf8 constant) - { + public void visitConstantUtf8(final ConstantUtf8 constant) { stack.push(constant); constant.accept(visitor); stack.pop(); } @Override - public void visitConstantValue(final ConstantValue cv) - { + public void visitConstantValue(final ConstantValue cv) { stack.push(cv); cv.accept(visitor); stack.pop(); } @Override - public void visitDeprecated(final Deprecated attribute) - { + public void visitDeprecated(final Deprecated attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); @@ -335,104 +294,80 @@ public class DescendingVisitor implements Visitor * @since 6.0 */ @Override - public void visitEnclosingMethod(final EnclosingMethod obj) - { + public void visitEnclosingMethod(final EnclosingMethod obj) { stack.push(obj); obj.accept(visitor); stack.pop(); } @Override - public void visitExceptionTable(final ExceptionTable table) - { + public void visitExceptionTable(final ExceptionTable table) { stack.push(table); table.accept(visitor); stack.pop(); } @Override - public void visitField(final Field field) - { + public void visitField(final Field field) { stack.push(field); field.accept(visitor); - for (final Attribute attribute : field.getAttributes()) { - attribute.accept(this); - } + accept(field.getAttributes()); stack.pop(); } @Override - public void visitInnerClass(final InnerClass inner) - { + public void visitInnerClass(final InnerClass inner) { stack.push(inner); inner.accept(visitor); stack.pop(); } @Override - public void visitInnerClasses(final InnerClasses ic) - { + public void visitInnerClasses(final InnerClasses ic) { stack.push(ic); ic.accept(visitor); - for (final InnerClass ic2 : ic.getInnerClasses()) { - ic2.accept(this); - } + accept(ic.getInnerClasses()); stack.pop(); } @Override - public void visitJavaClass(final JavaClass _clazz) - { + public void visitJavaClass(final JavaClass _clazz) { stack.push(_clazz); _clazz.accept(visitor); - for (final Field field : _clazz.getFields()) { - field.accept(this); - } - for (final Method method : _clazz.getMethods()) { - method.accept(this); - } - for (final Attribute attribute : _clazz.getAttributes()) { - attribute.accept(this); - } + accept(_clazz.getFields()); + accept(_clazz.getMethods()); + accept(_clazz.getAttributes()); _clazz.getConstantPool().accept(this); stack.pop(); } @Override - public void visitLineNumber(final LineNumber number) - { + public void visitLineNumber(final LineNumber number) { stack.push(number); number.accept(visitor); stack.pop(); } @Override - public void visitLineNumberTable(final LineNumberTable table) - { + public void visitLineNumberTable(final LineNumberTable table) { stack.push(table); table.accept(visitor); - for (final LineNumber number : table.getLineNumberTable()) { - number.accept(this); - } + accept(table.getLineNumberTable()); stack.pop(); } @Override - public void visitLocalVariable(final LocalVariable var) - { + public void visitLocalVariable(final LocalVariable var) { stack.push(var); var.accept(visitor); stack.pop(); } @Override - public void visitLocalVariableTable(final LocalVariableTable table) - { + public void visitLocalVariableTable(final LocalVariableTable table) { stack.push(table); table.accept(visitor); - for (final LocalVariable var : table.getLocalVariableTable()) { - var.accept(this); - } + accept(table.getLocalVariableTable()); stack.pop(); } @@ -440,21 +375,17 @@ public class DescendingVisitor implements Visitor * @since 6.0 */ @Override - public void visitLocalVariableTypeTable(final LocalVariableTypeTable obj) - { + public void visitLocalVariableTypeTable(final LocalVariableTypeTable obj) { stack.push(obj); obj.accept(visitor); stack.pop(); } @Override - public void visitMethod(final Method method) - { + public void visitMethod(final Method method) { stack.push(method); method.accept(visitor); - for (final Attribute attribute : method.getAttributes()) { - attribute.accept(this); - } + accept(method.getAttributes()); stack.pop(); } @@ -462,8 +393,7 @@ public class DescendingVisitor implements Visitor * @since 6.4.0 */ @Override - public void visitMethodParameter(final MethodParameter obj) - { + public void visitMethodParameter(final MethodParameter obj) { stack.push(obj); obj.accept(visitor); stack.pop(); @@ -473,13 +403,10 @@ public class DescendingVisitor implements Visitor * @since 6.0 */ @Override - public void visitMethodParameters(final MethodParameters obj) - { + public void visitMethodParameters(final MethodParameters obj) { stack.push(obj); obj.accept(visitor); - for (final MethodParameter element : obj.getParameters()) { - element.accept(this); - } + Stream.of(obj.getParameters()).forEach(e -> e.accept(this)); stack.pop(); } @@ -488,18 +415,10 @@ public class DescendingVisitor implements Visitor public void visitModule(final Module obj) { stack.push(obj); obj.accept(visitor); - for (final ModuleRequires element : obj.getRequiresTable()) { - element.accept(this); - } - for (final ModuleExports element : obj.getExportsTable()) { - element.accept(this); - } - for (final ModuleOpens element : obj.getOpensTable()) { - element.accept(this); - } - for (final ModuleProvides element : obj.getProvidesTable()) { - element.accept(this); - } + accept(obj.getRequiresTable()); + accept(obj.getExportsTable()); + accept(obj.getOpensTable()); + accept(obj.getProvidesTable()); stack.pop(); } @@ -571,8 +490,7 @@ public class DescendingVisitor implements Visitor * @since 6.0 */ @Override - public void visitParameterAnnotation(final ParameterAnnotations obj) - { + public void visitParameterAnnotation(final ParameterAnnotations obj) { stack.push(obj); obj.accept(visitor); stack.pop(); @@ -587,51 +505,43 @@ public class DescendingVisitor implements Visitor } @Override - public void visitSignature(final Signature attribute) - { + public void visitSignature(final Signature attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); } @Override - public void visitSourceFile(final SourceFile attribute) - { + public void visitSourceFile(final SourceFile attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); } @Override - public void visitStackMap(final StackMap table) - { + public void visitStackMap(final StackMap table) { stack.push(table); table.accept(visitor); - for (final StackMapEntry var : table.getStackMap()) { - var.accept(this); - } + accept(table.getStackMap()); stack.pop(); } @Override - public void visitStackMapEntry(final StackMapEntry var) - { + public void visitStackMapEntry(final StackMapEntry var) { stack.push(var); var.accept(visitor); stack.pop(); } @Override - public void visitSynthetic(final Synthetic attribute) - { + public void visitSynthetic(final Synthetic attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); } @Override - public void visitUnknown(final Unknown attribute) - { + public void visitUnknown(final Unknown attribute) { stack.push(attribute); attribute.accept(visitor); stack.pop(); diff --git a/src/main/java/org/apache/bcel/classfile/ExceptionTable.java b/src/main/java/org/apache/bcel/classfile/ExceptionTable.java index cd33ee35..ae8cf78d 100644 --- a/src/main/java/org/apache/bcel/classfile/ExceptionTable.java +++ b/src/main/java/org/apache/bcel/classfile/ExceptionTable.java @@ -38,7 +38,6 @@ public final class ExceptionTable extends Attribute { private int[] exceptionIndexTable; // constant pool - /** * Initialize from another object. Note that both objects use the same * references (shallow copy). Use copy() for a physical copy. @@ -47,7 +46,6 @@ public final class ExceptionTable extends Attribute { this(c.getNameIndex(), c.getLength(), c.getExceptionIndexTable(), c.getConstantPool()); } - /** * Construct object from input stream. * @param nameIndex Index in constant pool @@ -65,7 +63,6 @@ public final class ExceptionTable extends Attribute { } } - /** * @param name_index Index in constant pool * @param length Content length in bytes @@ -78,7 +75,6 @@ public final class ExceptionTable extends Attribute { this.exceptionIndexTable = exceptionIndexTable != null ? exceptionIndexTable : ArrayUtils.EMPTY_INT_ARRAY; } - /** * Called by objects that are traversing the nodes of the tree implicitely * defined by the contents of a Java class. I.e., the hierarchy of methods, @@ -91,7 +87,6 @@ public final class ExceptionTable extends Attribute { v.visitExceptionTable(this); } - /** * @return deep copy of this attribute */ @@ -107,12 +102,11 @@ public final class ExceptionTable extends Attribute { return c; } - /** * Dump exceptions attribute to file stream in binary format. * * @param file Output file stream - * @throws IOException + * @throws IOException if an I/O error occurs. */ @Override public void dump( final DataOutputStream file ) throws IOException { @@ -123,7 +117,6 @@ public final class ExceptionTable extends Attribute { } } - /** * @return Array of indices into constant pool of thrown exceptions. */ @@ -131,7 +124,6 @@ public final class ExceptionTable extends Attribute { return exceptionIndexTable; } - /** * @return class names of thrown exceptions */ @@ -144,7 +136,6 @@ public final class ExceptionTable extends Attribute { return names; } - /** * @return Length of exception table. */ @@ -152,7 +143,6 @@ public final class ExceptionTable extends Attribute { return exceptionIndexTable == null ? 0 : exceptionIndexTable.length; } - /** * @param exceptionIndexTable the list of exception indexes * Also redefines number_of_exceptions according to table length. @@ -161,7 +151,6 @@ public final class ExceptionTable extends Attribute { this.exceptionIndexTable = exceptionIndexTable != null ? exceptionIndexTable : ArrayUtils.EMPTY_INT_ARRAY; } - /** * @return String representation, i.e., a list of thrown exceptions. */ diff --git a/src/main/java/org/apache/bcel/classfile/FieldOrMethod.java b/src/main/java/org/apache/bcel/classfile/FieldOrMethod.java index f461b967..f46ff0c8 100644 --- a/src/main/java/org/apache/bcel/classfile/FieldOrMethod.java +++ b/src/main/java/org/apache/bcel/classfile/FieldOrMethod.java @@ -73,16 +73,15 @@ public abstract class FieldOrMethod extends AccessFlags implements Cloneable, No /** * Construct object from file stream. * @param file Input stream - * @throws IOException - * @throws ClassFormatException + * @throws IOException if an I/O error occurs. */ - protected FieldOrMethod(final DataInput file, final ConstantPool constant_pool) throws IOException, ClassFormatException { + protected FieldOrMethod(final DataInput file, final ConstantPool constantPool) throws IOException { this(file.readUnsignedShort(), file.readUnsignedShort(), file.readUnsignedShort(), null, - constant_pool); + constantPool); final int attributes_count = file.readUnsignedShort(); attributes = new Attribute[attributes_count]; for (int i = 0; i < attributes_count; i++) { - attributes[i] = Attribute.readAttribute(file, constant_pool); + attributes[i] = Attribute.readAttribute(file, constantPool); } this.attributes_count = attributes_count; // init deprecated field } @@ -91,14 +90,12 @@ public abstract class FieldOrMethod extends AccessFlags implements Cloneable, No /** * Construct object from file stream. * @param file Input stream - * @throws IOException - * @throws ClassFormatException + * @throws IOException if an I/O error occurs. * @deprecated (6.0) Use {@link #FieldOrMethod(java.io.DataInput, ConstantPool)} instead. */ @java.lang.Deprecated - protected FieldOrMethod(final DataInputStream file, final ConstantPool constant_pool) throws IOException, - ClassFormatException { - this((DataInput) file, constant_pool); + protected FieldOrMethod(final DataInputStream file, final ConstantPool constantPool) throws IOException { + this((DataInput) file, constantPool); } /** @@ -131,17 +128,17 @@ public abstract class FieldOrMethod extends AccessFlags implements Cloneable, No /** * @return deep copy of this field */ - protected FieldOrMethod copy_( final ConstantPool _constant_pool ) { + protected FieldOrMethod copy_(final ConstantPool constantPool) { FieldOrMethod c = null; try { - c = (FieldOrMethod)clone(); - } catch(final CloneNotSupportedException e) { + c = (FieldOrMethod) clone(); + } catch (final CloneNotSupportedException e) { // ignored, but will cause NPE ... } - c.constant_pool = constant_pool; - c.attributes = new Attribute[attributes.length]; + c.constant_pool = constant_pool; + c.attributes = new Attribute[attributes.length]; c.attributes_count = attributes_count; // init deprecated field for (int i = 0; i < attributes.length; i++) { @@ -156,7 +153,7 @@ public abstract class FieldOrMethod extends AccessFlags implements Cloneable, No * Dump object to file stream on binary format. * * @param file Output file stream - * @throws IOException + * @throws IOException if an I/O error occurs. */ public final void dump(final DataOutputStream file) throws IOException { file.writeShort(super.getAccessFlags()); diff --git a/src/main/java/org/apache/bcel/generic/ClassGen.java b/src/main/java/org/apache/bcel/generic/ClassGen.java index 61b0cd09..1a41f596 100644 --- a/src/main/java/org/apache/bcel/generic/ClassGen.java +++ b/src/main/java/org/apache/bcel/generic/ClassGen.java @@ -565,34 +565,24 @@ public class ClassGen extends AccessFlags implements Cloneable { /** * Look for attributes representing annotations and unpack them. */ - private AnnotationEntryGen[] unpackAnnotations(final Attribute[] attrs) - { + private AnnotationEntryGen[] unpackAnnotations(final Attribute[] attrs) { final List<AnnotationEntryGen> annotationGenObjs = new ArrayList<>(); for (final Attribute attr : attrs) { - if (attr instanceof RuntimeVisibleAnnotations) - { + if (attr instanceof RuntimeVisibleAnnotations) { final RuntimeVisibleAnnotations rva = (RuntimeVisibleAnnotations) attr; - final AnnotationEntry[] annos = rva.getAnnotationEntries(); - for (final AnnotationEntry a : annos) { - annotationGenObjs.add(new AnnotationEntryGen(a, - getConstantPool(), false)); + for (final AnnotationEntry a : rva.getAnnotationEntries()) { + annotationGenObjs.add(new AnnotationEntryGen(a, getConstantPool(), false)); } - } - else - if (attr instanceof RuntimeInvisibleAnnotations) - { - final RuntimeInvisibleAnnotations ria = (RuntimeInvisibleAnnotations) attr; - final AnnotationEntry[] annos = ria.getAnnotationEntries(); - for (final AnnotationEntry a : annos) { - annotationGenObjs.add(new AnnotationEntryGen(a, - getConstantPool(), false)); - } + } else if (attr instanceof RuntimeInvisibleAnnotations) { + final RuntimeInvisibleAnnotations ria = (RuntimeInvisibleAnnotations) attr; + for (final AnnotationEntry a : ria.getAnnotationEntries()) { + annotationGenObjs.add(new AnnotationEntryGen(a, getConstantPool(), false)); } + } } return annotationGenObjs.toArray(AnnotationEntryGen.EMPTY_ARRAY); } - /** Call notify() method on all observers. This method is not called * automatically whenever the state has changed, but has to be * called by the user after they have finished editing the object. diff --git a/src/main/java/org/apache/bcel/generic/FieldGen.java b/src/main/java/org/apache/bcel/generic/FieldGen.java index 64c0afa6..25acbf9a 100644 --- a/src/main/java/org/apache/bcel/generic/FieldGen.java +++ b/src/main/java/org/apache/bcel/generic/FieldGen.java @@ -20,6 +20,7 @@ package org.apache.bcel.generic; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.stream.Stream; import org.apache.bcel.Const; import org.apache.bcel.classfile.AnnotationEntry; @@ -94,10 +95,9 @@ public class FieldGen extends FieldGenOrMethodGen { if (attr instanceof ConstantValue) { setValue(((ConstantValue) attr).getConstantValueIndex()); } else if (attr instanceof Annotations) { - final Annotations runtimeAnnotations = (Annotations)attr; - final AnnotationEntry[] annotationEntries = runtimeAnnotations.getAnnotationEntries(); - for (final AnnotationEntry element : annotationEntries) { - addAnnotationEntry(new AnnotationEntryGen(element,cp,false)); + final Annotations runtimeAnnotations = (Annotations) attr; + for (final AnnotationEntry element : runtimeAnnotations.getAnnotationEntries()) { + addAnnotationEntry(new AnnotationEntryGen(element, cp, false)); } } else { addAttribute(attr); @@ -125,11 +125,8 @@ public class FieldGen extends FieldGenOrMethodGen { private void addAnnotationsAsAttribute(final ConstantPoolGen cp) { - final Attribute[] attrs = AnnotationEntryGen.getAnnotationAttributes(cp, super.getAnnotationEntries()); - for (final Attribute attr : attrs) { - addAttribute(attr); - } - } + Stream.of(AnnotationEntryGen.getAnnotationAttributes(cp, super.getAnnotationEntries())).forEach(this::addAttribute); + } private int addConstant() {