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); }
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)); }
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); }
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; }
/// <summary/> public virtual object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) { return null; }
public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) { throw PSTraceSource.NewArgumentException("ast"); }
public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) { throw new UnexpectedElementException(); }
public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst memberExpressionAst) { CheckMemberAccess(memberExpressionAst); return AstVisitAction.Continue; }
/// <summary/> public virtual AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst) => DefaultVisit(methodCallAst);
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); }
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); }
public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst) { return AstVisitAction.SkipChildren; }
public InvokeMember(string methodName, InvokeMemberExpressionAst ast) { MethodName = methodName; Ast = ast; }
public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst ast) { return(Check(ast)); }
internal SettableInvokeMemberExpression(InvokeMemberExpressionAst expressionAst, ExecutionVisitor currentExecution) : base(expressionAst, currentExecution) { _expressionAst = expressionAst; }
public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) { return(false); }
public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst) { this.ReportError(methodCallAst, () => ParserStrings.MethodCallNotSupportedInDataSection, new object[0]); return(AstVisitAction.Continue); }
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; }
public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst ast) { return this.Check(ast); }
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; }
public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst) { throw new NotImplementedException(); //VisitInvokeMemberExpression(methodCallAst); }
/// <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; }
public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) { return AutomationNull.Value; }
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; }
public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) { throw PSTraceSource.NewArgumentException("ast"); }
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()); }
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; }
public virtual AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst) { return AstVisitAction.Continue; }
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); }
/// <summary/> public virtual object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) { return(null); }
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); }
public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) { return false; }
public InvokeMethodPatcher(string newMethodName, InvokeMemberExpressionAst ast, PSScriptAst rootAst) : base(rootAst) { this.newMethodName = newMethodName; this.ast = ast; }
/// <summary/> public virtual AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst) { return(AstVisitAction.Continue); }
public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst methodCallAst) { this.ReportError(methodCallAst, () => ParserStrings.MethodCallNotSupportedInDataSection, new object[0]); return AstVisitAction.Continue; }
public object VisitInvokeMemberExpression(InvokeMemberExpressionAst invokeMemberExpressionAst) { return(AutomationNull.Value); }
public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressionAst ast) { return CheckParent(ast); }