public LookupExtensionMethod ( System.TypeSpec extensionType, |
||
extensionType | System.TypeSpec | |
invocationContext | ||
name | string | |
arity | int | |
return | List |
// // Does extension methods look up to find a method which matches name and extensionType. // Search starts from this namespace and continues hierarchically up to top level. // public IList <MethodSpec> LookupExtensionMethod(TypeSpec extensionType, string name, int arity, ref NamespaceContainer scope) { List <MethodSpec> candidates = null; foreach (Namespace n in GetUsingTable()) { var a = n.LookupExtensionMethod(this, extensionType, name, arity); if (a == null) { continue; } if (candidates == null) { candidates = a; } else { candidates.AddRange(a); } } scope = parent; if (candidates != null) { return(candidates); } if (parent == null) { return(null); } // // Inspect parent namespaces in namespace expression // Namespace parent_ns = ns.Parent; do { candidates = parent_ns.LookupExtensionMethod(this, extensionType, name, arity); if (candidates != null) { return(candidates); } parent_ns = parent_ns.Parent; } while (parent_ns != null); // // Continue in parent scope // return(parent.LookupExtensionMethod(extensionType, name, arity, ref scope)); }
// // Extension methods look up for dotted namespace names // public IList <MethodSpec> LookupExtensionMethod(IMemberContext invocationContext, TypeSpec extensionType, string name, int arity, out Namespace scope) { // // Inspect parent namespaces in namespace expression // scope = this; do { var candidates = scope.LookupExtensionMethod(invocationContext, extensionType, name, arity); if (candidates != null) { return(candidates); } scope = scope.Parent; } while (scope != null); return(null); }
// // Extension methods look up for dotted namespace names // public IList<MethodSpec> LookupExtensionMethod (IMemberContext invocationContext, TypeSpec extensionType, string name, int arity, out Namespace scope) { // // Inspect parent namespaces in namespace expression // scope = this; do { var candidates = scope.LookupExtensionMethod (invocationContext, extensionType, name, arity); if (candidates != null) return candidates; scope = scope.Parent; } while (scope != null); return null; }
/// /// Does extension methods look up to find a method which matches name and extensionType. /// Search starts from this namespace and continues hierarchically up to top level. /// public ExtensionMethodGroupExpr LookupExtensionMethod(Type extensionType, ClassOrStruct currentClass, string name, Location loc) { ArrayList candidates = null; if (currentClass != null) { candidates = ns.LookupExtensionMethod(extensionType, currentClass, name); if (candidates != null) { return(new ExtensionMethodGroupExpr(candidates, this, extensionType, loc)); } } foreach (Namespace n in GetUsingTable()) { ArrayList a = n.LookupExtensionMethod(extensionType, null, name); if (a == null) { continue; } if (candidates == null) { candidates = a; } else { candidates.AddRange(a); } } if (candidates != null) { return(new ExtensionMethodGroupExpr(candidates, parent, extensionType, loc)); } if (parent == null) { return(null); } // // Inspect parent namespaces in namespace expression // Namespace parent_ns = ns.Parent; do { candidates = parent_ns.LookupExtensionMethod(extensionType, null, name); if (candidates != null) { return(new ExtensionMethodGroupExpr(candidates, parent, extensionType, loc)); } parent_ns = parent_ns.Parent; } while (parent_ns != null); // // Continue in parent scope // return(parent.LookupExtensionMethod(extensionType, currentClass, name, loc)); }