Author: sebb Date: Fri Sep 11 10:34:45 2015 New Revision: 1702419 URL: http://svn.apache.org/r1702419 Log: Gradually working towards restoring binary compatibility Restore deprecated methods for now
Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/ConstantUtf8.java commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/FieldOrMethod.java commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/LocalVariableTable.java commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/StackMapEntry.java commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/FieldOrMethod.java commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/Instruction.java commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/ObjectType.java commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/ReferenceType.java commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/util/ClassPath.java commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/GraphicalVerifier.java commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/VerifierFactoryListModel.java Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/ConstantUtf8.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/ConstantUtf8.java?rev=1702419&r1=1702418&r2=1702419&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/ConstantUtf8.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/ConstantUtf8.java Fri Sep 11 10:34:45 2015 @@ -192,6 +192,16 @@ public final class ConstantUtf8 extends /** + * @param bytes the raw bytes of this Utf-8 + * @deprecated + */ + @java.lang.Deprecated + public final void setBytes( String bytes ) { + throw new UnsupportedOperationException(); + } + + + /** * @return String representation */ @Override Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/FieldOrMethod.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/FieldOrMethod.java?rev=1702419&r1=1702418&r2=1702419&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/FieldOrMethod.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/FieldOrMethod.java Fri Sep 11 10:34:45 2015 @@ -18,6 +18,7 @@ package org.apache.commons.bcel6.classfile; import java.io.DataInput; +import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; @@ -48,6 +49,12 @@ public abstract class FieldOrMethod exte @java.lang.Deprecated protected Attribute[] attributes; // Collection of attributes + /** + * @deprecated (since 6.0) will be removed (not needed) + */ + @java.lang.Deprecated + protected int attributes_count; // No. of attributes + // @since 6.0 private AnnotationEntry[] annotationEntries; // annotations defined on the field or method @@ -79,6 +86,18 @@ public abstract class FieldOrMethod exte * @param file Input stream * @throws IOException * @throws ClassFormatException + * @deprecated Use {@link #FieldOrMethod(java.io.DataInput, ConstantPool)} instead. + */ + protected FieldOrMethod(DataInputStream file, ConstantPool constant_pool) throws IOException, + ClassFormatException { + this((DataInput) file, constant_pool); + } + + /** + * Construct object from file stream. + * @param file Input stream + * @throws IOException + * @throws ClassFormatException */ protected FieldOrMethod(DataInput file, ConstantPool constant_pool) throws IOException, ClassFormatException { this(file.readUnsignedShort(), file.readUnsignedShort(), file.readUnsignedShort(), null, @@ -88,6 +107,7 @@ public abstract class FieldOrMethod exte for (int i = 0; i < attributes_count; i++) { attributes[i] = Attribute.readAttribute(file, constant_pool); } + this.attributes_count = attributes_count; // init deprecated field } @@ -138,6 +158,7 @@ public abstract class FieldOrMethod exte */ public final void setAttributes( Attribute[] attributes ) { this.attributes = attributes; + this.attributes_count = attributes.length; // init deprecated field } @@ -223,6 +244,7 @@ public abstract class FieldOrMethod exte c.constant_pool = constant_pool; c.attributes = new Attribute[attributes.length]; + c.attributes_count = attributes_count; // init deprecated field for (int i = 0; i < attributes.length; i++) { c.attributes[i] = attributes[i].copy(constant_pool); Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/LocalVariableTable.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/LocalVariableTable.java?rev=1702419&r1=1702418&r2=1702419&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/LocalVariableTable.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/LocalVariableTable.java Fri Sep 11 10:34:45 2015 @@ -117,6 +117,26 @@ public class LocalVariableTable extends /** * * @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. + */ + @java.lang.Deprecated + public final LocalVariable getLocalVariable( int index ) { + for (LocalVariable variable : local_variable_table) { + if (variable.getIndex() == index) { + return variable; + } + } + return null; + } + + + /** + * + * @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 Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/StackMapEntry.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/StackMapEntry.java?rev=1702419&r1=1702418&r2=1702419&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/StackMapEntry.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/classfile/StackMapEntry.java Fri Sep 11 10:34:45 2015 @@ -334,6 +334,11 @@ public final class StackMapEntry impleme } + @java.lang.Deprecated + public void setNumberOfLocals( int n ) { // TODO unused + } + + public int getNumberOfLocals() { return types_of_locals.length; } @@ -349,6 +354,11 @@ public final class StackMapEntry impleme } + @java.lang.Deprecated + public void setNumberOfStackItems( int n ) { // TODO unused + } + + public int getNumberOfStackItems() { return types_of_stack_items.length; } Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/FieldOrMethod.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/FieldOrMethod.java?rev=1702419&r1=1702418&r2=1702419&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/FieldOrMethod.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/FieldOrMethod.java Fri Sep 11 10:34:45 2015 @@ -91,6 +91,17 @@ public abstract class FieldOrMethod exte } + /** @return type of the referenced class/interface + * @deprecated If the instruction references an array class, + * the ObjectType returned will be invalid. Use + * getReferenceType() instead. + */ + @Deprecated + public ObjectType getClassType( ConstantPoolGen cpg ) { + return ObjectType.getInstance(getClassName(cpg)); + } + + /** * Return the reference type representing the class, interface, * or array class referenced by the instruction. Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/Instruction.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/Instruction.java?rev=1702419&r1=1702418&r2=1702419&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/Instruction.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/Instruction.java Fri Sep 11 10:34:45 2015 @@ -549,6 +549,27 @@ public abstract class Instruction implem public abstract void accept( Visitor v ); + /** Get Comparator object used in the equals() method to determine + * equality of instructions. + * + * @return currently used comparator for equals() + * @deprecated use the built in comparator, or wrap this class in another object that implements these methods + */ + @Deprecated + public static InstructionComparator getComparator() { + return cmp; + } + + + /** Set comparator to be used for equals(). + * @deprecated use the built in comparator, or wrap this class in another object that implements these methods + */ + @Deprecated + public static void setComparator( InstructionComparator c ) { + cmp = c; + } + + /** Check for equality, delegated to comparator * @return true if that is an Instruction and has the same opcode */ Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/ObjectType.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/ObjectType.java?rev=1702419&r1=1702418&r2=1702419&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/ObjectType.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/ObjectType.java Fri Sep 11 10:34:45 2015 @@ -72,6 +72,42 @@ public class ObjectType extends Referenc /** + * If "this" doesn't reference a class, it references an interface + * or a non-existant entity. + * @deprecated (since 6.0) this method returns an inaccurate result + * if the class or interface referenced cannot + * be found: use referencesClassExact() instead + */ + @Deprecated + public boolean referencesClass() { + try { + JavaClass jc = Repository.lookupClass(class_name); + return jc.isClass(); + } catch (ClassNotFoundException e) { + return false; + } + } + + + /** + * If "this" doesn't reference an interface, it references a class + * or a non-existant entity. + * @deprecated (since 6.0) this method returns an inaccurate result + * if the class or interface referenced cannot + * be found: use referencesInterfaceExact() instead + */ + @Deprecated + public boolean referencesInterface() { + try { + JavaClass jc = Repository.lookupClass(class_name); + return !jc.isClass(); + } catch (ClassNotFoundException e) { + return false; + } + } + + + /** * Return true if this type references a class, * false if it references an interface. * @return true if the type references a class, false if Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/ReferenceType.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/ReferenceType.java?rev=1702419&r1=1702418&r2=1702419&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/ReferenceType.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/generic/ReferenceType.java Fri Sep 11 10:34:45 2015 @@ -256,4 +256,75 @@ public abstract class ReferenceType exte return null; } + /** + * This commutative operation returns the first common superclass (narrowest ReferenceType + * referencing a class, not an interface). + * If one of the types is a superclass of the other, the former is returned. + * If "this" is Type.NULL, then t is returned. + * If t is Type.NULL, then "this" is returned. + * If "this" equals t ['this.equals(t)'] "this" is returned. + * If "this" or t is an ArrayType, then Type.OBJECT is returned. + * If "this" or t is a ReferenceType referencing an interface, then Type.OBJECT is returned. + * If not all of the two classes' superclasses cannot be found, "null" is returned. + * See the JVM specification edition 2, "�4.9.2 The Bytecode Verifier". + * + * @deprecated use getFirstCommonSuperclass(ReferenceType t) which has + * slightly changed semantics. + * @throws ClassNotFoundException on failure to find superclasses of this + * type, or the type passed as a parameter + */ + @Deprecated + public ReferenceType firstCommonSuperclass( ReferenceType t ) throws ClassNotFoundException { + if (this.equals(Type.NULL)) { + return t; + } + if (t.equals(Type.NULL)) { + return this; + } + if (this.equals(t)) { + return this; + /* + * TODO: Above sounds a little arbitrary. On the other hand, there is + * no object referenced by Type.NULL so we can also say all the objects + * referenced by Type.NULL were derived from java.lang.Object. + * However, the Java Language's "instanceof" operator proves us wrong: + * "null" is not referring to an instance of java.lang.Object :) + */ + } + if ((this instanceof ArrayType) || (t instanceof ArrayType)) { + return Type.OBJECT; + // TODO: Is there a proof of OBJECT being the direct ancestor of every ArrayType? + } + if (((this instanceof ObjectType) && ((ObjectType) this).referencesInterface()) + || ((t instanceof ObjectType) && ((ObjectType) t).referencesInterface())) { + return Type.OBJECT; + // TODO: The above line is correct comparing to the vmspec2. But one could + // make class file verification a bit stronger here by using the notion of + // superinterfaces or even castability or assignment compatibility. + } + // this and t are ObjectTypes, see above. + ObjectType thiz = (ObjectType) this; + ObjectType other = (ObjectType) t; + JavaClass[] thiz_sups = Repository.getSuperClasses(thiz.getClassName()); + JavaClass[] other_sups = Repository.getSuperClasses(other.getClassName()); + if ((thiz_sups == null) || (other_sups == null)) { + return null; + } + // Waaahh... + JavaClass[] this_sups = new JavaClass[thiz_sups.length + 1]; + JavaClass[] t_sups = new JavaClass[other_sups.length + 1]; + System.arraycopy(thiz_sups, 0, this_sups, 1, thiz_sups.length); + System.arraycopy(other_sups, 0, t_sups, 1, other_sups.length); + this_sups[0] = Repository.lookupClass(thiz.getClassName()); + t_sups[0] = Repository.lookupClass(other.getClassName()); + for (JavaClass t_sup : t_sups) { + for (JavaClass this_sup : this_sups) { + if (this_sup.equals(t_sup)) { + return ObjectType.getInstance(this_sup.getClassName()); + } + } + } + // Huh? Did you ask for Type.OBJECT's superclass?? + return null; + } } Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/util/ClassPath.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/util/ClassPath.java?rev=1702419&r1=1702418&r2=1702419&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/util/ClassPath.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/util/ClassPath.java Fri Sep 11 10:34:45 2015 @@ -93,6 +93,15 @@ public class ClassPath { vec.toArray(paths); } + /** + * Search for classes in CLASSPATH. + * @deprecated Use SYSTEM_CLASS_PATH constant + */ + @Deprecated + public ClassPath() { + this(getClassPath()); + } + /** @return used class path string */ @Override Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/GraphicalVerifier.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/GraphicalVerifier.java?rev=1702419&r1=1702418&r2=1702419&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/GraphicalVerifier.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/GraphicalVerifier.java Fri Sep 11 10:34:45 2015 @@ -34,7 +34,7 @@ public class GraphicalVerifier { /** Constructor. */ - private GraphicalVerifier() { + public GraphicalVerifier() { VerifierAppFrame frame = new VerifierAppFrame(); //Frames �berpr�fen, die voreingestellte Gr��e haben //Frames packen, die nutzbare bevorzugte Gr��eninformationen enthalten, z.B. aus ihrem Layout Modified: commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/VerifierFactoryListModel.java URL: http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/VerifierFactoryListModel.java?rev=1702419&r1=1702418&r2=1702419&view=diff ============================================================================== --- commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/VerifierFactoryListModel.java (original) +++ commons/proper/bcel/trunk/src/main/java/org/apache/commons/bcel6/verifier/VerifierFactoryListModel.java Fri Sep 11 10:34:45 2015 @@ -77,9 +77,6 @@ public class VerifierFactoryListModel im } - /** - * @since 6.0 - */ @Override public synchronized String getElementAt( int index ) { return (cache.toArray(new String[cache.size()]))[index];