boolean (Object obj) { if (obj == this) return true; if (!(obj instanceof DFAType other)) return false; if (!eq(primary, other.primary)) return false; if (mixins.size() != other.mixins.size()) return false; for (Mixin mixin1 : mixins) { boolean contains = false; for (Mixin mixin2 : other.mixins) { if (mixin1.equals(mixin2)) { contains = mixin1.myNegated == mixin2.myNegated; break; } } if (!contains) return false; } return true; }