private bool IsValidExtensionType(IType actualType, IType extensionType, IExtensionEnabled extension) { if (TypeCompatibilityRules.IsAssignableFrom(extensionType, actualType)) { return(true); } // Check for a valid generic extension IMethod method = extension as IMethod; if (method == null || method.GenericInfo == null) { return(false); } System.Collections.Generic.List <IGenericParameter> genericParameters = new System.Collections.Generic.List <IGenericParameter>(GenericsServices.FindGenericParameters(extensionType)); if (genericParameters.Count == 0) { return(false); } TypeInferrer inferrer = new TypeInferrer(genericParameters); inferrer.Infer(extensionType, actualType); return(inferrer.FinalizeInference()); }
private bool IsExtensionOf(IType type, IExtensionEnabled entity) { if (entity == null || !entity.IsExtension) { return(false); } IParameter[] parameters = entity.GetParameters(); if (parameters.Length == 0) { return(false); } IType extensionType = parameters[0].Type; return(IsValidExtensionType(type, extensionType, entity)); }
public bool Match(object item) { IExtensionEnabled e = item as IExtensionEnabled; if (e == null) { return(true); } if (!e.IsExtension) { return(true); } IParameter[] parameters = e.GetParameters(); if (parameters.Length == 0) { return(true); } return(!parameters[0].Type.IsAssignableFrom(_type)); }