public InvocationListElement(IList <object> elements, IServiceProvider services) { this.HandleFirstElement(elements, services); LinkElements(elements); Resolve(elements, services); this.myTail = (MemberElement)elements[elements.Count - 1]; }
public void Link(MemberElement nextElement) { this.myNext = nextElement; var flag = nextElement != null; if (flag) { nextElement.myPrevious = this; } }
private void BindToMethod(ICollection <MethodInfo> methods, MemberElement previous, Type[] argTypes) { var customInfos = new List <CustomMethodInfo>(); methods.Each(m => customInfos.Add(new CustomMethodInfo(m))); //try //{ // var enumerator = methods.GetEnumerator(); // while (enumerator.MoveNext()) // { // var mi = enumerator.Current; // var cmi = new CustomMethodInfo(mi); // customInfos.Add(cmi); // } //} //finally //{ // IEnumerator<MethodInfo> enumerator; // if (enumerator != null) // { // enumerator.Dispose(); // } //} var arr = customInfos.ToArray(); customInfos.Clear(); var array = arr; checked { for (var i = 0; i < array.Length; i++) { var cmi2 = array[i]; var flag = cmi2.IsMatch(argTypes); if (flag) { customInfos.Add(cmi2); } } var flag2 = customInfos.Count == 0; if (flag2) { this.ThrowFunctionNotFoundException(previous); } else { this.ResolveOverloads(customInfos.ToArray(), previous, argTypes); } } }
private void ThrowNoAccessibleMethodsException(MemberElement previous) { var flag = previous == null; if (flag) { this.ThrowCompileException("NoAccessibleMatches", CompileExceptionReason.AccessDenied, this.myName, this.myArguments); } else { this.ThrowCompileException("NoAccessibleMatchesOnType", CompileExceptionReason.AccessDenied, this.myName, this.myArguments, previous.TargetType.Name); } }
private void ThrowFunctionNotFoundException(MemberElement previous) { var flag = previous == null; if (flag) { this.ThrowCompileException("UndefinedFunction", CompileExceptionReason.UndefinedName, this.myName, this.myArguments); } else { this.ThrowCompileException("UndefinedFunctionOnType", CompileExceptionReason.UndefinedName, this.myName, this.myArguments, previous.TargetType.Name); } }
private void AddReferencedVariable(MemberElement previous) { var flag = previous != null; if (!flag) { var flag2 = this.myVariableType != null || this.myOptions.IsOwnerType(this.MemberOwnerType); if (flag2) { var info = (ExpressionInfo)this.myServices.GetService(typeof(ExpressionInfo)); info.AddReferencedVariable(this.myName); } } }
private static void LinkElements(IList <object> elements) { var num = elements.Count - 1; for (var i = 0; i <= num; i++) { var current = (MemberElement)elements[i]; MemberElement nextElement = null; var flag = i + 1 < elements.Count; if (flag) { nextElement = (MemberElement)elements[i + 1]; } current.Link(nextElement); } }
private bool ResolveVirtualProperty(MemberElement previous) { var flag = previous == null; bool resolveVirtualProperty; if (flag) { resolveVirtualProperty = false; } else { var coll = TypeDescriptor.GetProperties(previous.ResultType); this.myPropertyDescriptor = coll.Find(this.myName, true); resolveVirtualProperty = this.myPropertyDescriptor != null; } return(resolveVirtualProperty); }
private bool ResolveFieldProperty(MemberElement previous) { var members = this.GetMembers(MemberTypes.Field | MemberTypes.Property); members = this.GetAccessibleMembers(members); var flag = members.Length == 0; var resolveFieldProperty = false; if (flag) { resolveFieldProperty = this.ResolveVirtualProperty(previous); } else { var flag2 = members.Length > 1; if (flag2) { var flag3 = previous == null; if (flag3) { this.ThrowCompileException("IdentifierIsAmbiguous", CompileExceptionReason.AmbiguousMatch, this.myName); } else { this.ThrowCompileException("IdentifierIsAmbiguousOnType", CompileExceptionReason.AmbiguousMatch, this.myName, previous.TargetType.Name); } } else { this.myField = members[0] as FieldInfo; var flag4 = this.myField != null; if (flag4) { resolveFieldProperty = true; } else { this.myProperty = (PropertyInfo)members[0]; resolveFieldProperty = true; } } } return(resolveFieldProperty); }
private void ResolveOverloads(CustomMethodInfo[] infos, MemberElement previous, Type[] argTypes) { var array = infos; checked { for (var i = 0; i < array.Length; i++) { var cmi = array[i]; cmi.ComputeScore(argTypes); } Array.Sort(infos); infos = this.GetAccessibleInfos(infos); var flag = infos.Length == 0; if (flag) { this.ThrowNoAccessibleMethodsException(previous); } this.DetectAmbiguousMatches(infos); this.myTargetMethodInfo = infos[0]; } }
protected static bool IsElementPublic(MemberElement e) { return(e.IsPublic); }
public bool IsAccessible(MemberElement owner) { return(owner.IsMemberAccessible(this.myTarget)); }