private static MethodDeclaration BuildObjectEqualsMethod(RecordDeclaration record) { var statements = new IWriteableCode[] { new Statement($"return this.Equals(other as {record.Name});") }; return(new MethodDeclaration( "Equals", "bool", Visibility.Public, isStatic: false, isOverride: true, parameters: new [] { new Parameter("other", "object") }, contents: statements)); }
private static MethodDeclaration BuildEqualsMethod(RecordDeclaration record) { var propComparisons = record.RecordProperties.Select(p => $"{Environment.NewLine}&& Equals({p.Name}, other.{p.Name}) "); var statements = new IWriteableCode[] { new Statement($"return !(other is null) {String.Join("", propComparisons)};") }; return(new MethodDeclaration( "Equals", "bool", Visibility.Public, isStatic: false, isOverride: false, parameters: new [] { new Parameter("other", record.Name) }, contents: statements)); }
private static MethodDeclaration BuildToStringMethod(RecordDeclaration record) { var propNames = String.Join($",{Environment.NewLine}", record.RecordProperties.Select(p => $"$\"{p.Name} = {{{p.Name}}}\"")); var statements = new IWriteableCode[] { new Statement($"var elements = new string[] {{"), new Statement($"var elements = new string[] {{ {propNames} }};"), new Statement($"}};"), new Statement($"var s = System.String.Join(\", \", elements);"), new Statement($"return $\"{record.Name} {{{{ {{s}} }}}}\";") }; return(new MethodDeclaration( "ToString", "string", Visibility.Public, isStatic: false, isOverride: true, parameters: new Parameter[] { }, contents: statements)); }