@@ -214,32 +214,38 @@ protected IReadOnlyList<MemberDeclarationSyntax> CreateMutableProperties()
214214 SyntaxFactory . ArgumentList ( ) ) ) ) ) ) ) ,
215215 SyntaxFactory . ReturnStatement ( Syntax . OptionalValue ( thisField ) ) )
216216 : SyntaxFactory . Block ( SyntaxFactory . ReturnStatement ( thisField ) ) ;
217- var setterCondition = field . IsGeneratedImmutableType
218- ? SyntaxFactory . BinaryExpression (
217+ var setterValueArg = SyntaxFactory . IdentifierName ( "value" ) ;
218+ var setterCondition = field . IsGeneratedImmutableType ?
219+ SyntaxFactory . BinaryExpression (
219220 SyntaxKind . LogicalOrExpression ,
220221 optionalFieldNotYetDefined ,
221222 SyntaxFactory . BinaryExpression (
222223 SyntaxKind . NotEqualsExpression ,
223224 Syntax . OptionalValue ( thisField ) ,
224- SyntaxFactory . IdentifierName ( "value" ) ) )
225- : SyntaxFactory . BinaryExpression (
226- SyntaxKind . NotEqualsExpression ,
225+ setterValueArg ) ) :
226+ HasEqualityOperators ( field . Symbol . Type ) ?
227+ SyntaxFactory . BinaryExpression (
228+ SyntaxKind . NotEqualsExpression ,
229+ thisField ,
230+ setterValueArg ) :
231+ null ;
232+ var setterSignificantBlock = SyntaxFactory . Block (
233+ SyntaxFactory . ExpressionStatement ( SyntaxFactory . AssignmentExpression (
234+ SyntaxKind . SimpleAssignmentExpression ,
227235 thisField ,
228- SyntaxFactory . IdentifierName ( "value" ) ) ;
229- var setterBlock = SyntaxFactory . Block (
230- SyntaxFactory . IfStatement (
231- setterCondition ,
232- SyntaxFactory . Block (
233- SyntaxFactory . ExpressionStatement ( SyntaxFactory . AssignmentExpression (
234- SyntaxKind . SimpleAssignmentExpression ,
235- thisField ,
236- SyntaxFactory . IdentifierName ( "value" ) ) ) ,
237- SyntaxFactory . ExpressionStatement (
238- SyntaxFactory . InvocationExpression (
239- SyntaxFactory . MemberAccessExpression (
240- SyntaxKind . SimpleMemberAccessExpression ,
241- SyntaxFactory . ThisExpression ( ) ,
242- OnPropertyChangedMethodName ) ) ) ) ) ) ;
236+ setterValueArg ) ) ,
237+ SyntaxFactory . ExpressionStatement (
238+ SyntaxFactory . InvocationExpression (
239+ SyntaxFactory . MemberAccessExpression (
240+ SyntaxKind . SimpleMemberAccessExpression ,
241+ SyntaxFactory . ThisExpression ( ) ,
242+ OnPropertyChangedMethodName ) ) ) ) ;
243+ var setterBlock = setterCondition != null ?
244+ SyntaxFactory . Block (
245+ SyntaxFactory . IfStatement (
246+ setterCondition ,
247+ setterSignificantBlock ) ) :
248+ setterSignificantBlock ;
243249
244250 var property = SyntaxFactory . PropertyDeclaration (
245251 this . GetPropertyTypeForBuilder ( field ) ,
0 commit comments