1 #pragma warning disable 659 // overrides AddToHashCodeCombiner instead
\r
3 /* ****************************************************************************
\r
5 * Copyright (c) Microsoft Corporation. All rights reserved.
\r
7 * This software is subject to the Microsoft Public License (Ms-PL).
\r
8 * A copy of the license can be found in the license.htm file included
\r
9 * in this distribution.
\r
11 * You must not remove this notice, or any other, from this software.
\r
13 * ***************************************************************************/
\r
15 namespace System.Web.Mvc.ExpressionUtil {
\r
17 using System.Diagnostics.CodeAnalysis;
\r
18 using System.Linq.Expressions;
\r
20 // ConditionalExpression fingerprint class
\r
21 // Expression of form (test) ? ifTrue : ifFalse
\r
22 [SuppressMessage("Microsoft.Usage", "CA2218:OverrideGetHashCodeOnOverridingEquals",
\r
23 Justification = "Overrides AddToHashCodeCombiner() instead.")]
\r
24 internal sealed class ConditionalExpressionFingerprint : ExpressionFingerprint {
\r
26 private ConditionalExpressionFingerprint(ConditionalExpression expression)
\r
27 : base(expression) {
\r
30 public ExpressionFingerprint Test {
\r
35 public ExpressionFingerprint IfTrue {
\r
40 public ExpressionFingerprint IfFalse {
\r
45 internal override void AddToHashCodeCombiner(HashCodeCombiner combiner) {
\r
46 base.AddToHashCodeCombiner(combiner);
\r
48 combiner.AddFingerprint(Test);
\r
49 combiner.AddFingerprint(IfTrue);
\r
50 combiner.AddFingerprint(IfFalse);
\r
53 public static ConditionalExpressionFingerprint Create(ConditionalExpression expression, ParserContext parserContext) {
\r
54 // if any fingerprinting fails, bail out
\r
55 ExpressionFingerprint test = Create(expression.Test, parserContext);
\r
56 if (test == null && expression.Test != null) {
\r
60 ExpressionFingerprint ifTrue = Create(expression.IfTrue, parserContext);
\r
61 if (ifTrue == null && expression.IfTrue != null) {
\r
65 ExpressionFingerprint ifFalse = Create(expression.IfFalse, parserContext);
\r
66 if (ifFalse == null && expression.IfFalse != null) {
\r
70 return new ConditionalExpressionFingerprint(expression) {
\r
77 public override bool Equals(object obj) {
\r
78 ConditionalExpressionFingerprint other = obj as ConditionalExpressionFingerprint;
\r
79 if (other == null) {
\r
83 return (Object.Equals(this.Test, other.Test)
\r
84 && Object.Equals(this.IfTrue, other.IfTrue)
\r
85 && Object.Equals(this.IfFalse, other.IfFalse)
\r
86 && base.Equals(other));
\r
89 public override Expression ToExpression(ParserContext parserContext) {
\r
90 Expression testExpr = ToExpression(Test, parserContext);
\r
91 Expression ifTrueExpr = ToExpression(IfTrue, parserContext);
\r
92 Expression ifFalseExpr = ToExpression(IfFalse, parserContext);
\r
93 return Expression.Condition(testExpr, ifTrueExpr, ifFalseExpr);
\r