private bool ExtendsTheCallerType(IMethodElement method, ITypeElement callerType, Expression qualifier) { if (method == null || callerType == null) { return(false); } if (method.Parameters.Count == 0) { return(false); } ISourceTreeResolver resolver = ParserServices.SourceTreeResolver; ExpressionCollection arguments = new ExpressionCollection(); arguments.Add(qualifier); method = GenericElementActivator.ActivateMemberIfNeeded(resolver, method, arguments, null, ArgumentsHelper.ResolveArgumentTypes(resolver, arguments)) as IMethodElement; if (method == null) { return(false); } IParameterElement extensionParam = method.Parameters[0] as IParameterElement; if (extensionParam == null) { return(false); } ITypeReferenceExpression typeRef = extensionParam.Type; if (typeRef == null) { return(false); } ITypeElement type = typeRef.GetDeclaration() as ITypeElement; if (type == null) { return(false); } IArrayTypeElement arrayType = callerType as IArrayTypeElement; //if (arrayType != null) //{ // return true; //} //else return(ArgumentsHelper.HasParamConversion(resolver, extensionParam, callerType, qualifier, TypeConversionMode.ImplicitConversion)); }
public static IElement ResolveType(this IElement active) { ISourceTreeResolver resolver = ParserServices.SourceTreeResolver; if (active is IMemberElement) { return(resolver.ResolveElementType(active)); } var expression = active as IExpression; if (expression != null) { return(resolver.ResolveExpression(expression)); } return(null); }