private static IList<SyntaxNode> CreateGetHashCodeMethodStatements( SyntaxGenerator factory, Compilation compilation, INamedTypeSymbol containingType, IList<ISymbol> members, CancellationToken cancellationToken) { const string HashCodeName = "hashCode"; // -1521134295 var permuteValue = factory.NegateExpression( factory.LiteralExpression(1521134295)); var statements = new List<SyntaxNode>(); var hashCodeNameExpression = factory.IdentifierName(HashCodeName); var firstHashValue = ComputeHashValue(factory, compilation, members[0]); if (members.Count == 1) { #if false return this.S1.GetHashCode(); #endif statements.Add(factory.ReturnStatement(firstHashValue)); } else { #if false var hashCode = this.S1.GetHashCode(); #endif statements.Add(factory.LocalDeclarationStatement(HashCodeName, firstHashValue)); for (var i = 1; i < members.Count; i++) { #if false hashCode = hashCode * 0xA5555529 + value #endif statements.Add(factory.ExpressionStatement( factory.AssignmentStatement(hashCodeNameExpression, factory.AddExpression( factory.MultiplyExpression(hashCodeNameExpression, permuteValue), ComputeHashValue(factory, compilation, members[i]))))); } #if false return hashCode; #endif statements.Add(factory.ReturnStatement(hashCodeNameExpression)); } return statements; }