public boolean equals(Object obj) {if (obj == this) {return true;}if (obj instanceof AttributeSource) {AttributeSource other = (AttributeSource) obj;if (hasAttributes()) {if (!other.hasAttributes()) {return false;}if (this.attributeImpls.size() != other.attributeImpls.size()) {return false;}State thisState = this.getCurrentState();State otherState = other.getCurrentState();while (thisState != null && otherState != null) {if (otherState.attribute.getClass() != thisState.attribute.getClass() || !otherState.attribute.equals(thisState.attribute)) {return false;}thisState = thisState.next;otherState = otherState.next;}return true;} else {return !other.hasAttributes();}} elsereturn false;}

public override bool Equals(object obj){if (obj == this){return true;}if (obj is AttributeSource other){if (HasAttributes){if (!other.HasAttributes){return false;}if (this.attributeImpls.Count != other.attributeImpls.Count){return false;}State thisState = this.GetCurrentState();State otherState = other.GetCurrentState();while (thisState != null && otherState != null){if (otherState.attribute.GetType() != thisState.attribute.GetType() || !otherState.attribute.Equals(thisState.attribute)){return false;}thisState = thisState.next;otherState = otherState.next;}return true;}else{return !other.HasAttributes;}}else{return false;}}
