internal static CodeStatement Clone(CodeStatement statement)
        {
            if (statement == null)
            {
                return(null);
            }
            RuleCodeDomStatement ruleStmt = GetStatement(statement);

            return(ruleStmt.Clone());
        }
        internal static bool Match(CodeStatement firstStatement, CodeStatement secondStatement)
        {
            // If they're both null, they match.
            if (firstStatement == null && secondStatement == null)
            {
                return(true);
            }

            // If only one of them is null, there's no match.
            if (firstStatement == null || secondStatement == null)
            {
                return(false);
            }

            if (firstStatement.GetType() != secondStatement.GetType())
            {
                return(false);
            }

            RuleCodeDomStatement ruleStmt = GetStatement(firstStatement);

            return(ruleStmt.Match(secondStatement));
        }
        private static RuleCodeDomStatement GetStatement(CodeStatement statement)
        {
            Type statementType = statement.GetType();

            RuleCodeDomStatement wrapper = null;

            if (statementType == typeof(CodeExpressionStatement))
            {
                wrapper = ExpressionStatement.Create(statement);
            }
            else if (statementType == typeof(CodeAssignStatement))
            {
                wrapper = AssignmentStatement.Create(statement);
            }
            else
            {
                string message = string.Format(CultureInfo.CurrentCulture, Messages.CodeStatementNotHandled, statement.GetType().FullName);
                NotSupportedException exception = new NotSupportedException(message);
                exception.Data[RuleUserDataKeys.ErrorObject] = statement;
                throw exception;
            }

            return(wrapper);
        }
        internal static void Decompile(StringBuilder stringBuilder, CodeStatement statement)
        {
            RuleCodeDomStatement ruleStmt = GetStatement(statement);

            ruleStmt.Decompile(stringBuilder);
        }
        internal static void AnalyzeUsage(RuleAnalysis analysis, CodeStatement statement)
        {
            RuleCodeDomStatement ruleStmt = GetStatement(statement);

            ruleStmt.AnalyzeUsage(analysis);
        }
        internal static void Execute(RuleExecution execution, CodeStatement statement)
        {
            RuleCodeDomStatement ruleStmt = GetStatement(statement);

            ruleStmt.Execute(execution);
        }
        public static bool Validate(RuleValidation validation, CodeStatement statement)
        {
            RuleCodeDomStatement ruleStmt = GetStatement(statement);

            return(ruleStmt.Validate(validation));
        }