override public void LeaveBinaryExpression(BinaryExpression node) { if (CheckExpressionType(node.Right)) { CheckExpressionType(node.Left); } if (BinaryOperatorType.ReferenceEquality == node.Operator) { if (IsTypeReference(node.Right)) { Warnings.Add( CompilerWarningFactory.IsInsteadOfIsa(node)); } } //check that the assignment or comparison is meaningful if (BinaryOperatorType.Assign == node.Operator || AstUtil.GetBinaryOperatorKind(node) == BinaryOperatorKind.Comparison) { if (AreSameExpressions(node.Left, node.Right)) { Warnings.Add( (BinaryOperatorType.Assign == node.Operator) ? CompilerWarningFactory.AssignmentToSameVariable(node) : CompilerWarningFactory.ComparisonWithSameVariable(node) ); } else if (BinaryOperatorType.Assign != node.Operator && AreConstantExpressions(node.Left, node.Right)) { WarnAboutConstantExpression(node); } } }