public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != GetType()) return false;
var value = obj as ComplexBuiltins;
if (value == null) return false;
return
ObjectProperty != null && value.ObjectProperty != null &&
ObjectProperty.Equals(value.ObjectProperty) &&
StringProperty != null && value.StringProperty != null &&
StringProperty.Equals(value.StringProperty);
}