Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.2:Ports
findbugs-bcel
bcel.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File bcel.diff of Package findbugs-bcel
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: bcel.diff,v 1.2 2009/03/18 03:11:23 jjames Exp $ + * @author <A HREF="mailto:m.dahm@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();
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor