public static TypeAnalysis <T> Analyze() { TypeAnalysis <T> analysis = new TypeAnalysis <T>(); AnalyzeEquals(analysis); AnalyzeGetHashCode(analysis); AnalyzeEqualityOperator(analysis); AnalyzeInequalityOperator(analysis); AnalyzeEquatable(analysis); AnalyzeSealed(analysis); return(analysis); }
public EqualityTester(T targetObject) { this.TargetObject = targetObject; this.Analysis = TypeAnalysis <T> .Analyze(); this.Rules.AddRange(this.Analysis.TypeLevelRules); if (!typeof(T).IsValueType) { this.Rules.AddRange(this.Analysis.GetNotEqualRules(TargetObject, default(T), "inequality to null")); this.Rules.AddRange(this.Analysis.GetEqualityOfTwoNulls()); } }
private static void AnalyzeSealed(TypeAnalysis <T> analysis) { analysis.Rules.Add(new Rules.IsTypeSealed <T>()); }
private static void AnalyzeEquatable(TypeAnalysis <T> analysis) { Rules.ImplementsIEquatable <T> rule = new Rules.ImplementsIEquatable <T>(); analysis.StrongEqualsMethod = rule.TryGetTargetMethod(); analysis.Rules.Add(rule); }
private static void AnalyzeInequalityOperator(TypeAnalysis <T> analysis) { Rules.ImplementsMethod <T> rule = new Rules.OverloadsInequalityOperator <T>(); analysis.InequalityOperator = rule.TryGetTargetMethod(); analysis.Rules.Add(rule); }
private static void AnalyzeGetHashCode(TypeAnalysis <T> analysis) { Rules.ImplementsMethod <T> rule = new Rules.OverridesGetHashCode <T>(); analysis.GetHashCodeMethod = rule.TryGetTargetMethod(); analysis.Rules.Add(rule); }
private static void AnalyzeEquals(TypeAnalysis <T> analysis) { Rules.ImplementsMethod <T> rule = new Rules.OverridesEquals <T>(); analysis.EqualsMethod = rule.TryGetTargetMethod(); analysis.Rules.Add(rule); }