Index: src/org/aspectj/weaver/Advice.java =================================================================== RCS file: /home/technology/org.aspectj/modules/weaver/src/org/aspectj/weaver/Advice.java,v retrieving revision 1.31 diff -u -r1.31 Advice.java --- src/org/aspectj/weaver/Advice.java 21 Feb 2006 16:13:48 -0000 1.31 +++ src/org/aspectj/weaver/Advice.java 7 Mar 2006 13:00:53 -0000 @@ -240,6 +240,8 @@ // only called as part of parameterization.... public void setSignature(Member signature) { this.signature = signature; + // reset hashCode value so it can be recalculated next time + hashCode = 0; } public boolean hasExtraParameter() { @@ -369,19 +371,21 @@ public boolean equals(Object other) { if (! (other instanceof Advice)) return false; Advice o = (Advice) other; - return o.attribute.equals(attribute) - && o.pointcut.equals(pointcut) - && o.signature.equals(signature); + return o.kind.equals(kind) + && ((o.pointcut == null) ? (pointcut == null) : o.pointcut.equals(pointcut)) + && ((o.signature == null) ? (signature == null) : o.signature.equals(signature)); + } - private volatile int hashCode = 0; + + private volatile int hashCode = 0; public int hashCode() { - if (hashCode == 0) { + if (hashCode == 0) { int result = 17; result = 37*result + kind.hashCode(); - result = 37*result + pointcut.hashCode(); - if (signature != null) result = 37*result + signature.hashCode(); - hashCode = result; - } + result = 37*result + ((pointcut == null) ? 0 : pointcut.hashCode()); + result = 37*result + ((signature == null) ? 0 : signature.hashCode()); + hashCode = result; + } return hashCode; } Index: src/org/aspectj/weaver/AnnotationOnTypeMunger.java =================================================================== RCS file: /home/technology/org.aspectj/modules/weaver/src/org/aspectj/weaver/AnnotationOnTypeMunger.java,v retrieving revision 1.1 diff -u -r1.1 AnnotationOnTypeMunger.java --- src/org/aspectj/weaver/AnnotationOnTypeMunger.java 10 Mar 2005 17:21:06 -0000 1.1 +++ src/org/aspectj/weaver/AnnotationOnTypeMunger.java 7 Mar 2006 13:00:53 -0000 @@ -35,4 +35,21 @@ public AnnotationX getNewAnnotation() { return newAnnotation; } + + public boolean equals(Object other) { + if (!(other instanceof AnnotationOnTypeMunger)) return false; + AnnotationOnTypeMunger o = (AnnotationOnTypeMunger)other; + return newAnnotation.getSignature().equals(o.newAnnotation.getSignature()); + } + + private volatile int hashCode = 0; + public int hashCode() { + if (hashCode == 0) { + int result = 17; + result = 37*result + newAnnotation.getSignature().hashCode(); + hashCode = result; + } + return hashCode; + } + } Index: src/org/aspectj/weaver/MemberImpl.java =================================================================== RCS file: /home/technology/org.aspectj/modules/weaver/src/org/aspectj/weaver/MemberImpl.java,v retrieving revision 1.8 diff -u -r1.8 MemberImpl.java --- src/org/aspectj/weaver/MemberImpl.java 24 Feb 2006 12:11:15 -0000 1.8 +++ src/org/aspectj/weaver/MemberImpl.java 7 Mar 2006 13:00:54 -0000 @@ -365,22 +365,10 @@ public boolean equals(Object other) { if (! (other instanceof Member)) return false; Member o = (Member) other; - - return (kind == o.getKind() - && name.equals(o.getName()) - && signature.equals(o.getSignature()) - && declaringType.equals(o.getDeclaringType())); - } - - /* (non-Javadoc) - * @see org.aspectj.weaver.Member#compareTo(java.lang.Object) - */ - public int compareTo(Object other) { - Member o = (Member) other; - - int i = getName().compareTo(o.getName()); - if (i != 0) return i; - return getSignature().compareTo(o.getSignature()); + return (getKind() == o.getKind() + && getName().equals(o.getName()) + && getSignature().equals(o.getSignature()) + && getDeclaringType().equals(o.getDeclaringType())); } /** @@ -392,15 +380,26 @@ public int hashCode() { if (hashCode == 0) { int result = 17; - result = 37*result + kind.hashCode(); - result = 37*result + name.hashCode(); - result = 37*result + signature.hashCode(); - result = 37*result + declaringType.hashCode(); + result = 37*result + getKind().hashCode(); + result = 37*result + getName().hashCode(); + result = 37*result + getSignature().hashCode(); + result = 37*result + getDeclaringType().hashCode(); hashCode = result; } return hashCode; } + /* (non-Javadoc) + * @see org.aspectj.weaver.Member#compareTo(java.lang.Object) + */ + public int compareTo(Object other) { + Member o = (Member) other; + + int i = getName().compareTo(o.getName()); + if (i != 0) return i; + return getSignature().compareTo(o.getSignature()); + } + public String toString() { StringBuffer buf = new StringBuffer(); buf.append(returnType.getName()); Index: src/org/aspectj/weaver/MethodDelegateTypeMunger.java =================================================================== RCS file: /home/technology/org.aspectj/modules/weaver/src/org/aspectj/weaver/MethodDelegateTypeMunger.java,v retrieving revision 1.6 diff -u -r1.6 MethodDelegateTypeMunger.java --- src/org/aspectj/weaver/MethodDelegateTypeMunger.java 19 Dec 2005 13:09:21 -0000 1.6 +++ src/org/aspectj/weaver/MethodDelegateTypeMunger.java 7 Mar 2006 13:00:54 -0000 @@ -55,6 +55,26 @@ this.implClassName = implClassName; } + public boolean equals(Object other) { + if (!(other instanceof MethodDelegateTypeMunger)) return false; + MethodDelegateTypeMunger o = (MethodDelegateTypeMunger)other; + return ((o.aspect == null) ? (aspect == null ) : aspect.equals(o.aspect)) + && ((o.typePattern == null) ? (typePattern == null ) : typePattern.equals(o.typePattern)) + && ((o.implClassName == null) ? (implClassName == null) : implClassName.equals(o.implClassName)); + } + + private volatile int hashCode = 0; + public int hashCode() { + if (hashCode == 0) { + int result = 17; + result = 37*result + ((aspect == null) ? 0 : aspect.hashCode()); + result = 37*result + ((typePattern == null) ? 0 : typePattern.hashCode()); + result = 37*result + ((implClassName == null) ? 0 : implClassName.hashCode()); + hashCode = result; + } + return hashCode; + } + public ResolvedMember getDelegate(ResolvedType targetType) { return AjcMemberMaker.itdAtDeclareParentsField( targetType, @@ -130,6 +150,20 @@ this.typePattern = typePattern; } + public boolean equals(Object other) { + if (!(other instanceof FieldHostTypeMunger)) return false; + FieldHostTypeMunger o = (FieldHostTypeMunger)other; + return ((o.aspect == null) ? (aspect == null ) : aspect.equals(o.aspect)) + && ((o.typePattern == null) ? (typePattern == null ) : typePattern.equals(o.typePattern)); + } + + public int hashCode() { + int result = 17; + result = 37*result + ((aspect == null) ? 0 : aspect.hashCode()); + result = 37*result + ((typePattern == null) ? 0 : typePattern.hashCode()); + return result; + } + public void write(DataOutputStream s) throws IOException { kind.write(s); signature.write(s); Index: src/org/aspectj/weaver/NewConstructorTypeMunger.java =================================================================== RCS file: /home/technology/org.aspectj/modules/weaver/src/org/aspectj/weaver/NewConstructorTypeMunger.java,v retrieving revision 1.15 diff -u -r1.15 NewConstructorTypeMunger.java --- src/org/aspectj/weaver/NewConstructorTypeMunger.java 20 Oct 2005 08:33:40 -0000 1.15 +++ src/org/aspectj/weaver/NewConstructorTypeMunger.java 7 Mar 2006 13:00:54 -0000 @@ -40,6 +40,26 @@ } + public boolean equals(Object other) { + if (!(other instanceof NewConstructorTypeMunger)) return false; + NewConstructorTypeMunger o = (NewConstructorTypeMunger)other; + return ((o.syntheticConstructor == null) ? (syntheticConstructor == null ) + : syntheticConstructor.equals(o.syntheticConstructor)) + & ((o.explicitConstructor == null) ? (explicitConstructor == null ) + : explicitConstructor.equals(o.explicitConstructor)); + } + + private volatile int hashCode = 0; + public int hashCode() { + if (hashCode == 0) { + int result = 17; + result = 37*result + ((syntheticConstructor == null) ? 0 : syntheticConstructor.hashCode()); + result = 37*result + ((explicitConstructor == null) ? 0 : explicitConstructor.hashCode()); + hashCode = result; + } + return hashCode; + } + // doesnt seem required.... // public ResolvedMember getDispatchMethod(UnresolvedType aspectType) { // return AjcMemberMaker.interMethodBody(signature, aspectType); @@ -78,6 +98,8 @@ public void setExplicitConstructor(ResolvedMember explicitConstructor) { this.explicitConstructor = explicitConstructor; + // reset hashCode so that its recalculated with new value + hashCode = 0; } public ResolvedMember getMatchingSyntheticMember(Member member, ResolvedType aspectType) { Index: src/org/aspectj/weaver/NewFieldTypeMunger.java =================================================================== RCS file: /home/technology/org.aspectj/modules/weaver/src/org/aspectj/weaver/NewFieldTypeMunger.java,v retrieving revision 1.16 diff -u -r1.16 NewFieldTypeMunger.java --- src/org/aspectj/weaver/NewFieldTypeMunger.java 26 Oct 2005 16:48:29 -0000 1.16 +++ src/org/aspectj/weaver/NewFieldTypeMunger.java 7 Mar 2006 13:00:54 -0000 @@ -93,4 +93,22 @@ return nftm; } + public boolean equals(Object other) { + if (! (other instanceof NewFieldTypeMunger)) return false; + NewFieldTypeMunger o = (NewFieldTypeMunger) other; + return kind.equals(o.kind) + && ((o.signature == null) ? (signature == null ) : signature.equals(o.signature)) + && ((o.declaredSignature == null) ? (declaredSignature == null ) : declaredSignature.equals(o.declaredSignature)) + && ((o.typeVariableAliases == null) ? (typeVariableAliases == null ) : typeVariableAliases.equals(o.typeVariableAliases)); + } + + public int hashCode() { + int result = 17; + result = 37*result + kind.hashCode(); + result = 37*result + ((signature == null) ? 0 : signature.hashCode()); + result = 37*result + ((declaredSignature == null) ? 0 : declaredSignature.hashCode()); + result = 37*result + ((typeVariableAliases == null) ? 0 : typeVariableAliases.hashCode()); + return result; + } + } Index: src/org/aspectj/weaver/NewMethodTypeMunger.java =================================================================== RCS file: /home/technology/org.aspectj/modules/weaver/src/org/aspectj/weaver/NewMethodTypeMunger.java,v retrieving revision 1.18 diff -u -r1.18 NewMethodTypeMunger.java --- src/org/aspectj/weaver/NewMethodTypeMunger.java 26 Oct 2005 16:48:29 -0000 1.18 +++ src/org/aspectj/weaver/NewMethodTypeMunger.java 7 Mar 2006 13:00:54 -0000 @@ -110,5 +110,22 @@ return nmtm; } + public boolean equals(Object other) { + if (! (other instanceof NewMethodTypeMunger)) return false; + NewMethodTypeMunger o = (NewMethodTypeMunger) other; + return kind.equals(o.kind) + && ((o.signature == null) ? (signature == null ) : signature.equals(o.signature)) + && ((o.declaredSignature == null) ? (declaredSignature == null ) : declaredSignature.equals(o.declaredSignature)) + && ((o.typeVariableAliases == null) ? (typeVariableAliases == null ) : typeVariableAliases.equals(o.typeVariableAliases)); + } + + public int hashCode() { + int result = 17; + result = 37*result + kind.hashCode(); + result = 37*result + ((signature == null) ? 0 : signature.hashCode()); + result = 37*result + ((declaredSignature == null) ? 0 : declaredSignature.hashCode()); + result = 37*result + ((typeVariableAliases == null) ? 0 : typeVariableAliases.hashCode()); + return result; + } } Index: src/org/aspectj/weaver/NewParentTypeMunger.java =================================================================== RCS file: /home/technology/org.aspectj/modules/weaver/src/org/aspectj/weaver/NewParentTypeMunger.java,v retrieving revision 1.3 diff -u -r1.3 NewParentTypeMunger.java --- src/org/aspectj/weaver/NewParentTypeMunger.java 15 Jul 2005 16:09:04 -0000 1.3 +++ src/org/aspectj/weaver/NewParentTypeMunger.java 7 Mar 2006 13:00:54 -0000 @@ -33,5 +33,19 @@ return newParent; } - + public boolean equals(Object other) { + if (! (other instanceof NewParentTypeMunger)) return false; + NewParentTypeMunger o = (NewParentTypeMunger) other; + return newParent.equals(o.newParent); + } + + private volatile int hashCode = 0; + public int hashCode() { + if (hashCode == 0) { + int result = 17; + result = 37*result + newParent.hashCode(); + hashCode = result; + } + return hashCode; + } } Index: src/org/aspectj/weaver/PerObjectInterfaceTypeMunger.java =================================================================== RCS file: /home/technology/org.aspectj/modules/weaver/src/org/aspectj/weaver/PerObjectInterfaceTypeMunger.java,v retrieving revision 1.12 diff -u -r1.12 PerObjectInterfaceTypeMunger.java --- src/org/aspectj/weaver/PerObjectInterfaceTypeMunger.java 15 Nov 2005 10:58:09 -0000 1.12 +++ src/org/aspectj/weaver/PerObjectInterfaceTypeMunger.java 7 Mar 2006 13:00:54 -0000 @@ -26,7 +26,25 @@ private final UnresolvedType interfaceType; private final Pointcut testPointcut; private TypePattern lazyTestTypePattern; - + + public boolean equals(Object other) { + if (!(other instanceof PerObjectInterfaceTypeMunger)) return false; + PerObjectInterfaceTypeMunger o = (PerObjectInterfaceTypeMunger)other; + return ((o.testPointcut == null) ? (testPointcut == null ) : testPointcut.equals(o.testPointcut)) + && ((o.lazyTestTypePattern == null) ? (lazyTestTypePattern == null ) : lazyTestTypePattern.equals(o.lazyTestTypePattern)); + } + + private volatile int hashCode = 0; + public int hashCode() { + if (hashCode == 0) { + int result = 17; + result = 37*result + ((testPointcut == null) ? 0 : testPointcut.hashCode()); + result = 37*result + ((lazyTestTypePattern == null) ? 0 : lazyTestTypePattern.hashCode()); + hashCode = result; + } + return hashCode; + } + public PerObjectInterfaceTypeMunger(UnresolvedType aspectType, Pointcut testPointcut) { super(PerObjectInterface, null); this.testPointcut = testPointcut; @@ -44,6 +62,8 @@ } PerThisOrTargetPointcutVisitor v = new PerThisOrTargetPointcutVisitor(!isPerThis, aspectType); lazyTestTypePattern = v.getPerTypePointcut(testPointcut); + // reset hashCode so that its recalculated with the new lazyTestTypePattern + hashCode = 0; } return lazyTestTypePattern; } Index: src/org/aspectj/weaver/PerTypeWithinTargetTypeMunger.java =================================================================== RCS file: /home/technology/org.aspectj/modules/weaver/src/org/aspectj/weaver/PerTypeWithinTargetTypeMunger.java,v retrieving revision 1.6 diff -u -r1.6 PerTypeWithinTargetTypeMunger.java --- src/org/aspectj/weaver/PerTypeWithinTargetTypeMunger.java 15 Jul 2005 16:09:03 -0000 1.6 +++ src/org/aspectj/weaver/PerTypeWithinTargetTypeMunger.java 7 Mar 2006 13:00:54 -0000 @@ -30,6 +30,24 @@ this.testPointcut = testPointcut; } + public boolean equals(Object other) { + if (!(other instanceof PerTypeWithinTargetTypeMunger)) return false; + PerTypeWithinTargetTypeMunger o = (PerTypeWithinTargetTypeMunger)other; + return ((o.testPointcut == null) ? (testPointcut == null ) : testPointcut.equals(o.testPointcut)) + && ((o.aspectType == null) ? (aspectType == null ) : aspectType.equals(o.aspectType)); + } + + private volatile int hashCode = 0; + public int hashCode() { + if (hashCode == 0) { + int result = 17; + result = 37*result + ((testPointcut == null) ? 0 : testPointcut.hashCode()); + result = 37*result + ((aspectType == null) ? 0 : aspectType.hashCode()); + hashCode = result; + } + return hashCode; + } + public void write(DataOutputStream s) throws IOException { throw new RuntimeException("shouldn't be serialized"); } Index: src/org/aspectj/weaver/PrivilegedAccessMunger.java =================================================================== RCS file: /home/technology/org.aspectj/modules/weaver/src/org/aspectj/weaver/PrivilegedAccessMunger.java,v retrieving revision 1.5 diff -u -r1.5 PrivilegedAccessMunger.java --- src/org/aspectj/weaver/PrivilegedAccessMunger.java 15 Jul 2005 16:09:03 -0000 1.5 +++ src/org/aspectj/weaver/PrivilegedAccessMunger.java 7 Mar 2006 13:00:54 -0000 @@ -45,4 +45,22 @@ return null; } + public boolean equals(Object other) { + if (! (other instanceof PrivilegedAccessMunger)) return false; + PrivilegedAccessMunger o = (PrivilegedAccessMunger) other; + return kind.equals(o.kind) + && ((o.signature == null) ? (signature == null ) : signature.equals(o.signature)) + && ((o.declaredSignature == null) ? (declaredSignature == null ) : declaredSignature.equals(o.declaredSignature)) + && ((o.typeVariableAliases == null) ? (typeVariableAliases == null ) : typeVariableAliases.equals(o.typeVariableAliases)); + } + + public int hashCode() { + int result = 17; + result = 37*result + kind.hashCode(); + result = 37*result + ((signature == null) ? 0 : signature.hashCode()); + result = 37*result + ((declaredSignature == null) ? 0 : declaredSignature.hashCode()); + result = 37*result + ((typeVariableAliases == null) ? 0 : typeVariableAliases.hashCode()); + return result; + } + } Index: src/org/aspectj/weaver/bcel/BcelTypeMunger.java =================================================================== RCS file: /home/technology/org.aspectj/modules/weaver/src/org/aspectj/weaver/bcel/BcelTypeMunger.java,v retrieving revision 1.72 diff -u -r1.72 BcelTypeMunger.java --- src/org/aspectj/weaver/bcel/BcelTypeMunger.java 6 Mar 2006 16:09:29 -0000 1.72 +++ src/org/aspectj/weaver/bcel/BcelTypeMunger.java 7 Mar 2006 13:00:56 -0000 @@ -1645,6 +1645,25 @@ return munger.getTypeVariableAliases(); } + public boolean equals(Object other) { + if (! (other instanceof BcelTypeMunger)) return false; + BcelTypeMunger o = (BcelTypeMunger) other; + return ((o.getMunger() == null) ? (getMunger() == null) : o.getMunger().equals(getMunger())) + && ((o.getAspectType() == null) ? (getAspectType() == null) : o.getAspectType().equals(getAspectType())); + } + + private volatile int hashCode = 0; + public int hashCode() { + if (hashCode == 0) { + int result = 17; + result = 37*result + ((getMunger() == null) ? 0 : getMunger().hashCode()); + result = 37*result + ((getAspectType() == null) ? 0 : getAspectType().hashCode()); + hashCode = result; + } + return hashCode; + } + + /** * Some type mungers are created purely to help with the implementation of shadow mungers. * For example to support the cflow() pointcut we create a new cflow field in the aspect, and