Index: src/main/java/org/apache/harmony/unpack200/bytecode/CPMethodRef.java =================================================================== --- src/main/java/org/apache/harmony/unpack200/bytecode/CPMethodRef.java (revision 676138) +++ src/main/java/org/apache/harmony/unpack200/bytecode/CPMethodRef.java (working copy) @@ -29,4 +29,24 @@ return new ClassFileEntry[] { className, nameAndType }; } + + private boolean hashcodeComputed = false; + private int cachedHashCode; + + private int generateHashCode() { + hashcodeComputed = true; + final int PRIME = 31; + int result = 1; + result = PRIME * result + className.hashCode(); + result = PRIME * result + nameAndType.hashCode(); + return result; + } + + public int hashCode() { + if (!hashcodeComputed) + cachedHashCode = generateHashCode(); + + return cachedHashCode; + } + } Index: src/main/java/org/apache/harmony/unpack200/bytecode/CPFieldRef.java =================================================================== --- src/main/java/org/apache/harmony/unpack200/bytecode/CPFieldRef.java (revision 676138) +++ src/main/java/org/apache/harmony/unpack200/bytecode/CPFieldRef.java (working copy) @@ -54,7 +54,11 @@ return "FieldRef: " + className + "#" + nameAndType; } - public int hashCode() { + private boolean hashcodeComputed = false; + private int cachedHashCode; + + private int generateHashCode() { + hashcodeComputed = true; final int PRIME = 31; int result = 1; result = PRIME * result @@ -63,7 +67,14 @@ + ((nameAndType == null) ? 0 : nameAndType.hashCode()); return result; } - + + public int hashCode() { + if (!hashcodeComputed) + cachedHashCode = generateHashCode(); + + return cachedHashCode; + } + public boolean equals(Object obj) { if (this == obj) return true; Index: src/main/java/org/apache/harmony/unpack200/bytecode/CPUTF8.java =================================================================== --- src/main/java/org/apache/harmony/unpack200/bytecode/CPUTF8.java (revision 676138) +++ src/main/java/org/apache/harmony/unpack200/bytecode/CPUTF8.java (working copy) @@ -40,6 +40,7 @@ if (utf8 == null) { throw new NullPointerException("Null arguments are not allowed"); } + } public CPUTF8(String string) { @@ -57,10 +58,21 @@ return utf8.equals(other.utf8); } - public int hashCode() { + private boolean hashcodeComputed = false; + private int cachedHashCode; + + private int generateHashCode() { + hashcodeComputed = true; final int PRIME = 31; - return PRIME + utf8.hashCode(); + return PRIME + utf8.hashCode(); } + + public int hashCode() { + if (!hashcodeComputed) + cachedHashCode = generateHashCode(); + + return cachedHashCode; + } public String toString() { return "UTF8: " + utf8; Index: src/main/java/org/apache/harmony/unpack200/bytecode/CPClass.java =================================================================== --- src/main/java/org/apache/harmony/unpack200/bytecode/CPClass.java (revision 676138) +++ src/main/java/org/apache/harmony/unpack200/bytecode/CPClass.java (working copy) @@ -60,9 +60,20 @@ protected ClassFileEntry[] getNestedClassFileEntries() { return new ClassFileEntry[] { utf8, }; } - + + private boolean hashcodeComputed = false; + private int cachedHashCode; + + private int generateHashCode() { + hashcodeComputed = true; + return utf8.hashCode(); + } + public int hashCode() { - return utf8.hashCode(); + if (!hashcodeComputed) + cachedHashCode = generateHashCode(); + + return cachedHashCode; } protected void resolve(ClassConstantPool pool) { Index: src/main/java/org/apache/harmony/unpack200/bytecode/CPString.java =================================================================== --- src/main/java/org/apache/harmony/unpack200/bytecode/CPString.java (revision 676138) +++ src/main/java/org/apache/harmony/unpack200/bytecode/CPString.java (working copy) @@ -53,4 +53,22 @@ protected ClassFileEntry[] getNestedClassFileEntries() { return new ClassFileEntry[] { name }; } + + private boolean hashcodeComputed = false; + private int cachedHashCode; + + private int generateHashCode() { + hashcodeComputed = true; + final int PRIME = 31; + int result = 1; + result = PRIME * result + name.hashCode(); + return result; + } + + public int hashCode() { + if (!hashcodeComputed) + cachedHashCode = generateHashCode(); + + return cachedHashCode; + } } \ No newline at end of file Index: src/main/java/org/apache/harmony/unpack200/bytecode/ByteCode.java =================================================================== --- src/main/java/org/apache/harmony/unpack200/bytecode/ByteCode.java (revision 676138) +++ src/main/java/org/apache/harmony/unpack200/bytecode/ByteCode.java (working copy) @@ -104,15 +104,26 @@ return getByteCodeForm().getOperandType(); } - public int hashCode() { + private boolean hashcodeComputed = false; + private int cachedHashCode; + + private int generateHashCode() { + hashcodeComputed = true; final int prime = 41; int result = 1; result = prime * result + getName().hashCode() + getByteCodeForm().hashCode(); // Don't forget to take the operands = rewrite into account result += (prime * rewrite.hashCode()); - return result; + return result; } - + + public int hashCode() { + if (!hashcodeComputed) + cachedHashCode = generateHashCode(); + + return cachedHashCode; + } + /* * (non-Javadoc) * Index: src/main/java/org/apache/harmony/unpack200/bytecode/CPMethod.java =================================================================== --- src/main/java/org/apache/harmony/unpack200/bytecode/CPMethod.java (revision 676138) +++ src/main/java/org/apache/harmony/unpack200/bytecode/CPMethod.java (working copy) @@ -30,5 +30,24 @@ public String toString() { return "Method: " + name + "(" + descriptor + ")"; } + + private boolean hashcodeComputed = false; + private int cachedHashCode; + + private int generateHashCode() { + hashcodeComputed = true; + final int PRIME = 31; + int result = 1; + result = PRIME * result + name.hashCode(); + result = PRIME * result + descriptor.hashCode(); + return result; + } + + public int hashCode() { + if (!hashcodeComputed) + cachedHashCode = generateHashCode(); + + return cachedHashCode; + } } Index: src/main/java/org/apache/harmony/unpack200/bytecode/CPInterfaceMethodRef.java =================================================================== --- src/main/java/org/apache/harmony/unpack200/bytecode/CPInterfaceMethodRef.java (revision 676138) +++ src/main/java/org/apache/harmony/unpack200/bytecode/CPInterfaceMethodRef.java (working copy) @@ -32,4 +32,24 @@ public int invokeInterfaceCount() { return nameAndType.invokeInterfaceCount(); } + + private boolean hashcodeComputed = false; + private int cachedHashCode; + + private int generateHashCode() { + hashcodeComputed = true; + final int PRIME = 31; + int result = 1; + result = PRIME * result + className.hashCode(); + result = PRIME * result + nameAndType.hashCode(); + return result; + } + + public int hashCode() { + if (!hashcodeComputed) + cachedHashCode = generateHashCode(); + + return cachedHashCode; + } + } Index: src/main/java/org/apache/harmony/unpack200/bytecode/CPNameAndType.java =================================================================== --- src/main/java/org/apache/harmony/unpack200/bytecode/CPNameAndType.java (revision 676138) +++ src/main/java/org/apache/harmony/unpack200/bytecode/CPNameAndType.java (working copy) @@ -76,13 +76,24 @@ return "NameAndType: " + name + "(" + descriptor + ")"; } - public int hashCode() { + private boolean hashcodeComputed = false; + private int cachedHashCode; + + private int generateHashCode() { + hashcodeComputed = true; final int PRIME = 31; int result = 1; result = PRIME * result + descriptor.hashCode(); result = PRIME * result + name.hashCode(); return result; } + + public int hashCode() { + if (!hashcodeComputed) + cachedHashCode = generateHashCode(); + + return cachedHashCode; + } public boolean equals(Object obj) { if (this == obj)