Exemplo n.º 1
0
 public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst)
 {
     invokeMemberExpressionAst.Expression.Accept(this);
     invokeMemberExpressionAst.Member.Accept(this);
     if (invokeMemberExpressionAst.Arguments != null)
     {
         foreach (ExpressionAst ast in invokeMemberExpressionAst.Arguments)
         {
             ast.Accept(this);
         }
     }
     return(null);
 }
Exemplo n.º 2
0
    public System.Object VisitInvokeMemberExpression(System.Management.Automation.Language.InvokeMemberExpressionAst invokeMemberExpressionAst)
    {
        IScriptExtent mappedExtent = MapExtent(invokeMemberExpressionAst.Extent);

        ExpressionAst              mappedExpression = _VisitExpression(invokeMemberExpressionAst.Expression);
        CommandElementAst          mappedMethod     = _VisitCommandElement(invokeMemberExpressionAst.Member);
        LinkedList <ExpressionAst> mappedArguments  = new LinkedList <ExpressionAst>();

        if (invokeMemberExpressionAst.Arguments != null)
        {
            foreach (ExpressionAst e in invokeMemberExpressionAst.Arguments)
            {
                mappedArguments.AddLast(_VisitExpression(e));
            }
        }

        return(new InvokeMemberExpressionAst(mappedExtent, mappedExpression, mappedMethod, mappedArguments, invokeMemberExpressionAst.Static));
    }
Exemplo n.º 3
0
 public override object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst)
 {
     var newExpression = VisitElement(invokeMemberExpressionAst.Expression);
     CommandElementAst newMethod;
     if (invokeMemberExpressionAst == ast)
     {
         newMethod = new StringConstantExpressionAst(invokeMemberExpressionAst.Member.Extent, newMethodName,
             ((StringConstantExpressionAst) invokeMemberExpressionAst.Member).StringConstantType);
         rootAst.ModifiedAsts.Add(newMethod);
     }
     else
     {
         newMethod = VisitElement(invokeMemberExpressionAst.Member);
     }
     var newArguments = VisitElements(invokeMemberExpressionAst.Arguments);
     return new InvokeMemberExpressionAst(invokeMemberExpressionAst.Extent, newExpression, newMethod,
         newArguments, invokeMemberExpressionAst.Static);
 }
Exemplo n.º 4
0
        public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst)
        {
            var expression = methodCallAst.Expression;

            Type type;
            object obj;
            if (expression is TypeExpressionAst)
            {
                obj = null;
                type = ((TypeExpressionAst)expression).TypeName.GetReflectionType();
            }
            else
            {
                obj = EvaluateAst(expression);
                if (obj is PSObject) { obj = ((PSObject)obj).BaseObject; }
                type = obj.GetType();
            }

            var arguments = methodCallAst.Arguments.Select(EvaluateAst).Select(o => o is PSObject ? ((PSObject)o).BaseObject : o);

            if (methodCallAst.Member is StringConstantExpressionAst)
            {
                var name = (methodCallAst.Member as StringConstantExpressionAst).Value;
                var method = type.GetMethod(name, arguments.Select(a => a.GetType()).ToArray());
                var result = method.Invoke(obj, arguments.ToArray());

                _pipelineCommandRuntime.WriteObject(result);
                return AstVisitAction.SkipChildren;
            }

            throw new NotImplementedException(this.ToString());
        }
 /// <summary/>
 public virtual object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst)
 {
     return _decorated.VisitInvokeMemberExpression(invokeMemberExpressionAst);
 }
        /// <summary>
        /// Get the type from an invoke member expression ast
        /// </summary>
        /// <param name="type"></param>
        /// <param name="imeAst"></param>
        /// <param name="methodName"></param>
        /// <param name="isStatic"></param>
        /// <returns></returns>
        internal static Type GetTypeFromInvokeMemberAst(Type type, InvokeMemberExpressionAst imeAst, string methodName, bool isStatic)
        {
            Type result = null;

            MethodInfo[] methods = (isStatic) ? type.GetMethods(BindingFlags.Public | BindingFlags.Static) : type.GetMethods(BindingFlags.Public | BindingFlags.Instance);
            int argCounts = (imeAst.Arguments != null) ? imeAst.Arguments.Count : 0;

            MethodInfo[] possibleMethods = methods.Where(method => String.Equals(method.Name, methodName, StringComparison.OrdinalIgnoreCase)
                && method.GetParameters().Length == argCounts).ToArray();

            if (possibleMethods.Length != 0)
            {
                Type first = possibleMethods[0].ReturnType;
                if (first != typeof(void) && first != null
                    && possibleMethods.All(method => method.ReturnType == first))
                {
                    result = first;
                }
            }

            return result;
        }
        public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst imeAst)
        {
            if (imeAst == null)
            {
                return AstVisitAction.SkipChildren;
            }

            TypeExpressionAst typeAst = imeAst.Expression as TypeExpressionAst;

            if (typeAst == null || typeAst.TypeName == null || typeAst.TypeName.FullName == null)
            {
                return AstVisitAction.SkipChildren;
            }

            if (typeAst.TypeName.FullName.EndsWith("console", StringComparison.OrdinalIgnoreCase)
                && !String.IsNullOrWhiteSpace(imeAst.Member.Extent.Text) && imeAst.Member.Extent.Text.StartsWith("Write", StringComparison.OrdinalIgnoreCase))
            {
                records.Add(new DiagnosticRecord(String.Format(CultureInfo.CurrentCulture, Strings.AvoidUsingConsoleWriteError, System.IO.Path.GetFileName(fileName), imeAst.Member.Extent.Text),
                    imeAst.Extent, GetName(), DiagnosticSeverity.Warning, fileName));
            }

            return AstVisitAction.Continue;
        }
Exemplo n.º 8
0
 /// <summary/>
 public virtual object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) { return null; }
Exemplo n.º 9
0
 public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst)
 {
     throw PSTraceSource.NewArgumentException("ast");
 }
 public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) { throw new UnexpectedElementException(); }
Exemplo n.º 11
0
 public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst memberExpressionAst)
 {
     CheckMemberAccess(memberExpressionAst);
     return AstVisitAction.Continue;
 }
Exemplo n.º 12
0
 /// <summary/>
 public virtual AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst) => DefaultVisit(methodCallAst);
Exemplo n.º 13
0
 public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst)
 {
     PSMethodInvocationConstraints invokeMemberConstraints = GetInvokeMemberConstraints(invokeMemberExpressionAst);
     StringConstantExpressionAst member = invokeMemberExpressionAst.Member as StringConstantExpressionAst;
     if (member == null)
     {
         throw new NotImplementedException("invoke member w/ expression name");
     }
     Expression target = this.CompileExpressionOperand(invokeMemberExpressionAst.Expression);
     IEnumerable<Expression> args = (invokeMemberExpressionAst.Arguments == null) ? ((IEnumerable<Expression>) new Expression[0]) : invokeMemberExpressionAst.Arguments.Select<ExpressionAst, Expression>(new Func<ExpressionAst, Expression>(this.CompileExpressionOperand));
     return InvokeMember(member.Value, invokeMemberConstraints, target, args, invokeMemberExpressionAst.Static, false);
 }
Exemplo n.º 14
0
 internal static PSMethodInvocationConstraints GetInvokeMemberConstraints(InvokeMemberExpressionAst invokeMemberExpressionAst)
 {
     ReadOnlyCollection<ExpressionAst> arguments = invokeMemberExpressionAst.Arguments;
     return CombineTypeConstraintForMethodResolution(GetTypeConstraintForMethodResolution(invokeMemberExpressionAst.Expression), (arguments != null) ? arguments.Select<ExpressionAst, Type>(new Func<ExpressionAst, Type>(Compiler.GetTypeConstraintForMethodResolution)) : null);
 }
Exemplo n.º 15
0
 public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst) { return AstVisitAction.SkipChildren; }
Exemplo n.º 16
0
 public InvokeMember(string methodName, InvokeMemberExpressionAst ast)
 {
     MethodName = methodName;
     Ast = ast;
 }
Exemplo n.º 17
0
 public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst ast)
 {
     return(Check(ast));
 }
Exemplo n.º 18
0
 internal SettableInvokeMemberExpression(InvokeMemberExpressionAst expressionAst, ExecutionVisitor currentExecution)
     : base(expressionAst, currentExecution)
 {
     _expressionAst = expressionAst;
 }
Exemplo n.º 19
0
 public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst)
 {
     return(false);
 }
Exemplo n.º 20
0
 public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst)
 {
     this.ReportError(methodCallAst, () => ParserStrings.MethodCallNotSupportedInDataSection, new object[0]);
     return(AstVisitAction.Continue);
 }
Exemplo n.º 21
0
 public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst)
 {
     string memberName;
     var method = GetPSObjectMemberFromMemberExpression(methodCallAst, out memberName) as PSMethodInfo;
     if (method == null)
     {
         throw new PSArgumentException(String.Format("The object has no method called '{0}'", memberName));
     }
     var arguments = methodCallAst.Arguments.Select(EvaluateAst).Select(o => o is PSObject ? ((PSObject)o).BaseObject : o);
     var result = method.Invoke(arguments.ToArray());
     if (result != null)
     {
         _pipelineCommandRuntime.WriteObject(PSObject.AsPSObject(result));
     }
     return AstVisitAction.SkipChildren;
 }
Exemplo n.º 22
0
 public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst ast)
 {
     return this.Check(ast);
 }
Exemplo n.º 23
0
 public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst)
 {
     invokeMemberExpressionAst.Expression.Accept(this);
     invokeMemberExpressionAst.Member.Accept(this);
     if (invokeMemberExpressionAst.Arguments != null)
     {
         foreach (ExpressionAst ast in invokeMemberExpressionAst.Arguments)
         {
             ast.Accept(this);
         }
     }
     return null;
 }
Exemplo n.º 24
0
 public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst)
 {
     throw new NotImplementedException(); //VisitInvokeMemberExpression(methodCallAst);
 }
Exemplo n.º 25
0
 /// <summary>
 /// Visit InvokeMemberExpression
 /// </summary>
 /// <param name="invokeMemberExpressionAst"></param>
 /// <returns></returns>
 public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst)
 {
     if (invokeMemberExpressionAst == null) return null;
     invokeMemberExpressionAst.Expression.Visit(this.Decorator);
     invokeMemberExpressionAst.Member.Visit(this.Decorator);
     if (invokeMemberExpressionAst.Arguments != null)
     {
         foreach (var arg in invokeMemberExpressionAst.Arguments)
         {
             arg.Visit(this.Decorator);
         }
     }
     return null;
 }
Exemplo n.º 26
0
 public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) { return AutomationNull.Value; }
Exemplo n.º 27
0
 public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst)
 {
     var psobj = PSObject.WrapOrNull(EvaluateAst(methodCallAst.Expression, false));
     if (psobj == null)
     {
         throw new PSInvalidOperationException("Cannot invoke a method of a NULL expression");
     }
     var memberNameObj = EvaluateAst(methodCallAst.Member, false);
     var method = PSObject.GetMemberInfoSafe(psobj, memberNameObj, methodCallAst.Static) as PSMethodInfo;
     if (method == null)
     {
         var msg = String.Format("The object has no method called '{0}'", memberNameObj.ToString());
         throw new PSArgumentException(msg);
     }
     var arguments = methodCallAst.Arguments.Select(EvaluateAst).Select(o => o is PSObject ? ((PSObject)o).BaseObject : o);
     var result = method.Invoke(arguments.ToArray());
     if (result != null)
     {
         _pipelineCommandRuntime.WriteObject(PSObject.AsPSObject(result));
     }
     return AstVisitAction.SkipChildren;
 }
Exemplo n.º 28
0
 public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) { throw PSTraceSource.NewArgumentException("ast"); }
Exemplo n.º 29
0
        public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst)
        {
            var expression = methodCallAst.Expression;

            ObjectInfo objectInfo = GetObjectInfo(expression);

            var arguments = methodCallAst.Arguments.Select(EvaluateAst).Select(o => o is PSObject ? ((PSObject)o).BaseObject : o);

            if (methodCallAst.Member is StringConstantExpressionAst)
            {
                var name = (methodCallAst.Member as StringConstantExpressionAst).Value;
                var method = objectInfo.GetMethod(name, arguments, methodCallAst.Static);

                var result = method.Invoke(objectInfo.Object, arguments.ToArray());

                _pipelineCommandRuntime.WriteObject(result);
                return AstVisitAction.SkipChildren;
            }

            throw new NotImplementedException(this.ToString());
        }
Exemplo n.º 30
0
 public static void PatchInvokeMethod(this PSScriptAst psScriptAst, string newMethodName, InvokeMemberExpressionAst ast)
 {
     var patchedAst = psScriptAst.ScriptBlockAst.Visit(new InvokeMethodPatcher(newMethodName, ast, psScriptAst)) as ScriptBlockAst;
     psScriptAst.ScriptBlockAst = patchedAst;
 }
Exemplo n.º 31
0
 public virtual AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst)
 {
     return AstVisitAction.Continue;
 }
Exemplo n.º 32
0
 internal static PSMethodInvocationConstraints GetInvokeMemberConstraints(InvokeMemberExpressionAst invokeMemberExpressionAst)
 {
     var arguments = invokeMemberExpressionAst.Arguments;
     var targetTypeConstraint = GetTypeConstraintForMethodResolution(invokeMemberExpressionAst.Expression);
     return CombineTypeConstraintForMethodResolution(targetTypeConstraint,
         arguments != null ? arguments.Select(Compiler.GetTypeConstraintForMethodResolution).ToArray() : null);
 }
Exemplo n.º 33
0
 /// <summary/>
 public virtual object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst)
 {
     return(null);
 }
Exemplo n.º 34
0
        public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst)
        {
            var constraints = GetInvokeMemberConstraints(invokeMemberExpressionAst);

            var target = CompileExpressionOperand(invokeMemberExpressionAst.Expression);
            var args = CompileInvocationArguments(invokeMemberExpressionAst.Arguments);

            var memberNameAst = invokeMemberExpressionAst.Member as StringConstantExpressionAst;
            if (memberNameAst != null)
            {
                return InvokeMember(memberNameAst.Value, constraints, target,
                                    args, invokeMemberExpressionAst.Static, false);
            }

            var memberNameExpr = Compile(invokeMemberExpressionAst.Member);
            return InvokeDynamicMember(memberNameExpr, constraints, target,
                                       args, invokeMemberExpressionAst.Static, false);
        }
Exemplo n.º 35
0
 public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst)
 {
     return false;
 }
Exemplo n.º 36
0
 public InvokeMethodPatcher(string newMethodName, InvokeMemberExpressionAst ast, PSScriptAst rootAst)
     : base(rootAst)
 {
     this.newMethodName = newMethodName;
     this.ast = ast;
 }
Exemplo n.º 37
0
 /// <summary/>
 public virtual AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst)
 {
     return(AstVisitAction.Continue);
 }
Exemplo n.º 38
0
 public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst)
 {
     this.ReportError(methodCallAst, () => ParserStrings.MethodCallNotSupportedInDataSection, new object[0]);
     return AstVisitAction.Continue;
 }
Exemplo n.º 39
0
 public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst)
 {
     return(AutomationNull.Value);
 }
Exemplo n.º 40
0
 public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst ast) { return CheckParent(ast); }