org_aspectj_ajde_core_tests_model_SavedModelConsistencyTest_java
org.aspectj.weaver.CrosscuttingMembers
public boolean replaceWith(CrosscuttingMembers other, boolean careAboutShadowMungers) {
        boolean changed = false;
        if (careAboutShadowMungers && (this.perClause == null || !this.perClause.equals(other.perClause))) {
            changed = true;
            this.perClause = other.perClause;
        }
        if (careAboutShadowMungers) {
            HashSet<ShadowMunger> theseShadowMungers = new HashSet<ShadowMunger>();
            HashSet<ShadowMunger> theseInlinedAroundMungers = new HashSet<ShadowMunger>();
            for (ShadowMunger munger : this.shadowMungers) {
                if (munger instanceof Advice) {
                    Advice adviceMunger = (Advice)munger;
                    if (!this.world.isXnoInline() && adviceMunger.getKind().equals(AdviceKind.Around)) {
                        theseInlinedAroundMungers.add(adviceMunger);
                        continue;
                    }
                    theseShadowMungers.add(adviceMunger);
                    continue;
                }
                theseShadowMungers.add(munger);
            }
            Iterator<ConcreteTypeMunger> tempSet = new HashSet<ShadowMunger>(other.shadowMungers);
            HashSet<ShadowMunger> otherShadowMungers = new HashSet<ShadowMunger>();
            HashSet<ShadowMunger> otherInlinedAroundMungers = new HashSet<ShadowMunger>();
            Iterator<Object> iterator = tempSet.iterator();
            while (iterator.hasNext()) {
                ShadowMunger munger = (ShadowMunger)iterator.next();
                if (munger instanceof Advice) {
                    Advice adviceMunger = (Advice)munger;
                    if (!this.world.isXnoInline() && adviceMunger.getKind().equals(AdviceKind.Around)) {
                        otherInlinedAroundMungers.add(this.rewritePointcutInMunger(adviceMunger));
                        continue;
                    }
                    otherShadowMungers.add(this.rewritePointcutInMunger(adviceMunger));
                    continue;
                }
                otherShadowMungers.add(this.rewritePointcutInMunger(munger));
            }
            if (!theseShadowMungers.equals(otherShadowMungers)) {
                changed = true;
            }
            if (!this.equivalent(theseInlinedAroundMungers, otherInlinedAroundMungers)) {
                changed = true;
            }
            if (!changed) {
                for (ShadowMunger munger : this.shadowMungers) {
                    int i = other.shadowMungers.indexOf(munger);
                    ShadowMunger shadowMunger = other.shadowMungers.get(i);
                    if (!(munger instanceof Advice)) continue;
                    ((Advice)shadowMunger).setHasMatchedSomething(((Advice)munger).hasMatchedSomething());
                }
            }
            this.shadowMungers = other.shadowMungers;
        }
        HashSet<ConcreteTypeMunger> theseTypeMungers = new HashSet<ConcreteTypeMunger>();
        HashSet<ConcreteTypeMunger> otherTypeMungers = new HashSet<ConcreteTypeMunger>();
        if (!careAboutShadowMungers) {
            ConcreteTypeMunger typeMunger;
            for (ConcreteTypeMunger o : this.typeMungers) {
                if (o instanceof ConcreteTypeMunger) {
                    typeMunger = o;
                    if (typeMunger.existsToSupportShadowMunging()) continue;
                    theseTypeMungers.add(typeMunger);
                    continue;
                }
                theseTypeMungers.add(o);
            }
            for (ConcreteTypeMunger o : other.typeMungers) {
                if (o instanceof ConcreteTypeMunger) {
                    typeMunger = o;
                    if (typeMunger.existsToSupportShadowMunging()) continue;
                    otherTypeMungers.add(typeMunger);
                    continue;
                }
                otherTypeMungers.add(o);
            }
        } else {
            theseTypeMungers.addAll(this.typeMungers);
            otherTypeMungers.addAll(other.typeMungers);
        }
        if (theseTypeMungers.size() != otherTypeMungers.size()) {
            changed = true;
            this.typeMungers = other.typeMungers;
        } else {
            boolean shouldOverwriteThis = false;
            boolean foundInequality = false;
            Iterator iter = theseTypeMungers.iterator();
            while (iter.hasNext() && !foundInequality) {
                Object thisOne = iter.next();
                boolean foundInOtherSet = false;
                for (Object e : otherTypeMungers) {
                    if (thisOne instanceof ConcreteTypeMunger && ((ConcreteTypeMunger)thisOne).shouldOverwrite()) {
                        shouldOverwriteThis = true;
                    }
                    if (thisOne instanceof ConcreteTypeMunger && e instanceof ConcreteTypeMunger) {
                        if (((ConcreteTypeMunger)thisOne).equivalentTo(e)) {
                            foundInOtherSet = true;
                            continue;
                        }
                        if (!thisOne.equals(e)) continue;
                        foundInOtherSet = true;
                        continue;
                    }
                    if (!thisOne.equals(e)) continue;
                    foundInOtherSet = true;
                }
                if (foundInOtherSet) continue;
                foundInequality = true;
            }
            if (foundInequality) {
                changed = true;
            }
            if (shouldOverwriteThis) {
                this.typeMungers = other.typeMungers;
            }
        }
        if (!this.lateTypeMungers.equals(other.lateTypeMungers)) {
            changed = true;
            this.lateTypeMungers = other.lateTypeMungers;
        }
        if (!this.declareDominates.equals(other.declareDominates)) {
            changed = true;
            this.declareDominates = other.declareDominates;
        }
        if (!this.declareParents.equals(other.declareParents)) {
            if (!careAboutShadowMungers) {
                HashSet<DeclareParents> trimmedThis = new HashSet<DeclareParents>();
                for (DeclareParents decp : this.declareParents) {
                    if (decp.isMixin()) continue;
                    trimmedThis.add(decp);
                }
                HashSet<DeclareParents> trimmedOther = new HashSet<DeclareParents>();
                for (DeclareParents decp : other.declareParents) {
                    if (decp.isMixin()) continue;
                    trimmedOther.add(decp);
                }
                if (!trimmedThis.equals(trimmedOther)) {
                    changed = true;
                    this.declareParents = other.declareParents;
                }
            } else {
                changed = true;
                this.declareParents = other.declareParents;
            }
        }
        if (!this.declareSofts.equals(other.declareSofts)) {
            changed = true;
            this.declareSofts = other.declareSofts;
        }
        if (!this.declareAnnotationsOnType.equals(other.declareAnnotationsOnType)) {
            changed = true;
            this.declareAnnotationsOnType = other.declareAnnotationsOnType;
        }
        if (!this.declareAnnotationsOnField.equals(other.declareAnnotationsOnField)) {
            changed = true;
            this.declareAnnotationsOnField = other.declareAnnotationsOnField;
        }
        if (!this.declareAnnotationsOnMethods.equals(other.declareAnnotationsOnMethods)) {
            changed = true;
            this.declareAnnotationsOnMethods = other.declareAnnotationsOnMethods;
        }
        if (!this.declareTypeEow.equals(other.declareTypeEow)) {
            changed = true;
            this.declareTypeEow = other.declareTypeEow;
        }
        return changed;
    }
 -> java.lang.Object.equals(java.lang.Object): boolean -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Set.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Set.equals(java.lang.Object): boolean -> java.util.Set.size(): int -> java.util.Set.size(): int -> java.util.Set.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Set.addAll(java.util.Collection): boolean -> java.util.Set.addAll(java.util.Collection): boolean -> java.lang.Object.hashCode(): int -> java.lang.String.hashCode(): int -> java.lang.Object.hashCode(): int -> java.lang.String.hashCode(): int -> java.lang.String.hashCode(): int -> java.lang.String.hashCode(): int -> java.lang.String.hashCode(): int -> java.lang.String.hashCode(): int -> java.lang.Object.hashCode(): int -> java.lang.String.hashCode(): int -> java.lang.Object.hashCode(): int -> java.lang.String.hashCode(): int -> java.lang.String.hashCode(): int -> java.lang.String.hashCode(): int -> java.lang.String.hashCode(): int -> java.lang.String.hashCode(): int -> java.util.Set.size(): int -> java.util.Set.size(): int -> java.util.Set.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.Set.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.Object.equals(java.lang.Object): boolean -> java.lang.Object.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.Object.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.Object.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.Set.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.Object.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.Object.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.Object.equals(java.lang.Object): boolean -> java.lang.Object.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.List.equals(java.lang.Object): boolean -> java.util.List.equals(java.lang.Object): boolean -> java.util.Set.equals(java.lang.Object): boolean -> java.util.Set.equals(java.lang.Object): boolean -> java.util.Set.equals(java.lang.Object): boolean -> java.util.Set.equals(java.lang.Object): boolean -> java.util.Set.equals(java.lang.Object): boolean -> java.util.Set.equals(java.lang.Object): boolean
 [CALL] -> java.lang.Object.equals(java.lang.Object): boolean [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Set.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Set.equals(java.lang.Object): boolean [CALL] -> java.util.Set.size(): int -> java.util.Set.size(): int -> java.util.Set.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean [EXIT] -> java.util.Set.addAll(java.util.Collection): boolean -> java.util.Set.addAll(java.util.Collection): boolean [CALL] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.Object.hashCode(): int [CALL] [CALL] -> java.lang.String.hashCode(): int [EXIT] -> java.lang.Object.hashCode(): int [CALL] [CALL] [EXIT] [CALL] -> java.lang.String.hashCode(): int [EXIT] [CALL] [EXIT] -> java.lang.String.hashCode(): int [CALL] [EXIT] -> java.lang.String.hashCode(): int [CALL] [EXIT] [CALL] -> java.lang.String.hashCode(): int [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] -> java.lang.String.hashCode(): int [EXIT] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.Object.hashCode(): int [CALL] [CALL] -> java.lang.String.hashCode(): int [EXIT] -> java.lang.Object.hashCode(): int [CALL] [CALL] [EXIT] [CALL] -> java.lang.String.hashCode(): int [EXIT] [CALL] [EXIT] -> java.lang.String.hashCode(): int [CALL] [EXIT] -> java.lang.String.hashCode(): int [CALL] [EXIT] [CALL] -> java.lang.String.hashCode(): int [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] -> java.lang.String.hashCode(): int [EXIT] [EXIT] -> java.util.Set.size(): int -> java.util.Set.size(): int -> java.util.Set.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.Set.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.Object.equals(java.lang.Object): boolean [CALL] [EXIT] [EXIT] -> java.lang.Object.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.Object.equals(java.lang.Object): boolean [CALL] [CALL] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] -> java.lang.Object.equals(java.lang.Object): boolean [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [CALL] [EXIT] [CALL] [EXIT] [CALL] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.Set.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.Object.equals(java.lang.Object): boolean [CALL] [CALL] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] -> java.lang.Object.equals(java.lang.Object): boolean [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [CALL] [EXIT] [CALL] [EXIT] [CALL] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.Object.equals(java.lang.Object): boolean [CALL] [EXIT] [EXIT] -> java.lang.Object.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.List.equals(java.lang.Object): boolean -> java.util.List.equals(java.lang.Object): boolean -> java.util.Set.equals(java.lang.Object): boolean -> java.util.Set.equals(java.lang.Object): boolean -> java.util.Set.equals(java.lang.Object): boolean -> java.util.Set.equals(java.lang.Object): boolean -> java.util.Set.equals(java.lang.Object): boolean -> java.util.Set.equals(java.lang.Object): boolean [EXIT]