Beispiel #1
0
        public CompiledExpressionInvoker(ITextExpression expression, bool isReference, CodeActivityMetadata metadata)
        {
            if (metadata == null)
            {
                throw FxTrace.Exception.ArgumentNull(nameof(metadata));
            }

            this.expressionId       = -1;
            this.textExpression     = expression ?? throw FxTrace.Exception.ArgumentNull(nameof(expression));
            this.expressionActivity = expression as Activity;
            this.isReference        = isReference;
            this.locationReferences = new List <LocationReference>();
            this.metadata           = metadata;
            this.accessor           = CodeActivityPublicEnvironmentAccessor.Create(this.metadata);

            if (this.expressionActivity == null)
            {
                throw FxTrace.Exception.Argument(nameof(expression), SR.ITextExpressionParameterMustBeActivity);
            }

            var resultActivity = this.expressionActivity as ActivityWithResult;

            this.metadataRoot = metadata.Environment.Root;

            this.ProcessLocationReferences();
        }
Beispiel #2
0
        protected override void CacheMetadata(CodeActivityMetadata metadata)
        {
            CodeActivityPublicEnvironmentAccessor publicAccessor = CodeActivityPublicEnvironmentAccessor.Create(metadata);

            // We need to rewrite the tree.
            Expression newTree;

            if (ExpressionUtilities.TryRewriteLambdaExpression(_locationExpression, out newTree, publicAccessor, true))
            {
                _rewrittenTree = (Expression <Func <ActivityContext, T> >)newTree;
            }
            else
            {
                _rewrittenTree = _locationExpression;
            }

            // inspect the expressionTree to see if it is a valid location expression(L-value)
            string extraErrorMessage = null;

            if (!ExpressionUtilities.IsLocation(_rewrittenTree, typeof(T), out extraErrorMessage))
            {
                string errorMessage = SR.InvalidLValueExpression;
                if (extraErrorMessage != null)
                {
                    errorMessage += ":" + extraErrorMessage;
                }
                metadata.AddValidationError(errorMessage);
            }
        }
Beispiel #3
0
        protected override void CacheMetadata(CodeActivityMetadata metadata)
        {
            CodeActivityPublicEnvironmentAccessor publicAccessor = CodeActivityPublicEnvironmentAccessor.Create(metadata);

            // We need to rewrite the tree.
            if (ExpressionUtilities.TryRewriteLambdaExpression(this.lambdaValue, out Expression newTree, publicAccessor))
            {
                this.rewrittenTree = (Expression <Func <ActivityContext, TResult> >)newTree;
            }
Beispiel #4
0
        protected override void CacheMetadata(CodeActivityMetadata metadata)
        {
            var publicAccessor = CodeActivityPublicEnvironmentAccessor.Create(metadata);

            // We need to rewrite the tree.
            if (ExpressionUtilities.TryRewriteLambdaExpression(this.locationExpression, out var newTree, publicAccessor, true))
            {
                this.rewrittenTree = (Expression <Func <ActivityContext, T> >)newTree;
            }
        protected override void CacheMetadata(CodeActivityMetadata metadata)
        {
            expressionTree = null;
            invoker        = new CompiledExpressionInvoker(this, true, metadata);
            if (metadata.Environment.CompileExpressions)
            {
                return;
            }
            string validationError;
            // If ICER is not implemented that means we haven't been compiled
            var publicAccessor = CodeActivityPublicEnvironmentAccessor.Create(metadata);

            expressionTree = CompileLocationExpression(publicAccessor, out validationError);
            if (validationError != null)
            {
                metadata.AddValidationError(validationError);
            }
        }
Beispiel #6
0
        protected override void CacheMetadata(CodeActivityMetadata metadata)
        {
            expressionTree = null;
            invoker        = new CompiledExpressionInvoker(this, false, metadata);
            if (metadata.Environment.CompileExpressions)
            {
                return;
            }
            // If ICER is not implemented that means we haven't been compiled
            var publicAccessor = CodeActivityPublicEnvironmentAccessor.Create(metadata);

            try
            {
                expressionTree = VisualBasicHelper.Compile <TResult>(this.ExpressionText, publicAccessor, false);
            }
            catch (SourceExpressionException e)
            {
                metadata.AddValidationError(e.Message);
            }
        }