public static ExtensionMethodInfo GetExtensionMethodInfo( this SemanticModel semanticModel, ExpressionSyntax expression, ExtensionMethodKind allowedKinds, CancellationToken cancellationToken = default(CancellationToken)) { ISymbol symbol = GetSymbol(semanticModel, expression, cancellationToken); if (symbol?.IsMethod() == true) { return(ExtensionMethodInfo.Create((IMethodSymbol)symbol, semanticModel, allowedKinds)); } else { return(default(ExtensionMethodInfo)); } }
public static bool TryGetExtensionMethodInfo( this SemanticModel semanticModel, ExpressionSyntax expression, out MethodInfo methodInfo, ExtensionMethodKind kind = ExtensionMethodKind.None, CancellationToken cancellationToken = default(CancellationToken)) { ISymbol symbol = semanticModel.GetSymbol(expression, cancellationToken); if (symbol?.IsMethod() == true && ExtensionMethodInfo.TryCreate((IMethodSymbol)symbol, semanticModel, out ExtensionMethodInfo extensionMethodInfo, kind)) { methodInfo = extensionMethodInfo.MethodInfo; return(true); } methodInfo = default(MethodInfo); return(false); }
internal static ExtensionMethodInfo Create(IMethodSymbol methodSymbol, SemanticModel semanticModel, ExtensionMethodKind allowedKinds) { if (methodSymbol == null) { throw new ArgumentNullException(nameof(methodSymbol)); } if (semanticModel == null) { throw new ArgumentNullException(nameof(semanticModel)); } if (methodSymbol.IsExtensionMethod) { IMethodSymbol reducedFrom = methodSymbol.ReducedFrom; if (reducedFrom != null) { if ((allowedKinds & ExtensionMethodKind.Reduced) != 0) { return(new ExtensionMethodInfo(methodSymbol, reducedFrom, semanticModel)); } } else if ((allowedKinds & ExtensionMethodKind.Ordinary) != 0) { return(new ExtensionMethodInfo(methodSymbol, methodSymbol, semanticModel)); } } return(default(ExtensionMethodInfo)); }
public static bool TryCreate(IMethodSymbol methodSymbol, SemanticModel semanticModel, out ExtensionMethodInfo extensionMethodInfo, ExtensionMethodKind kind = ExtensionMethodKind.None) { if (methodSymbol?.IsExtensionMethod == true) { IMethodSymbol reducedFrom = methodSymbol.ReducedFrom; if (reducedFrom != null) { if (kind != ExtensionMethodKind.NonReduced) { extensionMethodInfo = new ExtensionMethodInfo(reducedFrom, methodSymbol, semanticModel); return(true); } } else if (kind != ExtensionMethodKind.Reduced) { extensionMethodInfo = new ExtensionMethodInfo(methodSymbol, null, semanticModel); return(true); } } extensionMethodInfo = default(ExtensionMethodInfo); return(false); }