Anything for Java Gary <div>-------- Original message --------</div><div>From: ebo...@apache.org </div><div>Date:04/18/2014 18:09 (GMT-05:00) </div><div>To: comm...@commons.apache.org </div><div>Subject: svn commit: r1588579 - in /commons/proper/bcel/trunk/src: main/java/org/apache/bcel/ main/java/org/apache/bcel/classfile/ main/java/org/apache/bcel/verifier/statics/ test/java/org/apache/bcel/visitors/ </div><div> </div>Author: ebourg Date: Fri Apr 18 22:09:58 2014 New Revision: 1588579
URL: http://svn.apache.org/r1588579 Log: Added the BootstrapMethods attribute defined in the class format 51 (Java 7) Added: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/BootstrapMethod.java (with props) commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/BootstrapMethods.java (with props) Modified: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/Constants.java commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/Attribute.java commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/EmptyVisitor.java commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/Visitor.java commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/StringRepresentation.java commons/proper/bcel/trunk/src/test/java/org/apache/bcel/visitors/CounterVisitor.java Modified: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/Constants.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/Constants.java?rev=1588579&r1=1588578&r2=1588579&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/bcel/Constants.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/bcel/Constants.java Fri Apr 18 22:09:58 2014 @@ -1444,8 +1444,9 @@ public interface Constants { public static final byte ATTR_LOCAL_VARIABLE_TYPE_TABLE = 17; public static final byte ATTR_ENCLOSING_METHOD = 18; public static final byte ATTR_STACK_MAP_TABLE = 19; + public static final byte ATTR_BOOTSTRAP_METHODS = 20; - public static final short KNOWN_ATTRIBUTES = 20; + public static final short KNOWN_ATTRIBUTES = 21; // TOFO: FIXXXXX public static final String[] ATTRIBUTE_NAMES = { @@ -1455,7 +1456,8 @@ public interface Constants { "PMGClass", "Signature", "StackMap", "RuntimeVisibleAnnotations", "RuntimeInvisibleAnnotations", "RuntimeVisibleParameterAnnotations", "RuntimeInvisibleParameterAnnotations", - "AnnotationDefault", "LocalVariableTypeTable", "EnclosingMethod", "StackMapTable" + "AnnotationDefault", "LocalVariableTypeTable", "EnclosingMethod", "StackMapTable", + "BootstrapMethods" }; /** Constants used in the StackMap attribute. Modified: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/Attribute.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/Attribute.java?rev=1588579&r1=1588578&r2=1588579&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/Attribute.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/Attribute.java Fri Apr 18 22:09:58 2014 @@ -214,6 +214,8 @@ public abstract class Attribute implemen return new EnclosingMethod(name_index, length, file, constant_pool); case Constants.ATTR_STACK_MAP_TABLE: return new StackMapTable(name_index, length, file, constant_pool); + case Constants.ATTR_BOOTSTRAP_METHODS: + return new BootstrapMethods(name_index, length, file, constant_pool); default: // Never reached throw new IllegalStateException("Unrecognized attribute type tag parsed: " + tag); } Added: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/BootstrapMethod.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/BootstrapMethod.java?rev=1588579&view=auto ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/BootstrapMethod.java (added) +++ commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/BootstrapMethod.java Fri Apr 18 22:09:58 2014 @@ -0,0 +1,102 @@ +/* + * 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.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.Serializable; + +/** + * Entry of the bootstrap_methods table. + * + * @see <a href="http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.23">The class File Format : The BootstrapMethods Attribute</a> + * @since 6.0 + */ +public class BootstrapMethod implements Serializable, Cloneable { + + private static final long serialVersionUID = -4517534834047695344L; + + /** Index of the CONSTANT_MethodHandle_info structure in the constant_pool table */ + private int bootstrap_method_ref; + + /** Array of references to the constant_pool table */ + private int[] bootstrap_arguments; + + public BootstrapMethod() { + } + + /** + * Construct object from file stream. + * + * @param file Input stream + * @throws IOException + * @throws ClassFormatException + */ + BootstrapMethod(DataInputStream file) throws IOException, ClassFormatException { + bootstrap_method_ref = file.readUnsignedShort(); + + int num_bootstrap_methods = file.readUnsignedShort(); + + bootstrap_arguments = new int[num_bootstrap_methods]; + for (int i = 0; i < num_bootstrap_methods; i++) { + bootstrap_arguments[i] = file.readUnsignedShort(); + } + } + + public int getBootstrapMethodRef() { + return bootstrap_method_ref; + } + + public void setBootstrapMethodRef(int bootstrap_method_ref) { + this.bootstrap_method_ref = bootstrap_method_ref; + } + + public int[] getBootstrapArguments() { + return bootstrap_arguments; + } + + public void setBootstrapArguments(int[] bootstrap_arguments) { + this.bootstrap_arguments = bootstrap_arguments; + } + + /** + * Dump object to file stream on binary format. + * + * @param file Output file stream + * @throws IOException + */ + public final void dump(DataOutputStream file) throws IOException { + file.writeShort(bootstrap_method_ref); + file.writeShort(bootstrap_arguments.length); + for (int bootstrap_argument : bootstrap_arguments) { + file.writeShort(bootstrap_argument); + } + } + + /** + * @return deep copy of this object + */ + public BootstrapMethod copy() { + try { + return (BootstrapMethod) clone(); + } catch (CloneNotSupportedException e) { + } + return null; + } +} Propchange: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/BootstrapMethod.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/BootstrapMethod.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Added: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/BootstrapMethods.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/BootstrapMethods.java?rev=1588579&view=auto ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/BootstrapMethods.java (added) +++ commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/BootstrapMethods.java Fri Apr 18 22:09:58 2014 @@ -0,0 +1,93 @@ +/* + * 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.classfile; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import org.apache.bcel.Constants; + +/** + * This class represents a BootstrapMethods attribute. + * + * @see <a href="http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.23">The class File Format : The BootstrapMethods Attribute</a> + * @since 6.0 + */ +public class BootstrapMethods extends Attribute { + + private static final long serialVersionUID = -2169230245012340809L; + + private BootstrapMethod[] bootstrap_methods; + + public BootstrapMethods(int name_index, int length, BootstrapMethod[] bootstrap_methods, ConstantPool constant_pool) { + super(Constants.ATTR_BOOTSTRAP_METHODS, name_index, length, constant_pool); + this.bootstrap_methods = bootstrap_methods; + } + + BootstrapMethods(int name_index, int length, DataInputStream file, ConstantPool constant_pool) throws IOException { + this(name_index, length, (BootstrapMethod[]) null, constant_pool); + + int num_bootstrap_methods = file.readUnsignedShort(); + bootstrap_methods = new BootstrapMethod[num_bootstrap_methods]; + for (int i = 0; i < num_bootstrap_methods; i++) { + bootstrap_methods[i] = new BootstrapMethod(file); + } + } + + public final BootstrapMethod[] getBootstrapMethods() { + return bootstrap_methods; + } + + public final void setBootstrapMethods(BootstrapMethod[] bootstrap_methods) { + this.bootstrap_methods = bootstrap_methods; + } + + @Override + public void accept(Visitor v) { + v.visitBootstrapMethods(this); + } + + @Override + public BootstrapMethods copy(ConstantPool _constant_pool) { + BootstrapMethods c = (BootstrapMethods) clone(); + c.bootstrap_methods = new BootstrapMethod[bootstrap_methods.length]; + + for (int i = 0; i < bootstrap_methods.length; i++) { + c.bootstrap_methods[i] = bootstrap_methods[i].copy(); + } + c.constant_pool = _constant_pool; + return c; + } + + /** + * Dump bootstrap methods attribute to file stream in binary format. + * + * @param file Output file stream + * @throws IOException + */ + @Override + public final void dump(DataOutputStream file) throws IOException { + super.dump(file); + + file.writeShort(bootstrap_methods.length); + for (BootstrapMethod bootstrap_method : bootstrap_methods) { + bootstrap_method.dump(file); + } + } +} Propchange: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/BootstrapMethods.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/BootstrapMethods.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Modified: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java?rev=1588579&r1=1588578&r2=1588579&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/DescendingVisitor.java Fri Apr 18 22:09:58 2014 @@ -430,4 +430,11 @@ public class DescendingVisitor implement obj.accept(visitor); stack.pop(); } + + public void visitBootstrapMethods(BootstrapMethods obj) + { + stack.push(obj); + obj.accept(visitor); + stack.pop(); + } } Modified: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/EmptyVisitor.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/EmptyVisitor.java?rev=1588579&r1=1588578&r2=1588579&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/EmptyVisitor.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/EmptyVisitor.java Fri Apr 18 22:09:58 2014 @@ -189,4 +189,8 @@ public class EmptyVisitor implements Vis public void visitLocalVariableTypeTable(LocalVariableTypeTable obj) { } + + public void visitBootstrapMethods(BootstrapMethods obj) + { + } } Modified: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/Visitor.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/Visitor.java?rev=1588579&r1=1588578&r2=1588579&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/Visitor.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/Visitor.java Fri Apr 18 22:09:58 2014 @@ -106,4 +106,6 @@ public interface Visitor void visitLocalVariableTypeTable(LocalVariableTypeTable obj); void visitEnclosingMethod(EnclosingMethod obj); + + void visitBootstrapMethods(BootstrapMethods obj); } Modified: commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/StringRepresentation.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/StringRepresentation.java?rev=1588579&r1=1588578&r2=1588579&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/StringRepresentation.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/bcel/verifier/statics/StringRepresentation.java Fri Apr 18 22:09:58 2014 @@ -19,6 +19,7 @@ package org.apache.bcel.verifier.statics import org.apache.bcel.classfile.Annotations; +import org.apache.bcel.classfile.BootstrapMethods; import org.apache.bcel.classfile.Code; import org.apache.bcel.classfile.CodeException; import org.apache.bcel.classfile.ConstantClass; @@ -296,4 +297,9 @@ public class StringRepresentation extend public void visitUnknown(Unknown obj) { tostring = toString(obj); } + + @Override + public void visitBootstrapMethods(BootstrapMethods obj) { + tostring = toString(obj); + } } Modified: commons/proper/bcel/trunk/src/test/java/org/apache/bcel/visitors/CounterVisitor.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/test/java/org/apache/bcel/visitors/CounterVisitor.java?rev=1588579&r1=1588578&r2=1588579&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/test/java/org/apache/bcel/visitors/CounterVisitor.java (original) +++ commons/proper/bcel/trunk/src/test/java/org/apache/bcel/visitors/CounterVisitor.java Fri Apr 18 22:09:58 2014 @@ -21,6 +21,7 @@ package org.apache.bcel.visitors; import org.apache.bcel.classfile.AnnotationDefault; import org.apache.bcel.classfile.AnnotationEntry; import org.apache.bcel.classfile.Annotations; +import org.apache.bcel.classfile.BootstrapMethods; import org.apache.bcel.classfile.Code; import org.apache.bcel.classfile.CodeException; import org.apache.bcel.classfile.ConstantClass; @@ -141,6 +142,8 @@ public class CounterVisitor implements V public int stackMapTableCount = 0; public int stackMapTableEntryCount = 0; + + public int bootstrapMethodsCount = 0; public void visitAnnotation(Annotations obj) @@ -333,11 +336,18 @@ public class CounterVisitor implements V unknownCount++; } - public void visitStackMapTable(StackMapTable obj) { + public void visitStackMapTable(StackMapTable obj) + { stackMapTableCount++; } - public void visitStackMapTableEntry(StackMapTableEntry obj) { + public void visitStackMapTableEntry(StackMapTableEntry obj) + { stackMapTableEntryCount++; } + + public void visitBootstrapMethods(BootstrapMethods obj) + { + bootstrapMethodsCount++; + } }