public static ImmutableArray <Symbol> BindCref( this Microsoft.CodeAnalysis.CSharp.Binder binder, CrefSyntax syntax, out Symbol ambiguityWinner, DiagnosticBag diagnostics ) { return(binder.BindCref( syntax, out ambiguityWinner, new Microsoft.CodeAnalysis.CSharp.BindingDiagnosticBag(diagnostics) )); }
internal static ImmutableArray<Symbol> BindCref(CrefSyntax crefSyntax, Binder binder) { var unusedDiagnostics = DiagnosticBag.GetInstance(); Symbol unusedAmbiguityWinner; var symbols = binder.BindCref(crefSyntax, out unusedAmbiguityWinner, unusedDiagnostics); unusedDiagnostics.Free(); return symbols; }
/// <summary> /// Bind a CrefSyntax and unwrap the result if it's an alias. /// </summary> /// <remarks> /// Does not respect DocumentationMode, so use a temporary bag if diagnostics are not desired. /// </remarks> private static string GetDocumentationCommentId(CrefSyntax crefSyntax, Binder binder, DiagnosticBag diagnostics) { if (crefSyntax.ContainsDiagnostics) { return ToBadCrefString(crefSyntax); } Symbol ambiguityWinner; ImmutableArray<Symbol> symbols = binder.BindCref(crefSyntax, out ambiguityWinner, diagnostics); Symbol symbol; switch (symbols.Length) { case 0: return ToBadCrefString(crefSyntax); case 1: symbol = symbols[0]; break; default: symbol = ambiguityWinner; Debug.Assert((object)symbol != null); break; } if (symbol.Kind == SymbolKind.Alias) { symbol = ((AliasSymbol)symbol).GetAliasTarget(basesBeingResolved: null); } return symbol.OriginalDefinition.GetDocumentationCommentId(); }