rpms/findbugs-bcel/F-10 bcel.diff, 1.1, 1.2 findbugs-bcel.spec, 1.1, 1.2
Jerry James
jjames at fedoraproject.org
Wed Mar 18 03:11:53 UTC 2009
Author: jjames
Update of /cvs/pkgs/rpms/findbugs-bcel/F-10
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv20535/F-10
Modified Files:
bcel.diff findbugs-bcel.spec
Log Message:
* Tue Mar 17 2009 Jerry James <loganjerry at gmail.com> - 5.2-1.3.8
- Update to the findbugs 1.3.8 version of the BCEL patch
- The BCEL patch now applies cleanly, so drop workaround code
bcel.diff:
Index: bcel.diff
===================================================================
RCS file: /cvs/pkgs/rpms/findbugs-bcel/F-10/bcel.diff,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- bcel.diff 29 Jan 2009 03:59:00 -0000 1.1
+++ bcel.diff 18 Mar 2009 03:11:22 -0000 1.2
@@ -1,1008 +1,970 @@
-
-Property changes on: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2
-___________________________________________________________________
-Name: svn:ignore
- - bin
-velocity.log
-*~
- + bin
-velocity.log
-*~
-bcel.jar
-
-
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/.classpath
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/.classpath (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/.classpath (working copy)
-@@ -1,7 +1,6 @@
- <?xml version="1.0" encoding="UTF-8"?>
- <classpath>
- <classpathentry kind="src" path="src/java"/>
-- <classpathentry kind="src" path="examples"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="output" path="eclipse"/>
- </classpath>
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/.settings/org.eclipse.jdt.core.prefs
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/.settings/org.eclipse.jdt.core.prefs (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/.settings/org.eclipse.jdt.core.prefs (working copy)
-@@ -1,12 +1,12 @@
--#Tue Jan 24 00:19:24 EST 2006
-+#Fri Feb 23 10:19:35 EST 2007
- eclipse.preferences.version=1
--org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
--org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
- org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
--org.eclipse.jdt.core.compiler.compliance=1.4
-+org.eclipse.jdt.core.compiler.compliance=1.5
- org.eclipse.jdt.core.compiler.debug.lineNumber=generate
- org.eclipse.jdt.core.compiler.debug.localVariable=generate
- org.eclipse.jdt.core.compiler.debug.sourceFile=generate
--org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
--org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
--org.eclipse.jdt.core.compiler.source=1.3
-+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-+org.eclipse.jdt.core.compiler.source=1.5
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/build.xml
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/build.xml (revision 0)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/build.xml (revision 0)
-@@ -0,0 +1,39 @@
-+<project name="bcel" default="jar">
-+
-+ <property name="src.dir" value="src/java"/>
-+ <property name="classes.dir" value="eclipse"/>
-+ <property name="jar.dir" value="."/>
-+
-+ <target name="jar" depends="clean,classes">
-+ <!-- Main engine and command line jar file. -->
-+ <jar destfile="${jar.dir}/bcel.jar" >
-+ <!-- Compiled classes, properties files. -->
-+ <fileset dir="${classes.dir}">
-+ <include name="**/*.class"/>
-+ </fileset>
-+ </jar>
-+ </target>
-+
-+ <!-- Compile Java source files, and copy other files (properties,
-+ images, html, XSL stylesheets) that need to be part of the codebase. -->
-+ <target name="classes">
-+ <mkdir dir="${classes.dir}"/>
-+ <!-- Compile Java source files. -->
-+ <javac srcdir="${src.dir}"
-+ destdir="${classes.dir}"
-+ source="1.5"
-+ target="jsr14"
-+ deprecation="on"
-+ debug="on">
-+ </javac>
-+ </target>
-+ <!-- Delete generated files. -->
-+ <target name="clean">
-+ <delete file="${classes.dir}"/>
-+ <mkdir dir="${classes.dir}"/>
-+ </target>
-+
-+
-+</project>
-+
-+<!-- vim:set ts=4: -->
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/AbstractLocalVariableTable.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/AbstractLocalVariableTable.java (revision 0)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/AbstractLocalVariableTable.java (revision 0)
-@@ -0,0 +1,187 @@
-+/*
-+ * Copyright 2000-2004 The Apache Software Foundation
-+ *
-+ * Licensed 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 colection of local variables in a
-+ * method. This attribute is contained in the <em>Code</em> attribute.
-+ *
-+ * @version $Id$
-+ * @author <A HREF="mailto:m.dahm at gmx.de">M. Dahm</A>
-+ * @see Code
-+ * @see LocalVariable
-+ */
-+abstract public class AbstractLocalVariableTable extends Attribute {
-+
-+ private int local_variable_table_length; // Table of local
-+ private LocalVariable[] local_variable_table; // variables
-+
-+
-+ /**
-+ * Initialize from another object. Note that both objects use the same
-+ * references (shallow copy). Use copy() for a physical copy.
-+ */
-+ public AbstractLocalVariableTable(AbstractLocalVariableTable c) {
-+ this(c.getNameIndex(), c.getLength(), c.getLocalVariableTable(), c.getConstantPool());
-+ }
-+
-+
-+ /**
-+ * @param name_index Index in constant pool to `LocalVariableTable'
-+ * @param length Content length in bytes
-+ * @param local_variable_table Table of local variables
-+ * @param constant_pool Array of constants
-+ */
-+ public AbstractLocalVariableTable(int name_index, int length, LocalVariable[] local_variable_table,
-+ ConstantPool constant_pool) {
-+ super(Constants.ATTR_LOCAL_VARIABLE_TABLE, name_index, length, constant_pool);
-+ setLocalVariableTable(local_variable_table);
-+ }
-+
-+
-+ /**
-+ * Construct object from file stream.
-+ * @param name_index Index in constant pool
-+ * @param length Content length in bytes
-+ * @param file Input stream
-+ * @param constant_pool Array of constants
-+ * @throws IOException
-+ */
-+ AbstractLocalVariableTable(int name_index, int length, DataInputStream file, ConstantPool constant_pool)
-+ throws IOException {
-+ this(name_index, length, (LocalVariable[]) null, constant_pool);
-+ local_variable_table_length = (file.readUnsignedShort());
-+ local_variable_table = new LocalVariable[local_variable_table_length];
-+ for (int i = 0; i < local_variable_table_length; i++) {
-+ local_variable_table[i] = new LocalVariable(file, constant_pool);
-+ }
-+ }
-+
-+
-+
-+
-+ /**
-+ * Dump local variable table attribute to file stream in binary format.
-+ *
-+ * @param file Output file stream
-+ * @throws IOException
-+ */
-+ public final void dump( DataOutputStream file ) throws IOException {
-+ super.dump(file);
-+ file.writeShort(local_variable_table_length);
-+ for (int i = 0; i < local_variable_table_length; i++) {
-+ local_variable_table[i].dump(file);
-+ }
-+ }
-+
-+
-+ /**
-+ * @return Array of local variables of method.
-+ */
-+ public final LocalVariable[] getLocalVariableTable() {
-+ return local_variable_table;
-+ }
-+
-+
-+ /**
-+ * @return first matching variable using index
-+ *
-+ * @param index the variable slot
-+ *
-+ * @return the first LocalVariable that matches the slot or null if not found
-+ *
-+ * @deprecated since 5.2 because multiple variables can share the
-+ * same slot, use getLocalVariable(int index, int pc) instead.
-+ */
-+ public final LocalVariable getLocalVariable( int index ) {
-+ for (int i = 0; i < local_variable_table_length; i++) {
-+ if (local_variable_table[i].getIndex() == index) {
-+ return local_variable_table[i];
-+ }
-+ }
-+ return null;
-+ }
-+
-+
-+ /**
-+ * @return matching variable using index when variable is used at supplied pc
-+ *
-+ * @param index the variable slot
-+ * @param pc the current pc that this variable is alive
-+ *
-+ * @return the LocalVariable that matches or null if not found
-+ */
-+ public final LocalVariable getLocalVariable( int index, int pc ) {
-+ for (int i = 0; i < local_variable_table_length; i++) {
-+ if (local_variable_table[i].getIndex() == index) {
-+ int start_pc = local_variable_table[i].getStartPC();
-+ int end_pc = start_pc + local_variable_table[i].getLength();
-+ if ((pc >= start_pc) && (pc < end_pc)) {
-+ return local_variable_table[i];
-+ }
-+ }
-+ }
-+ return null;
-+ }
-+
-+
-+ public final void setLocalVariableTable( LocalVariable[] local_variable_table ) {
-+ this.local_variable_table = local_variable_table;
-+ local_variable_table_length = (local_variable_table == null)
-+ ? 0
-+ : local_variable_table.length;
-+ }
-+
-+
-+ /**
-+ * @return String representation.
-+ */
-+ public final String toString() {
-+ StringBuffer buf = new StringBuffer("");
-+ for (int i = 0; i < local_variable_table_length; i++) {
-+ buf.append(local_variable_table[i].toString());
-+ if (i < local_variable_table_length - 1) {
-+ buf.append('\n');
-+ }
-+ }
-+ return buf.toString();
-+ }
-+
-+
-+ /**
-+ * @return deep copy of this attribute
-+ */
-+ public Attribute copy( ConstantPool _constant_pool ) {
-+ AbstractLocalVariableTable c = (AbstractLocalVariableTable) clone();
-+ c.local_variable_table = new LocalVariable[local_variable_table_length];
-+ for (int i = 0; i < local_variable_table_length; i++) {
-+ c.local_variable_table[i] = local_variable_table[i].copy();
-+ }
-+ c.constant_pool = _constant_pool;
-+ return c;
-+ }
-+
-+
-+ public final int getTableLength() {
-+ return local_variable_table_length;
-+ }
-+}
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/Attribute.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/Attribute.java (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/Attribute.java (working copy)
-@@ -159,7 +159,9 @@
- return new LineNumberTable(name_index, length, file, constant_pool);
- case Constants.ATTR_LOCAL_VARIABLE_TABLE:
- return new LocalVariableTable(name_index, length, file, constant_pool);
-- case Constants.ATTR_INNER_CLASSES:
-+ case Constants.ATTR_LOCAL_VARIABLE_TYPE_TABLE:
-+ return new LocalVariableTypeTable(name_index, length, file, constant_pool);
-+ case Constants.ATTR_INNER_CLASSES:
- return new InnerClasses(name_index, length, file, constant_pool);
- case Constants.ATTR_SYNTHETIC:
- return new Synthetic(name_index, length, file, constant_pool);
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/Constant.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/Constant.java (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/Constant.java (working copy)
-@@ -141,7 +141,7 @@
- case Constants.CONSTANT_NameAndType:
- return new ConstantNameAndType(file);
- case Constants.CONSTANT_Utf8:
-- return new ConstantUtf8(file);
-+ return ConstantUtf8.getInstance(file);
- default:
- throw new ClassFormatException("Invalid byte tag in constant pool: " + b);
- }
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/ConstantUtf8.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/ConstantUtf8.java (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/ConstantUtf8.java (working copy)
-@@ -19,7 +19,14 @@
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.IOException;
-+import java.util.HashMap;
-+import java.util.LinkedHashMap;
-+import java.util.Map;
-+
- import org.apache.bcel.Constants;
-+import org.apache.bcel.generic.ObjectType;
-+
-+import com.sun.org.apache.xerces.internal.impl.io.UTF8Reader;
-
- /**
- * This class is derived from the abstract
-@@ -32,9 +39,60 @@
- */
- public final class ConstantUtf8 extends Constant {
-
-- private String bytes;
-+ private final String bytes;
-+
-+ private static final int MAX_CACHE_ENTRIES = 20000;
-+ private static final int INITIAL_CACHE_CAPACITY = (int)(MAX_CACHE_ENTRIES/0.75);
-+ private static HashMap<String, ConstantUtf8> cache;
-+ private static int considered = 0;
-+ private static int hits = 0;
-+ private static int skipped = 0;
-+ private static int created = 0;
-+ final static boolean BCEL_STATISTICS = Boolean.getBoolean("bcel.statistics");
-+ final static boolean BCEL_DONT_CACHE = Boolean.getBoolean("bcel.dontCache");
-+
-+ static {
-+ if (BCEL_STATISTICS)
-+ Runtime.getRuntime().addShutdownHook(new Thread() {
-+ public void run() {
-+ System.err.println("Cache hit " + hits + "/" + considered +", "
-+ + skipped + " skipped");
-+ System.err.println("Total of " + created + " ConstantUtf8 objects created");
-+ }
-+ });
-+ }
-+ public static synchronized ConstantUtf8 getCachedInstance(String s) {
-+ if (BCEL_DONT_CACHE || s.length() > 200) {
-+ skipped++;
-+ return new ConstantUtf8(s);
-+ }
-+ considered++;
-+ if (cache == null) {
-+ cache = new LinkedHashMap<String, ConstantUtf8>(INITIAL_CACHE_CAPACITY, 0.75f, true) {
-+
-+ protected boolean removeEldestEntry(Map.Entry eldest) {
-+ return size() > MAX_CACHE_ENTRIES;
-+ }
-+
-+ };
-+ }
-+ ConstantUtf8 result = cache.get(s);
-+ if (result != null) {
-+ hits++;
-+ return result;
-+ }
-+ result = new ConstantUtf8(s);
-+ cache.put(s, result);
-+ return result;
-+ }
-
-+ public static ConstantUtf8 getInstance(String s) {
-+ return getCachedInstance(s);
-+ }
-
-+ public static ConstantUtf8 getInstance (DataInputStream file) throws IOException {
-+ return getInstance(file.readUTF());
-+ }
- /**
- * Initialize from another object.
- */
-@@ -52,6 +110,7 @@
- ConstantUtf8(DataInputStream file) throws IOException {
- super(Constants.CONSTANT_Utf8);
- bytes = file.readUTF();
-+ created++;
- }
-
-
-@@ -64,6 +123,7 @@
- throw new IllegalArgumentException("bytes must not be null!");
- }
- this.bytes = bytes;
-+ created++;
- }
-
-
-@@ -101,9 +161,10 @@
-
- /**
- * @param bytes the raw bytes of this Utf-8
-+ * @deprecated
- */
- public final void setBytes( String bytes ) {
-- this.bytes = bytes;
-+ throw new UnsupportedOperationException();
- }
-
-
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/DescendingVisitor.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/DescendingVisitor.java (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/DescendingVisitor.java (working copy)
-@@ -185,6 +185,9 @@
- }
- stack.pop();
- }
-+ public void visitLocalVariableTypeTable( LocalVariableTypeTable table ) {
-+
-+ }
-
-
- public void visitStackMap( StackMap table ) {
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/EmptyVisitor.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/EmptyVisitor.java (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/EmptyVisitor.java (working copy)
-@@ -158,4 +158,10 @@
-
- public void visitStackMapEntry( StackMapEntry obj ) {
- }
-+
-+
-+ public void visitLocalVariableTypeTable(LocalVariableTypeTable obj) {
-+ // TODO Auto-generated method stub
-+
-+ }
- }
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/LineNumber.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/LineNumber.java (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/LineNumber.java (working copy)
-@@ -32,8 +32,8 @@
- */
- public final class LineNumber implements Cloneable, Node, Serializable {
-
-- private int start_pc; // Program Counter (PC) corresponds to line
-- private int line_number; // number in source file
-+ private short start_pc; // Program Counter (PC) corresponds to line
-+ private short line_number; // number in source file
-
-
- /**
-@@ -59,8 +59,8 @@
- * @param line_number line number in source file
- */
- public LineNumber(int start_pc, int line_number) {
-- this.start_pc = start_pc;
-- this.line_number = line_number;
-+ this.start_pc = (short) start_pc;
-+ this.line_number = (short)line_number;
- }
-
-
-@@ -92,7 +92,7 @@
- * @return Corresponding source line
- */
- public final int getLineNumber() {
-- return line_number;
-+ return 0xffff & line_number;
- }
-
-
-@@ -100,7 +100,7 @@
- * @return PC in code
- */
- public final int getStartPC() {
-- return start_pc;
-+ return 0xffff & start_pc;
- }
-
-
-@@ -108,7 +108,7 @@
- * @param line_number the source line number
- */
- public final void setLineNumber( int line_number ) {
-- this.line_number = line_number;
-+ this.line_number = (short) line_number;
- }
-
-
-@@ -116,7 +116,7 @@
- * @param start_pc the pc for this line number
- */
- public final void setStartPC( int start_pc ) {
-- this.start_pc = start_pc;
-+ this.start_pc = (short) start_pc;
- }
-
-
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/LocalVariableTable.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/LocalVariableTable.java (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/LocalVariableTable.java (working copy)
-@@ -30,11 +30,7 @@
- * @see Code
- * @see LocalVariable
- */
--public class LocalVariableTable extends Attribute {
--
-- private int local_variable_table_length; // Table of local
-- private LocalVariable[] local_variable_table; // variables
--
-+public class LocalVariableTable extends AbstractLocalVariableTable {
-
- /**
- * Initialize from another object. Note that both objects use the same
-@@ -53,8 +49,7 @@
- */
- public LocalVariableTable(int name_index, int length, LocalVariable[] local_variable_table,
- ConstantPool constant_pool) {
-- super(Constants.ATTR_LOCAL_VARIABLE_TABLE, name_index, length, constant_pool);
-- setLocalVariableTable(local_variable_table);
-+ super(name_index,length, local_variable_table, constant_pool);
- }
-
-
-@@ -68,12 +63,7 @@
- */
- LocalVariableTable(int name_index, int length, DataInputStream file, ConstantPool constant_pool)
- throws IOException {
-- this(name_index, length, (LocalVariable[]) null, constant_pool);
-- local_variable_table_length = (file.readUnsignedShort());
-- local_variable_table = new LocalVariable[local_variable_table_length];
-- for (int i = 0; i < local_variable_table_length; i++) {
-- local_variable_table[i] = new LocalVariable(file, constant_pool);
-- }
-+ super(name_index,length, file, constant_pool);
- }
-
-
-@@ -87,111 +77,4 @@
- public void accept( Visitor v ) {
- v.visitLocalVariableTable(this);
- }
--
--
-- /**
-- * Dump local variable table attribute to file stream in binary format.
-- *
-- * @param file Output file stream
-- * @throws IOException
-- */
-- public final void dump( DataOutputStream file ) throws IOException {
-- super.dump(file);
-- file.writeShort(local_variable_table_length);
-- for (int i = 0; i < local_variable_table_length; i++) {
-- local_variable_table[i].dump(file);
-- }
-- }
--
--
-- /**
-- * @return Array of local variables of method.
-- */
-- public final LocalVariable[] getLocalVariableTable() {
-- return local_variable_table;
-- }
--
--
-- /**
-- * @return first matching variable using index
-- *
-- * @param index the variable slot
-- *
-- * @return the first LocalVariable that matches the slot or null if not found
-- *
-- * @deprecated since 5.2 because multiple variables can share the
-- * same slot, use getLocalVariable(int index, int pc) instead.
-- */
-- public final LocalVariable getLocalVariable( int index ) {
-- for (int i = 0; i < local_variable_table_length; i++) {
-- if (local_variable_table[i].getIndex() == index) {
-- return local_variable_table[i];
-- }
-- }
-- return null;
-- }
--
--
-- /**
-- * @return matching variable using index when variable is used at supplied pc
-- *
-- * @param index the variable slot
-- * @param pc the current pc that this variable is alive
-- *
-- * @return the LocalVariable that matches or null if not found
-- */
-- public final LocalVariable getLocalVariable( int index, int pc ) {
-- for (int i = 0; i < local_variable_table_length; i++) {
-- if (local_variable_table[i].getIndex() == index) {
-- int start_pc = local_variable_table[i].getStartPC();
-- int end_pc = start_pc + local_variable_table[i].getLength();
-- if ((pc >= start_pc) && (pc < end_pc)) {
-- return local_variable_table[i];
-- }
-- }
-- }
-- return null;
-- }
--
--
-- public final void setLocalVariableTable( LocalVariable[] local_variable_table ) {
-- this.local_variable_table = local_variable_table;
-- local_variable_table_length = (local_variable_table == null)
-- ? 0
-- : local_variable_table.length;
-- }
--
--
-- /**
-- * @return String representation.
-- */
-- public final String toString() {
-- StringBuffer buf = new StringBuffer("");
-- for (int i = 0; i < local_variable_table_length; i++) {
-- buf.append(local_variable_table[i].toString());
-- if (i < local_variable_table_length - 1) {
-- buf.append('\n');
-- }
-- }
-- return buf.toString();
-- }
--
--
-- /**
-- * @return deep copy of this attribute
-- */
-- public Attribute copy( ConstantPool _constant_pool ) {
-- LocalVariableTable c = (LocalVariableTable) clone();
-- c.local_variable_table = new LocalVariable[local_variable_table_length];
-- for (int i = 0; i < local_variable_table_length; i++) {
-- c.local_variable_table[i] = local_variable_table[i].copy();
-- }
-- c.constant_pool = _constant_pool;
-- return c;
-- }
--
--
-- public final int getTableLength() {
-- return local_variable_table_length;
-- }
- }
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/LocalVariableTypeTable.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/LocalVariableTypeTable.java (revision 0)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/LocalVariableTypeTable.java (revision 0)
-@@ -0,0 +1,22 @@
-+package org.apache.bcel.classfile;
-+
-+import java.io.DataInputStream;
-+import java.io.IOException;
-+
-+public class LocalVariableTypeTable extends AbstractLocalVariableTable {
-+
-+ public LocalVariableTypeTable(int name_index, int length, DataInputStream file, ConstantPool constant_pool) throws IOException {
-+ super(name_index, length, file, constant_pool);
-+ }
-+
-+ /**
-+ * 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,
-+ * fields, attributes, etc. spawns a tree of objects.
-+ *
-+ * @param v Visitor object
-+ */
-+ public void accept( Visitor v ) {
-+ v.visitLocalVariableTypeTable(this);
-+ }
-+}
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/Visitor.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/Visitor.java (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/Visitor.java (working copy)
-@@ -103,6 +103,7 @@
-
-
- public void visitLocalVariableTable( LocalVariableTable obj );
-+ public void visitLocalVariableTypeTable( LocalVariableTypeTable obj );
-
-
- public void visitMethod( Method obj );
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/Constants.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/Constants.java (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/Constants.java (working copy)
-@@ -729,13 +729,16 @@
- public static final byte ATTR_PMG = 9;
- public static final byte ATTR_SIGNATURE = 10;
- public static final byte ATTR_STACK_MAP = 11;
-- public static final byte ATTR_RUNTIMEVISIBLE_ANNOTATIONS = 12;
-- public static final byte ATTR_RUNTIMEINVISIBLE_ANNOTATIONS = 13;
-- public static final byte ATTR_RUNTIMEVISIBLE_PARAMETER_ANNOTATIONS = 14;
-- public static final byte ATTR_RUNTIMEINVISIBLE_PARAMETER_ANNOTATIONS = 15;
-- public static final byte ATTR_ANNOTATION_DEFAULT = 16;
-+ public static final byte ATTR_LOCAL_VARIABLE_TYPE_TABLE = 12;
-+ public static final byte ATTR_RUNTIMEVISIBLE_ANNOTATIONS = 13;
-+ public static final byte ATTR_RUNTIMEINVISIBLE_ANNOTATIONS = 14;
-+ public static final byte ATTR_RUNTIMEVISIBLE_PARAMETER_ANNOTATIONS = 15;
-+ public static final byte ATTR_RUNTIMEINVISIBLE_PARAMETER_ANNOTATIONS = 16;
-+ public static final byte ATTR_ANNOTATION_DEFAULT = 17;
-+
-+
-
-- public static final short KNOWN_ATTRIBUTES = 12;//should be 17
-+ public static final short KNOWN_ATTRIBUTES = 13;//should be 17
-
- public static final String[] ATTRIBUTE_NAMES = {
- "SourceFile", "ConstantValue", "Code", "Exceptions",
-@@ -741,7 +744,7 @@
- "SourceFile", "ConstantValue", "Code", "Exceptions",
- "LineNumberTable", "LocalVariableTable",
- "InnerClasses", "Synthetic", "Deprecated",
-- "PMGClass", "Signature", "StackMap",
-+ "PMGClass", "Signature", "StackMap", "LocalVariableTypeTable",
- "RuntimeVisibleAnnotations", "RuntimeInvisibleAnnotations",
- "RuntimeVisibleParameterAnnotations", "RuntimeInvisibleParameterAnnotations",
- "AnnotationDefault"
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/ArrayType.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/ArrayType.java (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/ArrayType.java (working copy)
-@@ -46,7 +46,7 @@
- * @param class_name complete name of class (java.lang.String, e.g.)
- */
- public ArrayType(String class_name, int dimensions) {
-- this(new ObjectType(class_name), dimensions);
-+ this(ObjectType.getInstance(class_name), dimensions);
- }
-
-
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/FieldGen.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/FieldGen.java (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/FieldGen.java (working copy)
-@@ -107,7 +107,7 @@
- * by the JVM automatically.
- */
- public void setInitValue( String str ) {
-- checkType(new ObjectType("java.lang.String"));
-+ checkType( ObjectType.getInstance("java.lang.String"));
- if (str != null) {
- value = str;
- }
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/FieldOrMethod.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/FieldOrMethod.java (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/FieldOrMethod.java (working copy)
-@@ -94,7 +94,7 @@
- * getReferenceType() instead.
- */
- public ObjectType getClassType( ConstantPoolGen cpg ) {
-- return new ObjectType(getClassName(cpg));
-+ return ObjectType.getInstance(getClassName(cpg));
- }
-
-
-@@ -115,7 +115,7 @@
- return (ArrayType) Type.getType(className);
- } else {
- className = className.replace('/', '.');
-- return new ObjectType(className);
-+ return ObjectType.getInstance(className);
- }
- }
-
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/InstructionFactory.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/InstructionFactory.java (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/InstructionFactory.java (working copy)
-@@ -616,7 +616,7 @@
-
-
- public NEW createNew( String s ) {
-- return createNew(new ObjectType(s));
-+ return createNew(ObjectType.getInstance(s));
- }
-
-
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/MethodGen.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/MethodGen.java (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/MethodGen.java (working copy)
-@@ -122,7 +122,7 @@
- /* Add local variables, namely the implicit `this' and the arguments
- */
- if (!isStatic() && (class_name != null)) { // Instance method -> `this' is local var 0
-- addLocalVariable("this", new ObjectType(class_name), start, end);
-+ addLocalVariable("this", ObjectType.getInstance(class_name), start, end);
- }
- }
- if (arg_types != null) {
-@@ -183,7 +183,7 @@
- if (type > 0) {
- String cen = m.getConstantPool().getConstantString(type,
- Constants.CONSTANT_Class);
-- c_type = new ObjectType(cen);
-+ c_type = ObjectType.getInstance(cen);
- }
- int end_pc = ce.getEndPC();
- int length = m.getCode().getCode().length;
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/ObjectType.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/ObjectType.java (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/ObjectType.java (working copy)
-@@ -16,6 +16,10 @@
- */
- package org.apache.bcel.generic;
-
-+import java.util.HashMap;
-+import java.util.LinkedHashMap;
-+import java.util.Map;
-+
- import org.apache.bcel.Constants;
- import org.apache.bcel.Repository;
- import org.apache.bcel.classfile.JavaClass;
-@@ -20,6 +24,7 @@
- import org.apache.bcel.Repository;
- import org.apache.bcel.classfile.JavaClass;
-
-+
- /**
- * Denotes reference such as java.lang.String.
- *
-@@ -28,8 +33,27 @@
- */
- public class ObjectType extends ReferenceType {
-
-- private String class_name; // Class name of type
-+ private static final int MAX_CACHE_ENTRIES = 200;
-+ private static final int INITIAL_CACHE_CAPACITY = (int)(MAX_CACHE_ENTRIES/0.75);
-+ private static HashMap<String, ObjectType> cache;
-+ public synchronized static ObjectType getInstance(String class_name) {
-+ if (cache == null)
-+ cache = new LinkedHashMap<String, ObjectType>(INITIAL_CACHE_CAPACITY, 0.75f, true) {
-+
-+
-+ protected boolean removeEldestEntry(Map.Entry eldest) {
-+ return size() > MAX_CACHE_ENTRIES;
-+ }
-+
-+ };
-+ ObjectType result = cache.get(class_name);
-+ if (result != null) return result;
-+ result = new ObjectType(class_name);
-+ cache.put(class_name, result);
-+ return result;
-+ }
-
-+ final private String class_name; // Class name of type
-
- /**
- * @param class_name fully qualified class name, e.g. java.lang.String
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/ReferenceType.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/ReferenceType.java (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/ReferenceType.java (working copy)
-@@ -162,7 +162,7 @@
- // 'java.io.Serializable'"
- if ((T instanceof ObjectType) && (((ObjectType) T).referencesInterfaceExact())) {
- for (int ii = 0; ii < Constants.INTERFACES_IMPLEMENTED_BY_ARRAYS.length; ii++) {
-- if (T.equals(new ObjectType(Constants.INTERFACES_IMPLEMENTED_BY_ARRAYS[ii]))) {
-+ if (T.equals(ObjectType.getInstance(Constants.INTERFACES_IMPLEMENTED_BY_ARRAYS[ii]))) {
- return true;
- }
- }
-@@ -248,7 +248,7 @@
- for (int i = 0; i < t_sups.length; i++) {
- for (int j = 0; j < this_sups.length; j++) {
- if (this_sups[j].equals(t_sups[i])) {
-- return new ObjectType(this_sups[j].getClassName());
-+ return ObjectType.getInstance(this_sups[j].getClassName());
- }
- }
- }
-@@ -320,7 +320,7 @@
- for (int i = 0; i < t_sups.length; i++) {
- for (int j = 0; j < this_sups.length; j++) {
- if (this_sups[j].equals(t_sups[i])) {
-- return new ObjectType(this_sups[j].getClassName());
-+ return ObjectType.getInstance(this_sups[j].getClassName());
- }
- }
- }
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/Type.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/Type.java (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/Type.java (working copy)
-@@ -31,7 +31,7 @@
- */
- public abstract class Type implements java.io.Serializable {
-
-- protected byte type;
-+ final protected byte type;
- protected String signature; // signature for the type
- /** Predefined constants
- */
-@@ -44,11 +44,11 @@
- public static final BasicType DOUBLE = new BasicType(Constants.T_DOUBLE);
- public static final BasicType FLOAT = new BasicType(Constants.T_FLOAT);
- public static final BasicType CHAR = new BasicType(Constants.T_CHAR);
-- public static final ObjectType OBJECT = new ObjectType("java.lang.Object");
-- public static final ObjectType CLASS = new ObjectType("java.lang.Class");
-- 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 ObjectType OBJECT = ObjectType.getInstance("java.lang.Object");
-+ public static final ObjectType CLASS = ObjectType.getInstance("java.lang.Class");
-+ public static final ObjectType STRING = ObjectType.getInstance("java.lang.String");
-+ public static final ObjectType STRINGBUFFER = ObjectType.getInstance("java.lang.StringBuffer");
-+ public static final ObjectType THROWABLE = ObjectType.getInstance("java.lang.Throwable");
- public static final Type[] NO_ARGS = new Type[0];
- public static final ReferenceType NULL = new ReferenceType() {
- };
-@@ -190,7 +190,7 @@
- }
- //corrected concurrent private static field acess
- wrap(consumed_chars, index + 1); // "Lblabla;" `L' and `;' are removed
-- return new ObjectType(signature.substring(1, index).replace('/', '.'));
-+ return ObjectType.getInstance(signature.substring(1, index).replace('/', '.'));
- }
- }
-
-@@ -278,7 +278,7 @@
- throw new IllegalStateException("Ooops, what primitive type is " + cl);
- }
- } else { // "Real" class
-- return new ObjectType(cl.getName());
-+ return ObjectType.getInstance(cl.getName());
- }
- }
-
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/verifier/structurals/InstConstraintVisitor.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/verifier/structurals/InstConstraintVisitor.java (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/verifier/structurals/InstConstraintVisitor.java (working copy)
-@@ -52,7 +52,7 @@
- */
- public class InstConstraintVisitor extends EmptyVisitor implements org.apache.bcel.generic.Visitor{
-
-- private static ObjectType GENERIC_ARRAY = new ObjectType("org.apache.bcel.verifier.structurals.GenericArray");
-+ private static ObjectType GENERIC_ARRAY = ObjectType.getInstance("org.apache.bcel.verifier.structurals.GenericArray");
-
- /**
- * The constructor. Constructs a new instance of this class.
-@@ -1207,7 +1207,7 @@
-
- if (f.isProtected()){
- ObjectType classtype = o.getClassType(cpg);
-- ObjectType curr = new ObjectType(mg.getClassName());
-+ ObjectType curr = ObjectType.getInstance(mg.getClassName());
-
- if ( classtype.equals(curr) ||
- curr.subclassOf(classtype) ){
-@@ -2531,7 +2531,7 @@
-
- if (f.isProtected()){
- ObjectType classtype = o.getClassType(cpg);
-- ObjectType curr = new ObjectType(mg.getClassName());
-+ ObjectType curr = ObjectType.getInstance(mg.getClassName());
-
- if ( classtype.equals(curr) ||
- curr.subclassOf(classtype) ){
-Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/verifier/structurals/Pass3bVerifier.java
-===================================================================
---- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/verifier/structurals/Pass3bVerifier.java (revision 510968)
-+++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/verifier/structurals/Pass3bVerifier.java (working copy)
-@@ -301,7 +301,7 @@
- Frame f = new Frame(mg.getMaxLocals(),mg.getMaxStack());
- if ( !mg.isStatic() ){
- if (mg.getName().equals(Constants.CONSTRUCTOR_NAME)){
-- Frame._this = new UninitializedObjectType(new ObjectType(jc.getClassName()));
-+ Frame._this = new UninitializedObjectType(ObjectType.getInstance(jc.getClassName()));
- f.getLocals().set(0, Frame._this);
- }
- else{
-@@ -306,7 +306,7 @@
- }
- else{
- Frame._this = null;
-- f.getLocals().set(0, new ObjectType(jc.getClassName()));
-+ f.getLocals().set(0, ObjectType.getInstance(jc.getClassName()));
- }
- }
- Type[] argtypes = mg.getArgumentTypes();
+
+Property changes on: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2
+___________________________________________________________________
+Name: svn:ignore
+ - bin
+velocity.log
+*~
+ + bin
+velocity.log
+*~
+bcel.jar
+
+
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/build.xml
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/build.xml (revision 0)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/build.xml (revision 0)
+@@ -0,0 +1,39 @@
++<project name="bcel" default="jar">
++
++ <property name="src.dir" value="src/java"/>
++ <property name="classes.dir" value="eclipse"/>
++ <property name="jar.dir" value="."/>
++
++ <target name="jar" depends="clean,classes">
++ <!-- Main engine and command line jar file. -->
++ <jar destfile="${jar.dir}/bcel.jar" >
++ <!-- Compiled classes, properties files. -->
++ <fileset dir="${classes.dir}">
++ <include name="**/*.class"/>
++ </fileset>
++ </jar>
++ </target>
++
++ <!-- Compile Java source files, and copy other files (properties,
++ images, html, XSL stylesheets) that need to be part of the codebase. -->
++ <target name="classes">
++ <mkdir dir="${classes.dir}"/>
++ <!-- Compile Java source files. -->
++ <javac srcdir="${src.dir}"
++ destdir="${classes.dir}"
++ source="1.5"
++ target="jsr14"
++ deprecation="on"
++ debug="on">
++ </javac>
++ </target>
++ <!-- Delete generated files. -->
++ <target name="clean">
++ <delete file="${classes.dir}"/>
++ <mkdir dir="${classes.dir}"/>
++ </target>
++
++
++</project>
++
++<!-- vim:set ts=4: -->
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/AbstractLocalVariableTable.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/AbstractLocalVariableTable.java (revision 0)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/AbstractLocalVariableTable.java (revision 0)
+@@ -0,0 +1,187 @@
++/*
++ * Copyright 2000-2004 The Apache Software Foundation
++ *
++ * Licensed 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 colection of local variables in a
++ * method. This attribute is contained in the <em>Code</em> attribute.
++ *
++ * @version $Id$
++ * @author <A HREF="mailto:m.dahm at gmx.de">M. Dahm</A>
++ * @see Code
++ * @see LocalVariable
++ */
++abstract public class AbstractLocalVariableTable extends Attribute {
++
++ private int local_variable_table_length; // Table of local
++ private LocalVariable[] local_variable_table; // variables
++
++
++ /**
++ * Initialize from another object. Note that both objects use the same
++ * references (shallow copy). Use copy() for a physical copy.
++ */
++ public AbstractLocalVariableTable(AbstractLocalVariableTable c) {
++ this(c.getNameIndex(), c.getLength(), c.getLocalVariableTable(), c.getConstantPool());
++ }
++
++
++ /**
++ * @param name_index Index in constant pool to `LocalVariableTable'
++ * @param length Content length in bytes
++ * @param local_variable_table Table of local variables
++ * @param constant_pool Array of constants
++ */
++ public AbstractLocalVariableTable(int name_index, int length, LocalVariable[] local_variable_table,
++ ConstantPool constant_pool) {
++ super(Constants.ATTR_LOCAL_VARIABLE_TABLE, name_index, length, constant_pool);
++ setLocalVariableTable(local_variable_table);
++ }
++
++
++ /**
++ * Construct object from file stream.
++ * @param name_index Index in constant pool
++ * @param length Content length in bytes
++ * @param file Input stream
++ * @param constant_pool Array of constants
++ * @throws IOException
++ */
++ AbstractLocalVariableTable(int name_index, int length, DataInputStream file, ConstantPool constant_pool)
++ throws IOException {
++ this(name_index, length, (LocalVariable[]) null, constant_pool);
++ local_variable_table_length = (file.readUnsignedShort());
++ local_variable_table = new LocalVariable[local_variable_table_length];
++ for (int i = 0; i < local_variable_table_length; i++) {
++ local_variable_table[i] = new LocalVariable(file, constant_pool);
++ }
++ }
++
++
++
++
++ /**
++ * Dump local variable table attribute to file stream in binary format.
++ *
++ * @param file Output file stream
++ * @throws IOException
++ */
++ public final void dump( DataOutputStream file ) throws IOException {
++ super.dump(file);
++ file.writeShort(local_variable_table_length);
++ for (int i = 0; i < local_variable_table_length; i++) {
++ local_variable_table[i].dump(file);
++ }
++ }
++
++
++ /**
++ * @return Array of local variables of method.
++ */
++ public final LocalVariable[] getLocalVariableTable() {
++ return local_variable_table;
++ }
++
++
++ /**
++ * @return first matching variable using index
++ *
++ * @param index the variable slot
++ *
++ * @return the first LocalVariable that matches the slot or null if not found
++ *
++ * @deprecated since 5.2 because multiple variables can share the
++ * same slot, use getLocalVariable(int index, int pc) instead.
++ */
++ public final LocalVariable getLocalVariable( int index ) {
++ for (int i = 0; i < local_variable_table_length; i++) {
++ if (local_variable_table[i].getIndex() == index) {
++ return local_variable_table[i];
++ }
++ }
++ return null;
++ }
++
++
++ /**
++ * @return matching variable using index when variable is used at supplied pc
++ *
++ * @param index the variable slot
++ * @param pc the current pc that this variable is alive
++ *
++ * @return the LocalVariable that matches or null if not found
++ */
++ public final LocalVariable getLocalVariable( int index, int pc ) {
++ for (int i = 0; i < local_variable_table_length; i++) {
++ if (local_variable_table[i].getIndex() == index) {
++ int start_pc = local_variable_table[i].getStartPC();
++ int end_pc = start_pc + local_variable_table[i].getLength();
++ if ((pc >= start_pc) && (pc < end_pc)) {
++ return local_variable_table[i];
++ }
++ }
++ }
++ return null;
++ }
++
++
++ public final void setLocalVariableTable( LocalVariable[] local_variable_table ) {
++ this.local_variable_table = local_variable_table;
++ local_variable_table_length = (local_variable_table == null)
++ ? 0
++ : local_variable_table.length;
++ }
++
++
++ /**
++ * @return String representation.
++ */
++ public final String toString() {
++ StringBuffer buf = new StringBuffer("");
++ for (int i = 0; i < local_variable_table_length; i++) {
++ buf.append(local_variable_table[i].toString());
++ if (i < local_variable_table_length - 1) {
++ buf.append('\n');
++ }
++ }
++ return buf.toString();
++ }
++
++
++ /**
++ * @return deep copy of this attribute
++ */
++ public Attribute copy( ConstantPool _constant_pool ) {
++ AbstractLocalVariableTable c = (AbstractLocalVariableTable) clone();
++ c.local_variable_table = new LocalVariable[local_variable_table_length];
++ for (int i = 0; i < local_variable_table_length; i++) {
++ c.local_variable_table[i] = local_variable_table[i].copy();
++ }
++ c.constant_pool = _constant_pool;
++ return c;
++ }
++
++
++ public final int getTableLength() {
++ return local_variable_table_length;
++ }
++}
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/Attribute.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/Attribute.java (revision 510968)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/Attribute.java (working copy)
+@@ -159,7 +159,9 @@
+ return new LineNumberTable(name_index, length, file, constant_pool);
+ case Constants.ATTR_LOCAL_VARIABLE_TABLE:
+ return new LocalVariableTable(name_index, length, file, constant_pool);
+- case Constants.ATTR_INNER_CLASSES:
++ case Constants.ATTR_LOCAL_VARIABLE_TYPE_TABLE:
++ return new LocalVariableTypeTable(name_index, length, file, constant_pool);
++ case Constants.ATTR_INNER_CLASSES:
+ return new InnerClasses(name_index, length, file, constant_pool);
+ case Constants.ATTR_SYNTHETIC:
+ return new Synthetic(name_index, length, file, constant_pool);
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/Constant.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/Constant.java (revision 510968)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/Constant.java (working copy)
+@@ -141,7 +141,7 @@
+ case Constants.CONSTANT_NameAndType:
+ return new ConstantNameAndType(file);
+ case Constants.CONSTANT_Utf8:
+- return new ConstantUtf8(file);
++ return ConstantUtf8.getInstance(file);
+ default:
+ throw new ClassFormatException("Invalid byte tag in constant pool: " + b);
+ }
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/ConstantUtf8.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/ConstantUtf8.java (revision 510968)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/ConstantUtf8.java (working copy)
+@@ -19,7 +19,12 @@
+ import java.io.DataInputStream;
+ import java.io.DataOutputStream;
+ import java.io.IOException;
++import java.util.HashMap;
++import java.util.LinkedHashMap;
++import java.util.Map;
++
+ import org.apache.bcel.Constants;
++import org.apache.bcel.generic.ObjectType;
+
+ /**
+ * This class is derived from the abstract
+@@ -32,9 +37,60 @@
+ */
+ public final class ConstantUtf8 extends Constant {
+
+- private String bytes;
++ private final String bytes;
++
++ private static final int MAX_CACHE_ENTRIES = 20000;
++ private static final int INITIAL_CACHE_CAPACITY = (int)(MAX_CACHE_ENTRIES/0.75);
++ private static HashMap<String, ConstantUtf8> cache;
++ private static int considered = 0;
++ private static int hits = 0;
++ private static int skipped = 0;
++ private static int created = 0;
++ final static boolean BCEL_STATISTICS = Boolean.getBoolean("bcel.statistics");
++ final static boolean BCEL_DONT_CACHE = Boolean.getBoolean("bcel.dontCache");
++
++ static {
++ if (BCEL_STATISTICS)
++ Runtime.getRuntime().addShutdownHook(new Thread() {
++ public void run() {
++ System.err.println("Cache hit " + hits + "/" + considered +", "
++ + skipped + " skipped");
++ System.err.println("Total of " + created + " ConstantUtf8 objects created");
++ }
++ });
++ }
++ public static synchronized ConstantUtf8 getCachedInstance(String s) {
++ if (BCEL_DONT_CACHE || s.length() > 200) {
++ skipped++;
++ return new ConstantUtf8(s);
++ }
++ considered++;
++ if (cache == null) {
++ cache = new LinkedHashMap<String, ConstantUtf8>(INITIAL_CACHE_CAPACITY, 0.75f, true) {
++
++ protected boolean removeEldestEntry(Map.Entry eldest) {
++ return size() > MAX_CACHE_ENTRIES;
++ }
++
++ };
++ }
++ ConstantUtf8 result = cache.get(s);
++ if (result != null) {
++ hits++;
++ return result;
++ }
++ result = new ConstantUtf8(s);
++ cache.put(s, result);
++ return result;
++ }
+
++ public static ConstantUtf8 getInstance(String s) {
++ return getCachedInstance(s);
++ }
+
++ public static ConstantUtf8 getInstance (DataInputStream file) throws IOException {
++ return getInstance(file.readUTF());
++ }
+ /**
+ * Initialize from another object.
+ */
+@@ -52,6 +108,7 @@
+ ConstantUtf8(DataInputStream file) throws IOException {
+ super(Constants.CONSTANT_Utf8);
+ bytes = file.readUTF();
++ created++;
+ }
+
+
+@@ -64,6 +121,7 @@
+ throw new IllegalArgumentException("bytes must not be null!");
+ }
+ this.bytes = bytes;
++ created++;
+ }
+
+
+@@ -101,9 +159,10 @@
+
+ /**
+ * @param bytes the raw bytes of this Utf-8
++ * @deprecated
+ */
+ public final void setBytes( String bytes ) {
+- this.bytes = bytes;
++ throw new UnsupportedOperationException();
+ }
+
+
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/DescendingVisitor.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/DescendingVisitor.java (revision 510968)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/DescendingVisitor.java (working copy)
+@@ -185,6 +185,9 @@
+ }
+ stack.pop();
+ }
++ public void visitLocalVariableTypeTable( LocalVariableTypeTable table ) {
++
++ }
+
+
+ public void visitStackMap( StackMap table ) {
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/EmptyVisitor.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/EmptyVisitor.java (revision 510968)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/EmptyVisitor.java (working copy)
+@@ -158,4 +158,10 @@
+
+ public void visitStackMapEntry( StackMapEntry obj ) {
+ }
++
++
++ public void visitLocalVariableTypeTable(LocalVariableTypeTable obj) {
++ // TODO Auto-generated method stub
++
++ }
+ }
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/LineNumber.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/LineNumber.java (revision 510968)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/LineNumber.java (working copy)
+@@ -32,8 +32,8 @@
+ */
+ public final class LineNumber implements Cloneable, Node, Serializable {
+
+- private int start_pc; // Program Counter (PC) corresponds to line
+- private int line_number; // number in source file
++ private short start_pc; // Program Counter (PC) corresponds to line
++ private short line_number; // number in source file
+
+
+ /**
+@@ -59,8 +59,8 @@
+ * @param line_number line number in source file
+ */
+ public LineNumber(int start_pc, int line_number) {
+- this.start_pc = start_pc;
+- this.line_number = line_number;
++ this.start_pc = (short) start_pc;
++ this.line_number = (short)line_number;
+ }
+
+
+@@ -92,7 +92,7 @@
+ * @return Corresponding source line
+ */
+ public final int getLineNumber() {
+- return line_number;
++ return 0xffff & line_number;
+ }
+
+
+@@ -100,7 +100,7 @@
+ * @return PC in code
+ */
+ public final int getStartPC() {
+- return start_pc;
++ return 0xffff & start_pc;
+ }
+
+
+@@ -108,7 +108,7 @@
+ * @param line_number the source line number
+ */
+ public final void setLineNumber( int line_number ) {
+- this.line_number = line_number;
++ this.line_number = (short) line_number;
+ }
+
+
+@@ -116,7 +116,7 @@
+ * @param start_pc the pc for this line number
+ */
+ public final void setStartPC( int start_pc ) {
+- this.start_pc = start_pc;
++ this.start_pc = (short) start_pc;
+ }
+
+
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/LocalVariableTable.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/LocalVariableTable.java (revision 510968)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/LocalVariableTable.java (working copy)
+@@ -30,11 +30,7 @@
+ * @see Code
+ * @see LocalVariable
+ */
+-public class LocalVariableTable extends Attribute {
+-
+- private int local_variable_table_length; // Table of local
+- private LocalVariable[] local_variable_table; // variables
+-
++public class LocalVariableTable extends AbstractLocalVariableTable {
+
+ /**
+ * Initialize from another object. Note that both objects use the same
+@@ -53,8 +49,7 @@
+ */
+ public LocalVariableTable(int name_index, int length, LocalVariable[] local_variable_table,
+ ConstantPool constant_pool) {
+- super(Constants.ATTR_LOCAL_VARIABLE_TABLE, name_index, length, constant_pool);
+- setLocalVariableTable(local_variable_table);
++ super(name_index,length, local_variable_table, constant_pool);
+ }
+
+
+@@ -68,12 +63,7 @@
+ */
+ LocalVariableTable(int name_index, int length, DataInputStream file, ConstantPool constant_pool)
+ throws IOException {
+- this(name_index, length, (LocalVariable[]) null, constant_pool);
+- local_variable_table_length = (file.readUnsignedShort());
+- local_variable_table = new LocalVariable[local_variable_table_length];
+- for (int i = 0; i < local_variable_table_length; i++) {
+- local_variable_table[i] = new LocalVariable(file, constant_pool);
+- }
++ super(name_index,length, file, constant_pool);
+ }
+
+
+@@ -87,111 +77,4 @@
+ public void accept( Visitor v ) {
+ v.visitLocalVariableTable(this);
+ }
+-
+-
+- /**
+- * Dump local variable table attribute to file stream in binary format.
+- *
+- * @param file Output file stream
+- * @throws IOException
+- */
+- public final void dump( DataOutputStream file ) throws IOException {
+- super.dump(file);
+- file.writeShort(local_variable_table_length);
+- for (int i = 0; i < local_variable_table_length; i++) {
+- local_variable_table[i].dump(file);
+- }
+- }
+-
+-
+- /**
+- * @return Array of local variables of method.
+- */
+- public final LocalVariable[] getLocalVariableTable() {
+- return local_variable_table;
+- }
+-
+-
+- /**
+- * @return first matching variable using index
+- *
+- * @param index the variable slot
+- *
+- * @return the first LocalVariable that matches the slot or null if not found
+- *
+- * @deprecated since 5.2 because multiple variables can share the
+- * same slot, use getLocalVariable(int index, int pc) instead.
+- */
+- public final LocalVariable getLocalVariable( int index ) {
+- for (int i = 0; i < local_variable_table_length; i++) {
+- if (local_variable_table[i].getIndex() == index) {
+- return local_variable_table[i];
+- }
+- }
+- return null;
+- }
+-
+-
+- /**
+- * @return matching variable using index when variable is used at supplied pc
+- *
+- * @param index the variable slot
+- * @param pc the current pc that this variable is alive
+- *
+- * @return the LocalVariable that matches or null if not found
+- */
+- public final LocalVariable getLocalVariable( int index, int pc ) {
+- for (int i = 0; i < local_variable_table_length; i++) {
+- if (local_variable_table[i].getIndex() == index) {
+- int start_pc = local_variable_table[i].getStartPC();
+- int end_pc = start_pc + local_variable_table[i].getLength();
+- if ((pc >= start_pc) && (pc < end_pc)) {
+- return local_variable_table[i];
+- }
+- }
+- }
+- return null;
+- }
+-
+-
+- public final void setLocalVariableTable( LocalVariable[] local_variable_table ) {
+- this.local_variable_table = local_variable_table;
+- local_variable_table_length = (local_variable_table == null)
+- ? 0
+- : local_variable_table.length;
+- }
+-
+-
+- /**
+- * @return String representation.
+- */
+- public final String toString() {
+- StringBuffer buf = new StringBuffer("");
+- for (int i = 0; i < local_variable_table_length; i++) {
+- buf.append(local_variable_table[i].toString());
+- if (i < local_variable_table_length - 1) {
+- buf.append('\n');
+- }
+- }
+- return buf.toString();
+- }
+-
+-
+- /**
+- * @return deep copy of this attribute
+- */
+- public Attribute copy( ConstantPool _constant_pool ) {
+- LocalVariableTable c = (LocalVariableTable) clone();
+- c.local_variable_table = new LocalVariable[local_variable_table_length];
+- for (int i = 0; i < local_variable_table_length; i++) {
+- c.local_variable_table[i] = local_variable_table[i].copy();
+- }
+- c.constant_pool = _constant_pool;
+- return c;
+- }
+-
+-
+- public final int getTableLength() {
+- return local_variable_table_length;
+- }
+ }
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/LocalVariableTypeTable.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/LocalVariableTypeTable.java (revision 0)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/LocalVariableTypeTable.java (revision 0)
+@@ -0,0 +1,22 @@
++package org.apache.bcel.classfile;
++
++import java.io.DataInputStream;
++import java.io.IOException;
++
++public class LocalVariableTypeTable extends AbstractLocalVariableTable {
++
++ public LocalVariableTypeTable(int name_index, int length, DataInputStream file, ConstantPool constant_pool) throws IOException {
++ super(name_index, length, file, constant_pool);
++ }
++
++ /**
++ * 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,
++ * fields, attributes, etc. spawns a tree of objects.
++ *
++ * @param v Visitor object
++ */
++ public void accept( Visitor v ) {
++ v.visitLocalVariableTypeTable(this);
++ }
++}
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/Visitor.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/Visitor.java (revision 510968)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/classfile/Visitor.java (working copy)
+@@ -103,6 +103,7 @@
+
+
+ public void visitLocalVariableTable( LocalVariableTable obj );
++ public void visitLocalVariableTypeTable( LocalVariableTypeTable obj );
+
+
+ public void visitMethod( Method obj );
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/Constants.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/Constants.java (revision 510968)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/Constants.java (working copy)
+@@ -729,13 +729,16 @@
+ public static final byte ATTR_PMG = 9;
+ public static final byte ATTR_SIGNATURE = 10;
+ public static final byte ATTR_STACK_MAP = 11;
+- public static final byte ATTR_RUNTIMEVISIBLE_ANNOTATIONS = 12;
+- public static final byte ATTR_RUNTIMEINVISIBLE_ANNOTATIONS = 13;
+- public static final byte ATTR_RUNTIMEVISIBLE_PARAMETER_ANNOTATIONS = 14;
+- public static final byte ATTR_RUNTIMEINVISIBLE_PARAMETER_ANNOTATIONS = 15;
+- public static final byte ATTR_ANNOTATION_DEFAULT = 16;
++ public static final byte ATTR_LOCAL_VARIABLE_TYPE_TABLE = 12;
++ public static final byte ATTR_RUNTIMEVISIBLE_ANNOTATIONS = 13;
++ public static final byte ATTR_RUNTIMEINVISIBLE_ANNOTATIONS = 14;
++ public static final byte ATTR_RUNTIMEVISIBLE_PARAMETER_ANNOTATIONS = 15;
++ public static final byte ATTR_RUNTIMEINVISIBLE_PARAMETER_ANNOTATIONS = 16;
++ public static final byte ATTR_ANNOTATION_DEFAULT = 17;
++
++
+
+- public static final short KNOWN_ATTRIBUTES = 12;//should be 17
++ public static final short KNOWN_ATTRIBUTES = 13;//should be 17
+
+ public static final String[] ATTRIBUTE_NAMES = {
+ "SourceFile", "ConstantValue", "Code", "Exceptions",
+@@ -741,7 +744,7 @@
+ "SourceFile", "ConstantValue", "Code", "Exceptions",
+ "LineNumberTable", "LocalVariableTable",
+ "InnerClasses", "Synthetic", "Deprecated",
+- "PMGClass", "Signature", "StackMap",
++ "PMGClass", "Signature", "StackMap", "LocalVariableTypeTable",
+ "RuntimeVisibleAnnotations", "RuntimeInvisibleAnnotations",
+ "RuntimeVisibleParameterAnnotations", "RuntimeInvisibleParameterAnnotations",
+ "AnnotationDefault"
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/ArrayType.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/ArrayType.java (revision 510968)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/ArrayType.java (working copy)
+@@ -46,7 +46,7 @@
+ * @param class_name complete name of class (java.lang.String, e.g.)
+ */
+ public ArrayType(String class_name, int dimensions) {
+- this(new ObjectType(class_name), dimensions);
++ this(ObjectType.getInstance(class_name), dimensions);
+ }
+
+
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/FieldGen.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/FieldGen.java (revision 510968)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/FieldGen.java (working copy)
+@@ -107,7 +107,7 @@
+ * by the JVM automatically.
+ */
+ public void setInitValue( String str ) {
+- checkType(new ObjectType("java.lang.String"));
++ checkType( ObjectType.getInstance("java.lang.String"));
+ if (str != null) {
+ value = str;
+ }
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/FieldOrMethod.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/FieldOrMethod.java (revision 510968)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/FieldOrMethod.java (working copy)
+@@ -94,7 +94,7 @@
+ * getReferenceType() instead.
+ */
+ public ObjectType getClassType( ConstantPoolGen cpg ) {
+- return new ObjectType(getClassName(cpg));
++ return ObjectType.getInstance(getClassName(cpg));
+ }
+
+
+@@ -115,7 +115,7 @@
+ return (ArrayType) Type.getType(className);
+ } else {
+ className = className.replace('/', '.');
+- return new ObjectType(className);
++ return ObjectType.getInstance(className);
+ }
+ }
+
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/InstructionFactory.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/InstructionFactory.java (revision 510968)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/InstructionFactory.java (working copy)
+@@ -616,7 +616,7 @@
+
+
+ public NEW createNew( String s ) {
+- return createNew(new ObjectType(s));
++ return createNew(ObjectType.getInstance(s));
+ }
+
+
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/MethodGen.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/MethodGen.java (revision 510968)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/MethodGen.java (working copy)
+@@ -122,7 +122,7 @@
+ /* Add local variables, namely the implicit `this' and the arguments
+ */
+ if (!isStatic() && (class_name != null)) { // Instance method -> `this' is local var 0
+- addLocalVariable("this", new ObjectType(class_name), start, end);
++ addLocalVariable("this", ObjectType.getInstance(class_name), start, end);
+ }
+ }
+ if (arg_types != null) {
+@@ -183,7 +183,7 @@
+ if (type > 0) {
+ String cen = m.getConstantPool().getConstantString(type,
+ Constants.CONSTANT_Class);
+- c_type = new ObjectType(cen);
++ c_type = ObjectType.getInstance(cen);
+ }
+ int end_pc = ce.getEndPC();
+ int length = m.getCode().getCode().length;
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/ObjectType.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/ObjectType.java (revision 510968)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/ObjectType.java (working copy)
+@@ -16,6 +16,10 @@
+ */
+ package org.apache.bcel.generic;
+
++import java.util.HashMap;
++import java.util.LinkedHashMap;
++import java.util.Map;
++
+ import org.apache.bcel.Constants;
+ import org.apache.bcel.Repository;
+ import org.apache.bcel.classfile.JavaClass;
+@@ -20,6 +24,7 @@
+ import org.apache.bcel.Repository;
+ import org.apache.bcel.classfile.JavaClass;
+
++
+ /**
+ * Denotes reference such as java.lang.String.
+ *
+@@ -28,8 +33,27 @@
+ */
+ public class ObjectType extends ReferenceType {
+
+- private String class_name; // Class name of type
++ private static final int MAX_CACHE_ENTRIES = 200;
++ private static final int INITIAL_CACHE_CAPACITY = (int)(MAX_CACHE_ENTRIES/0.75);
++ private static HashMap<String, ObjectType> cache;
++ public synchronized static ObjectType getInstance(String class_name) {
++ if (cache == null)
++ cache = new LinkedHashMap<String, ObjectType>(INITIAL_CACHE_CAPACITY, 0.75f, true) {
++
++
++ protected boolean removeEldestEntry(Map.Entry eldest) {
++ return size() > MAX_CACHE_ENTRIES;
++ }
++
++ };
++ ObjectType result = cache.get(class_name);
++ if (result != null) return result;
++ result = new ObjectType(class_name);
++ cache.put(class_name, result);
++ return result;
++ }
+
++ final private String class_name; // Class name of type
+
+ /**
+ * @param class_name fully qualified class name, e.g. java.lang.String
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/ReferenceType.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/ReferenceType.java (revision 510968)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/ReferenceType.java (working copy)
+@@ -162,7 +162,7 @@
+ // 'java.io.Serializable'"
+ if ((T instanceof ObjectType) && (((ObjectType) T).referencesInterfaceExact())) {
+ for (int ii = 0; ii < Constants.INTERFACES_IMPLEMENTED_BY_ARRAYS.length; ii++) {
+- if (T.equals(new ObjectType(Constants.INTERFACES_IMPLEMENTED_BY_ARRAYS[ii]))) {
++ if (T.equals(ObjectType.getInstance(Constants.INTERFACES_IMPLEMENTED_BY_ARRAYS[ii]))) {
+ return true;
+ }
+ }
+@@ -248,7 +248,7 @@
+ for (int i = 0; i < t_sups.length; i++) {
+ for (int j = 0; j < this_sups.length; j++) {
+ if (this_sups[j].equals(t_sups[i])) {
+- return new ObjectType(this_sups[j].getClassName());
++ return ObjectType.getInstance(this_sups[j].getClassName());
+ }
+ }
+ }
+@@ -320,7 +320,7 @@
+ for (int i = 0; i < t_sups.length; i++) {
+ for (int j = 0; j < this_sups.length; j++) {
+ if (this_sups[j].equals(t_sups[i])) {
+- return new ObjectType(this_sups[j].getClassName());
++ return ObjectType.getInstance(this_sups[j].getClassName());
+ }
+ }
+ }
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/Type.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/Type.java (revision 510968)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/generic/Type.java (working copy)
+@@ -31,7 +31,7 @@
+ */
+ public abstract class Type implements java.io.Serializable {
+
+- protected byte type;
++ final protected byte type;
+ protected String signature; // signature for the type
+ /** Predefined constants
+ */
+@@ -44,11 +44,11 @@
+ public static final BasicType DOUBLE = new BasicType(Constants.T_DOUBLE);
+ public static final BasicType FLOAT = new BasicType(Constants.T_FLOAT);
+ public static final BasicType CHAR = new BasicType(Constants.T_CHAR);
+- public static final ObjectType OBJECT = new ObjectType("java.lang.Object");
+- public static final ObjectType CLASS = new ObjectType("java.lang.Class");
+- 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 ObjectType OBJECT = ObjectType.getInstance("java.lang.Object");
++ public static final ObjectType CLASS = ObjectType.getInstance("java.lang.Class");
++ public static final ObjectType STRING = ObjectType.getInstance("java.lang.String");
++ public static final ObjectType STRINGBUFFER = ObjectType.getInstance("java.lang.StringBuffer");
++ public static final ObjectType THROWABLE = ObjectType.getInstance("java.lang.Throwable");
+ public static final Type[] NO_ARGS = new Type[0];
+ public static final ReferenceType NULL = new ReferenceType() {
+ };
+@@ -190,7 +190,7 @@
+ }
+ //corrected concurrent private static field acess
+ wrap(consumed_chars, index + 1); // "Lblabla;" `L' and `;' are removed
+- return new ObjectType(signature.substring(1, index).replace('/', '.'));
++ return ObjectType.getInstance(signature.substring(1, index).replace('/', '.'));
+ }
+ }
+
+@@ -278,7 +278,7 @@
+ throw new IllegalStateException("Ooops, what primitive type is " + cl);
+ }
+ } else { // "Real" class
+- return new ObjectType(cl.getName());
++ return ObjectType.getInstance(cl.getName());
+ }
+ }
+
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/verifier/structurals/InstConstraintVisitor.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/verifier/structurals/InstConstraintVisitor.java (revision 510968)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/verifier/structurals/InstConstraintVisitor.java (working copy)
+@@ -52,7 +52,7 @@
+ */
+ public class InstConstraintVisitor extends EmptyVisitor implements org.apache.bcel.generic.Visitor{
+
+- private static ObjectType GENERIC_ARRAY = new ObjectType("org.apache.bcel.verifier.structurals.GenericArray");
++ private static ObjectType GENERIC_ARRAY = ObjectType.getInstance("org.apache.bcel.verifier.structurals.GenericArray");
+
+ /**
+ * The constructor. Constructs a new instance of this class.
+@@ -1207,7 +1207,7 @@
+
+ if (f.isProtected()){
+ ObjectType classtype = o.getClassType(cpg);
+- ObjectType curr = new ObjectType(mg.getClassName());
++ ObjectType curr = ObjectType.getInstance(mg.getClassName());
+
+ if ( classtype.equals(curr) ||
+ curr.subclassOf(classtype) ){
+@@ -2531,7 +2531,7 @@
+
+ if (f.isProtected()){
+ ObjectType classtype = o.getClassType(cpg);
+- ObjectType curr = new ObjectType(mg.getClassName());
++ ObjectType curr = ObjectType.getInstance(mg.getClassName());
+
+ if ( classtype.equals(curr) ||
+ curr.subclassOf(classtype) ){
+Index: /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/verifier/structurals/Pass3bVerifier.java
+===================================================================
+--- /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/verifier/structurals/Pass3bVerifier.java (revision 510968)
++++ /Users/pugh/Documents/eclipse/workspace/jakarta-bcel-5.2/src/java/org/apache/bcel/verifier/structurals/Pass3bVerifier.java (working copy)
+@@ -301,7 +301,7 @@
+ Frame f = new Frame(mg.getMaxLocals(),mg.getMaxStack());
+ if ( !mg.isStatic() ){
+ if (mg.getName().equals(Constants.CONSTRUCTOR_NAME)){
+- Frame._this = new UninitializedObjectType(new ObjectType(jc.getClassName()));
++ Frame._this = new UninitializedObjectType(ObjectType.getInstance(jc.getClassName()));
+ f.getLocals().set(0, Frame._this);
+ }
+ else{
+@@ -306,7 +306,7 @@
+ }
+ else{
+ Frame._this = null;
+- f.getLocals().set(0, new ObjectType(jc.getClassName()));
++ f.getLocals().set(0, ObjectType.getInstance(jc.getClassName()));
+ }
+ }
+ Type[] argtypes = mg.getArgumentTypes();
Index: findbugs-bcel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/findbugs-bcel/F-10/findbugs-bcel.spec,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- findbugs-bcel.spec 29 Jan 2009 03:59:00 -0000 1.1
+++ findbugs-bcel.spec 18 Mar 2009 03:11:23 -0000 1.2
@@ -5,12 +5,12 @@
# the javadoc package is necessary to show the changes in the API created by
# the findbug team's work.
-%define findbugsver 1.3.7
+%define findbugsver 1.3.8
%define with_gcj %{!?_without_gcj:1}%{?_without_gcj:0}
Name: findbugs-bcel
Version: 5.2
-Release: %{findbugsver}%{?dist}.1
+Release: %{findbugsver}%{?dist}
Summary: Byte Code Engineering Library with findbugs extensions
Group: Development/Libraries/Java
@@ -49,17 +49,7 @@
%prep
%setup -q -n bcel-%{version}
-
-# The -f option is necessary because the findbugs patch applies to two files
-# that are present only in the bcel binary distribution, not in the source
-# distribution. The 'true' invocation is to mask the exit value of 1 that
-# patch gives when it skips those two files.
-%{__patch} -f -p7 -s < %{SOURCE1} || true
-
-# The findbugs patch introduces a gratuitous import of a com.sun package.
-%{__sed} -i \
- -e '/import com.sun.org.apache.xerces.internal.impl.io.UTF8Reader/D' \
- src/java/org/apache/bcel/classfile/ConstantUtf8.java
+%{__patch} -p7 -s < %{SOURCE1}
%build
# The ant and maven builds both try to download unneeded jars
@@ -119,6 +109,10 @@
%{_javadocdir}/findbugs-bcel*
%changelog
+* Tue Mar 17 2009 Jerry James <loganjerry at gmail.com> - 5.2-1.3.8
+- Update to the findbugs 1.3.8 version of the BCEL patch
+- The BCEL patch now applies cleanly, so drop workaround code
+
* Tue Jan 13 2009 Jerry James <loganjerry at gmail.com> - 5.2-1.3.7.1
- Add '-source 1.5' to the javac and javadoc invocations
More information about the fedora-extras-commits
mailing list