Author: markt Date: Sun Oct 14 00:53:23 2012 New Revision: 1397985 URL: http://svn.apache.org/viewvc?rev=1397985&view=rev Log: Only need FieldOrMethod, not individual classes
Removed: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Field.java tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/Method.java Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/FieldOrMethod.java Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java?rev=1397985&r1=1397984&r2=1397985&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/ClassParser.java Sun Oct 14 00:53:23 2012 @@ -47,8 +47,8 @@ public final class ClassParser { private int access_flags; // Access rights of parsed class private int[] interfaces; // Names of implemented interfaces private ConstantPool constant_pool; // collection of constants - private Field[] fields; // class fields, i.e., its variables - private Method[] methods; // methods defined in the class + private FieldOrMethod[] fields; // class fields, i.e., its variables + private FieldOrMethod[] methods; // methods defined in the class private Attribute[] attributes; // attributes defined in the class private static final int BUFSIZE = 8192; @@ -176,9 +176,9 @@ public final class ClassParser { private final void readFields() throws IOException, ClassFormatException { int fields_count; fields_count = file.readUnsignedShort(); - fields = new Field[fields_count]; + fields = new FieldOrMethod[fields_count]; for (int i = 0; i < fields_count; i++) { - fields[i] = new Field(file, constant_pool); + fields[i] = new FieldOrMethod(file, constant_pool); } } @@ -221,9 +221,9 @@ public final class ClassParser { private final void readMethods() throws IOException, ClassFormatException { int methods_count; methods_count = file.readUnsignedShort(); - methods = new Method[methods_count]; + methods = new FieldOrMethod[methods_count]; for (int i = 0; i < methods_count; i++) { - methods[i] = new Method(file, constant_pool); + methods[i] = new FieldOrMethod(file, constant_pool); } } Modified: tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/FieldOrMethod.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/FieldOrMethod.java?rev=1397985&r1=1397984&r2=1397985&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/FieldOrMethod.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/bcel/classfile/FieldOrMethod.java Sun Oct 14 00:53:23 2012 @@ -21,16 +21,35 @@ import java.io.DataInputStream; import java.io.IOException; import org.apache.tomcat.util.bcel.Constants; +import org.apache.tomcat.util.bcel.util.BCELComparator; /** - * Abstract super class for fields and methods. + * Class for fields and methods. * * @version $Id$ * @author <A HREF="mailto:m.d...@gmx.de">M. Dahm</A> */ -public abstract class FieldOrMethod extends AccessFlags implements Cloneable { +public class FieldOrMethod extends AccessFlags implements Cloneable { private static final long serialVersionUID = -3383525930205542157L; + private static BCELComparator _cmp = new BCELComparator() { + + @Override + public boolean equals( Object o1, Object o2 ) { + FieldOrMethod THIS = (FieldOrMethod) o1; + FieldOrMethod THAT = (FieldOrMethod) o2; + return THIS.getName().equals(THAT.getName()) + && THIS.getSignature().equals(THAT.getSignature()); + } + + + @Override + public int hashCode( Object o ) { + FieldOrMethod THIS = (FieldOrMethod) o; + return THIS.getSignature().hashCode() ^ THIS.getName().hashCode(); + } + }; + protected int name_index; // Points to field name in constant pool protected int signature_index; // Points to encoded signature protected int attributes_count; // No. of attributes @@ -104,4 +123,28 @@ public abstract class FieldOrMethod exte c = (ConstantUtf8) constant_pool.getConstant(signature_index, Constants.CONSTANT_Utf8); return c.getBytes(); } + + /** + * Return value as defined by given BCELComparator strategy. + * By default two FieldOrMethod objects are said to be equal when + * their names and signatures are equal. + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals( Object obj ) { + return _cmp.equals(this, obj); + } + + + /** + * Return value as defined by given BCELComparator strategy. + * By default return the hashcode of the FieldOrMethod's name XOR signature. + * + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + return _cmp.hashCode(this); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org