public List<IMethodSymbol> GetExtensionMethods(string name, ITypeSymbol type)
{
List<IMethodSymbol> methods;
if (type == null)
{
throw new ArgumentNullException(nameof(type));
}
if (!extensionMethodsByName.TryGetValue(name, out methods))
{
return new List<IMethodSymbol>();
}
var retval = new List<KeyValuePair<IMethodSymbol, int>>();
foreach (var method in methods)
{
var depth = method.Parameters[0].Type?.IsAssignableFrom(type, 0);
if (depth > -1)
{
retval.Add(new KeyValuePair<IMethodSymbol, int>(method, depth.Value));
}
}
return retval.OrderBy(c => c.Key.ContainingAssembly.Equals(this.compilation.Assembly) ? 0 : c.Value + 1).Select(c => c.Key).ToList();
}