internal static object CallMethod(IScriptExtent errorPosition, object target, string methodName, PSMethodInvocationConstraints invocationConstraints, object[] paramArray, bool callStatic, object valueToSet) { PSMethodInfo staticCLRMember = null; MethodInformation methodInformation = null; object obj2 = null; PSObject obj3 = null; Type type; object obj4; if (LanguagePrimitives.IsNull(target)) { throw InterpreterError.NewInterpreterException(methodName, typeof(RuntimeException), errorPosition, "InvokeMethodOnNull", ParserStrings.InvokeMethodOnNull, new object[0]); } obj2 = PSObject.Base(target); obj3 = PSObject.AsPSObject(target); CallsiteCacheEntryFlags none = CallsiteCacheEntryFlags.None; if (callStatic) { none |= CallsiteCacheEntryFlags.Static; type = (Type)obj2; } else { type = obj2.GetType(); } if (valueToSet != AutomationNull.Value) { none |= CallsiteCacheEntryFlags.ParameterizedSetter; } if (!obj3.isDeserialized) { methodInformation = Adapter.FindCachedMethod(type, methodName, invocationConstraints, paramArray, none); } if (methodInformation == null) { if (callStatic) { staticCLRMember = PSObject.GetStaticCLRMember(target, methodName) as PSMethod; } else { staticCLRMember = obj3.Members[methodName] as PSMethodInfo; } if (staticCLRMember == null) { string fullName = null; if (callStatic) { fullName = type.FullName; } else { fullName = GetTypeFullName(target); } if (valueToSet == AutomationNull.Value) { throw InterpreterError.NewInterpreterException(methodName, typeof(RuntimeException), errorPosition, "MethodNotFound", ParserStrings.MethodNotFound, new object[] { fullName, methodName }); } throw InterpreterError.NewInterpreterException(methodName, typeof(RuntimeException), errorPosition, "ParameterizedPropertyAssignmentFailed", ParserStrings.ParameterizedPropertyAssignmentFailed, new object[] { fullName, methodName }); } } try { if (methodInformation != null) { object[] objArray; PSObject.memberResolution.WriteLine("cache hit, Calling Method: {0}", new object[] { methodInformation.methodDefinition }); if (valueToSet != AutomationNull.Value) { DotNetAdapter.ParameterizedPropertyInvokeSet(methodName, obj2, valueToSet, new MethodInformation[] { methodInformation }, paramArray, false); return(valueToSet); } MethodInformation[] methods = new MethodInformation[] { methodInformation }; Adapter.GetBestMethodAndArguments(methodName, methods, paramArray, out objArray); return(DotNetAdapter.AuxiliaryMethodInvoke(obj2, objArray, methodInformation, paramArray)); } if (valueToSet != AutomationNull.Value) { PSParameterizedProperty property = staticCLRMember as PSParameterizedProperty; if (property == null) { throw InterpreterError.NewInterpreterException(methodName, typeof(RuntimeException), errorPosition, "ParameterizedPropertyAssignmentFailed", ParserStrings.ParameterizedPropertyAssignmentFailed, new object[] { GetTypeFullName(target), methodName }); } property.InvokeSet(valueToSet, paramArray); return(valueToSet); } PSMethod method = staticCLRMember as PSMethod; if (method != null) { return(method.Invoke(invocationConstraints, paramArray)); } obj4 = staticCLRMember.Invoke(paramArray); } catch (MethodInvocationException exception) { if (exception.ErrorRecord.InvocationInfo == null) { exception.ErrorRecord.SetInvocationInfo(new InvocationInfo(null, errorPosition)); } throw; } catch (RuntimeException exception2) { if (exception2.ErrorRecord.InvocationInfo == null) { exception2.ErrorRecord.SetInvocationInfo(new InvocationInfo(null, errorPosition)); } throw; } catch (FlowControlException) { throw; } catch (ScriptCallDepthException) { throw; } catch (Exception exception3) { CommandProcessorBase.CheckForSevereException(exception3); throw InterpreterError.NewInterpreterExceptionByMessage(typeof(RuntimeException), errorPosition, exception3.Message, "MethodInvocationException", exception3); } return(obj4); }