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


Reply via email to