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 8083fb59b6cf7bf41c055aee332501bee59bf99f Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Sun Apr 21 09:25:22 2024 -0400 Sort members --- .../apache/bcel/classfile/DescendingVisitor.java | 30 ++++---- .../java/org/apache/bcel/classfile/JavaClass.java | 48 ++++++------- .../java/org/apache/bcel/classfile/Record.java | 20 +++--- .../apache/bcel/classfile/RecordComponentInfo.java | 40 +++++------ .../java/org/apache/bcel/classfile/Visitor.java | 36 +++++----- .../verifier/statics/StringRepresentation.java | 20 +++--- .../org/apache/bcel/CounterVisitorTestCase.java | 10 +-- .../org/apache/bcel/classfile/RecordTestCase.java | 84 +++++++++++----------- .../bcel/generic/InstructionFactoryTestCase.java | 12 ++-- .../org/apache/bcel/visitors/CountingVisitor.java | 20 +++--- 10 files changed, 160 insertions(+), 160 deletions(-) diff --git a/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java b/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java index 880f1009..69fdab6c 100644 --- a/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java +++ b/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java @@ -504,6 +504,21 @@ public class DescendingVisitor implements Visitor { stack.pop(); } + @Override + public void visitRecord(Record record) { + stack.push(record); + record.accept(visitor); + accept(record.getComponents()); + stack.pop(); + } + + @Override + public void visitRecordComponent(RecordComponentInfo recordComponentInfo) { + stack.push(recordComponentInfo); + recordComponentInfo.accept(visitor); + stack.pop(); + } + @Override public void visitSignature(final Signature attribute) { stack.push(attribute); @@ -561,19 +576,4 @@ public class DescendingVisitor implements Visitor { stack.pop(); } - @Override - public void visitRecord(Record record) { - stack.push(record); - record.accept(visitor); - accept(record.getComponents()); - stack.pop(); - } - - @Override - public void visitRecordComponent(RecordComponentInfo recordComponentInfo) { - stack.push(recordComponentInfo); - recordComponentInfo.accept(visitor); - stack.pop(); - } - } diff --git a/src/main/java/org/apache/bcel/classfile/JavaClass.java b/src/main/java/org/apache/bcel/classfile/JavaClass.java index fe967983..d52336d0 100644 --- a/src/main/java/org/apache/bcel/classfile/JavaClass.java +++ b/src/main/java/org/apache/bcel/classfile/JavaClass.java @@ -259,6 +259,19 @@ public class JavaClass extends AccessFlags implements Cloneable, Node, Comparabl return getClassName().compareTo(obj.getClassName()); } + private void computeIsRecord() { + if (computedRecord) { + return; + } + for (final Attribute attribute : this.attributes) { + if (attribute instanceof Record) { + isRecord = true; + break; + } + } + this.computedRecord = true; + } + private void computeNestedTypeStatus() { if (computedNestedTypeStatus) { return; @@ -743,6 +756,17 @@ public class JavaClass extends AccessFlags implements Cloneable, Node, Comparabl return this.isNested; } + /** + * Tests whether this class was declared as a record + * + * @return true if a record attribute is present, false otherwise. + * @since 6.9.0 + */ + public boolean isRecord() { + computeIsRecord(); + return this.isRecord; + } + public final boolean isSuper() { return (super.getAccessFlags() & Const.ACC_SUPER) != 0; } @@ -906,28 +930,4 @@ public class JavaClass extends AccessFlags implements Cloneable, Node, Comparabl } return buf.toString(); } - - /** - * Tests whether this class was declared as a record - * - * @return true if a record attribute is present, false otherwise. - * @since 6.9.0 - */ - public boolean isRecord() { - computeIsRecord(); - return this.isRecord; - } - - private void computeIsRecord() { - if (computedRecord) { - return; - } - for (final Attribute attribute : this.attributes) { - if (attribute instanceof Record) { - isRecord = true; - break; - } - } - this.computedRecord = true; - } } diff --git a/src/main/java/org/apache/bcel/classfile/Record.java b/src/main/java/org/apache/bcel/classfile/Record.java index e459a0fe..21f17634 100644 --- a/src/main/java/org/apache/bcel/classfile/Record.java +++ b/src/main/java/org/apache/bcel/classfile/Record.java @@ -37,6 +37,16 @@ public final class Record extends Attribute { private static final RecordComponentInfo[] EMPTY_RCI_ARRAY = new RecordComponentInfo[] {}; + private static RecordComponentInfo[] readComponents(final DataInput input, final ConstantPool constantPool) + throws IOException { + final int classCount = input.readUnsignedShort(); + final RecordComponentInfo[] components = new RecordComponentInfo[classCount]; + for (int i = 0; i < classCount; i++) { + components[i] = new RecordComponentInfo(input, constantPool); + } + return components; + } + private RecordComponentInfo[] components; /** @@ -53,16 +63,6 @@ public final class Record extends Attribute { this(nameIndex, length, readComponents(input, constantPool), constantPool); } - private static RecordComponentInfo[] readComponents(final DataInput input, final ConstantPool constantPool) - throws IOException { - final int classCount = input.readUnsignedShort(); - final RecordComponentInfo[] components = new RecordComponentInfo[classCount]; - for (int i = 0; i < classCount; i++) { - components[i] = new RecordComponentInfo(input, constantPool); - } - return components; - } - /** * Constructs a new instance using components. * diff --git a/src/main/java/org/apache/bcel/classfile/RecordComponentInfo.java b/src/main/java/org/apache/bcel/classfile/RecordComponentInfo.java index bf489d0f..cf3ac1f9 100644 --- a/src/main/java/org/apache/bcel/classfile/RecordComponentInfo.java +++ b/src/main/java/org/apache/bcel/classfile/RecordComponentInfo.java @@ -55,6 +55,11 @@ public class RecordComponentInfo implements Node { this.constantPool = constantPool; } + @Override + public void accept(Visitor v) { + v.visitRecordComponent(this); + } + /** * Dumps contents into a file stream in binary format. * @@ -70,18 +75,22 @@ public class RecordComponentInfo implements Node { } } - @Override - public void accept(Visitor v) { - v.visitRecordComponent(this); + /** + * Gets all attributes. + * + * @return all attributes. + */ + public Attribute[] getAttributes() { + return attributes; } /** - * Gets the name index. + * Gets the constant pool. * - * @return index in constant pool of this record component name. + * @return Constant pool. */ - public int getIndex() { - return index; + public ConstantPool getConstantPool() { + return constantPool; } /** @@ -94,21 +103,12 @@ public class RecordComponentInfo implements Node { } /** - * Gets all attributes. - * - * @return all attributes. - */ - public Attribute[] getAttributes() { - return attributes; - } - - /** - * Gets the constant pool. + * Gets the name index. * - * @return Constant pool. + * @return index in constant pool of this record component name. */ - public ConstantPool getConstantPool() { - return constantPool; + public int getIndex() { + return index; } /** diff --git a/src/main/java/org/apache/bcel/classfile/Visitor.java b/src/main/java/org/apache/bcel/classfile/Visitor.java index 6f739324..89a72c8c 100644 --- a/src/main/java/org/apache/bcel/classfile/Visitor.java +++ b/src/main/java/org/apache/bcel/classfile/Visitor.java @@ -207,6 +207,17 @@ public interface Visitor { // empty } + /** + * @since 6.0 + */ + void visitParameterAnnotation(ParameterAnnotations obj); + + + /** + * @since 6.0 + */ + void visitParameterAnnotationEntry(ParameterAnnotationEntry obj); + /** * Visits a {@link Record} object. * @@ -217,16 +228,15 @@ public interface Visitor { // empty } - /** - * @since 6.0 - */ - void visitParameterAnnotation(ParameterAnnotations obj); - - /** - * @since 6.0 + * Visits a {@link RecordComponentInfo} object. + * + * @param record component to visit + * @since 6.9.0 */ - void visitParameterAnnotationEntry(ParameterAnnotationEntry obj); + default void visitRecordComponent(RecordComponentInfo record) { + // noop + } void visitSignature(Signature obj); @@ -250,14 +260,4 @@ public interface Visitor { void visitUnknown(Unknown obj); - /** - * Visits a {@link RecordComponentInfo} object. - * - * @param record component to visit - * @since 6.9.0 - */ - default void visitRecordComponent(RecordComponentInfo record) { - // noop - } - } diff --git a/src/main/java/org/apache/bcel/verifier/statics/StringRepresentation.java b/src/main/java/org/apache/bcel/verifier/statics/StringRepresentation.java index af12ed5a..c89d1d75 100644 --- a/src/main/java/org/apache/bcel/verifier/statics/StringRepresentation.java +++ b/src/main/java/org/apache/bcel/verifier/statics/StringRepresentation.java @@ -399,6 +399,16 @@ public class StringRepresentation extends org.apache.bcel.classfile.EmptyVisitor tostring = toString(obj); } + @Override + public void visitRecord(Record obj) { + tostring = toString(obj); + } + + @Override + public void visitRecordComponent(RecordComponentInfo obj) { + tostring = toString(obj); + } + @Override public void visitSignature(final Signature obj) { tostring = toString(obj); @@ -432,14 +442,4 @@ public class StringRepresentation extends org.apache.bcel.classfile.EmptyVisitor tostring = toString(obj); } - @Override - public void visitRecord(Record obj) { - tostring = toString(obj); - } - - @Override - public void visitRecordComponent(RecordComponentInfo obj) { - tostring = toString(obj); - } - } diff --git a/src/test/java/org/apache/bcel/CounterVisitorTestCase.java b/src/test/java/org/apache/bcel/CounterVisitorTestCase.java index 224369ba..6ecf3da8 100644 --- a/src/test/java/org/apache/bcel/CounterVisitorTestCase.java +++ b/src/test/java/org/apache/bcel/CounterVisitorTestCase.java @@ -183,6 +183,11 @@ public class CounterVisitorTestCase extends AbstractCounterVisitorTestCase { assertEquals(0, getVisitor().parameterAnnotationCount, "parameterAnnotationCount"); } + @Test + public void testRecordCount() { + assertEquals(0, getVisitor().recordCount, "recordCount"); + } + @Test public void testSignatureCount() { assertEquals(0, getVisitor().signatureAnnotationCount, "signatureAnnotationCount"); @@ -217,9 +222,4 @@ public class CounterVisitorTestCase extends AbstractCounterVisitorTestCase { public void testUnknownCount() { assertEquals(0, getVisitor().unknownCount, "unknownCount"); } - - @Test - public void testRecordCount() { - assertEquals(0, getVisitor().recordCount, "recordCount"); - } } diff --git a/src/test/java/org/apache/bcel/classfile/RecordTestCase.java b/src/test/java/org/apache/bcel/classfile/RecordTestCase.java index 7a2e639d..8056250a 100644 --- a/src/test/java/org/apache/bcel/classfile/RecordTestCase.java +++ b/src/test/java/org/apache/bcel/classfile/RecordTestCase.java @@ -31,6 +31,48 @@ import org.junit.jupiter.api.Test; public class RecordTestCase extends AbstractTestCase { + /** + * Check that we can copy a attribute correctly. + */ + @Test + public void recordsCanBeCopied() throws ClassNotFoundException, IOException { + final JavaClass clazz = new ClassParser("src/test/resources/record/SimpleRecord.class").parse(); + final JavaClass copyClazz = clazz.copy(); + assertEquals(clazz.toString(), copyClazz.toString(), "both records should have the same value"); + } + + /** + * Check that a record can be visited by our visitors + */ + @Test + public void recordsCanBeVisited() throws ClassNotFoundException, IOException { + final JavaClass clazz = new ClassParser("src/test/resources/record/SimpleRecord.class").parse(); + final CountingVisitor countVisitor = new CountingVisitor(); + final DescendingVisitor desendingVisitor = new DescendingVisitor(clazz, countVisitor); + desendingVisitor.visit(); + assertEquals(1,countVisitor.recordCount, "should count one record"); + assertEquals(2,countVisitor.recordComponentCount, "should count two record components"); + } + + + /** + * Check that we can save and load the attribute correctly. + */ + @Test + public void testAttributeSerializtion() throws ClassNotFoundException, IOException { + final JavaClass clazz = new ClassParser("src/test/resources/record/SimpleRecord.class").parse(); + final File tfile = createTestdataFile("SimpleRecord.class"); + final Record recordAttribute = (Record)findAttribute("Record",clazz)[0]; + clazz.dump(tfile); + // Read in the new version and check it is OK + final SyntheticRepository repos2 = createRepos("."); + final JavaClass clazzFromRepo = repos2.loadClass("SimpleRecord"); + assertNotNull(clazzFromRepo); // Use the variable to avoid a warning + final Record recordAttributeFromRepo = (Record)findAttribute("Record",clazzFromRepo)[0]; + assertEquals(recordAttribute.toString(), recordAttributeFromRepo.toString(), "Both attributes needs to be equal"); + tfile.deleteOnExit(); + } + /** * A record type, once compiled, should result in a class file that is * marked such that we can determine from the access flags @@ -76,46 +118,4 @@ public class RecordTestCase extends AbstractTestCase { assertEquals("RecordComponentInfo(aNumber,I,0):", firstComponent.toString()); } - - /** - * Check that we can save and load the attribute correctly. - */ - @Test - public void testAttributeSerializtion() throws ClassNotFoundException, IOException { - final JavaClass clazz = new ClassParser("src/test/resources/record/SimpleRecord.class").parse(); - final File tfile = createTestdataFile("SimpleRecord.class"); - final Record recordAttribute = (Record)findAttribute("Record",clazz)[0]; - clazz.dump(tfile); - // Read in the new version and check it is OK - final SyntheticRepository repos2 = createRepos("."); - final JavaClass clazzFromRepo = repos2.loadClass("SimpleRecord"); - assertNotNull(clazzFromRepo); // Use the variable to avoid a warning - final Record recordAttributeFromRepo = (Record)findAttribute("Record",clazzFromRepo)[0]; - assertEquals(recordAttribute.toString(), recordAttributeFromRepo.toString(), "Both attributes needs to be equal"); - tfile.deleteOnExit(); - } - - /** - * Check that we can copy a attribute correctly. - */ - @Test - public void recordsCanBeCopied() throws ClassNotFoundException, IOException { - final JavaClass clazz = new ClassParser("src/test/resources/record/SimpleRecord.class").parse(); - final JavaClass copyClazz = clazz.copy(); - assertEquals(clazz.toString(), copyClazz.toString(), "both records should have the same value"); - } - - /** - * Check that a record can be visited by our visitors - */ - @Test - public void recordsCanBeVisited() throws ClassNotFoundException, IOException { - final JavaClass clazz = new ClassParser("src/test/resources/record/SimpleRecord.class").parse(); - final CountingVisitor countVisitor = new CountingVisitor(); - final DescendingVisitor desendingVisitor = new DescendingVisitor(clazz, countVisitor); - desendingVisitor.visit(); - assertEquals(1,countVisitor.recordCount, "should count one record"); - assertEquals(2,countVisitor.recordComponentCount, "should count two record components"); - } - } diff --git a/src/test/java/org/apache/bcel/generic/InstructionFactoryTestCase.java b/src/test/java/org/apache/bcel/generic/InstructionFactoryTestCase.java index 073238f2..6dda101c 100644 --- a/src/test/java/org/apache/bcel/generic/InstructionFactoryTestCase.java +++ b/src/test/java/org/apache/bcel/generic/InstructionFactoryTestCase.java @@ -62,6 +62,12 @@ public class InstructionFactoryTestCase extends AbstractTestCase { assertEquals(InstructionConst.AASTORE, createArrayStore(Type.getType("[I"))); } + @Test + public void testCreateInvokeNullArgTypes() throws Exception { + InstructionFactory factory = new InstructionFactory(new ClassGen(Repository.lookupClass(Object.class))); + factory.createInvoke("", "", Type.VOID, null, Const.INVOKESPECIAL, false); // Mustn't throw an NPE + } + @Test public void testExceptions() throws Exception { final InstructionFactory factory = new InstructionFactory(new ClassGen(Repository.lookupClass(Object.class))); @@ -97,10 +103,4 @@ public class InstructionFactoryTestCase extends AbstractTestCase { assertEquals(InstructionConst.ACONST_NULL, createNull(Type.OBJECT)); assertEquals(InstructionConst.ACONST_NULL, createNull(Type.getType("[I"))); } - - @Test - public void testCreateInvokeNullArgTypes() throws Exception { - InstructionFactory factory = new InstructionFactory(new ClassGen(Repository.lookupClass(Object.class))); - factory.createInvoke("", "", Type.VOID, null, Const.INVOKESPECIAL, false); // Mustn't throw an NPE - } } diff --git a/src/test/java/org/apache/bcel/visitors/CountingVisitor.java b/src/test/java/org/apache/bcel/visitors/CountingVisitor.java index 93695479..c0609843 100644 --- a/src/test/java/org/apache/bcel/visitors/CountingVisitor.java +++ b/src/test/java/org/apache/bcel/visitors/CountingVisitor.java @@ -489,6 +489,16 @@ public class CountingVisitor implements Visitor { // TODO Auto-generated method stub } + @Override + public void visitRecord(Record v) { + recordCount++; + } + + @Override + public void visitRecordComponent(RecordComponentInfo v) { + recordComponentCount++; + } + @Override public void visitSignature(final Signature obj) { signatureAnnotationCount++; @@ -526,14 +536,4 @@ public class CountingVisitor implements Visitor { public void visitUnknown(final Unknown obj) { unknownCount++; } - - @Override - public void visitRecord(Record v) { - recordCount++; - } - - @Override - public void visitRecordComponent(RecordComponentInfo v) { - recordComponentCount++; - } }