internal static void LookupSymbolInUsings( ImmutableArray <NamespaceOrTypeAndUsingDirective> usings, LookupResult result, LookupConstraints constraints) { if (constraints.OriginalBinder.Flags.Includes(BinderFlags.InScriptUsing)) { return; } bool callerIsSemanticModel = constraints.OriginalBinder.IsSemanticModelBinder; foreach (var typeOrNamespace in usings) { ImmutableArray <Symbol> candidates = Binder.GetCandidateMembers(constraints.WithQualifier(typeOrNamespace.NamespaceOrType)); foreach (Symbol symbol in candidates) { if (!IsValidLookupCandidateInUsings(symbol)) { continue; } // Found a match in our list of normal using directives. Mark the directive // as being seen so that it won't be reported to the user as something that // can be removed. var res = constraints.OriginalBinder.CheckViability(symbol, constraints.WithAccessThroughType(null)); if (res.Kind == LookupResultKind.Viable) { MarkImportDirective(constraints.OriginalBinder.Compilation, typeOrNamespace.UsingDirective.SyntaxNode, callerIsSemanticModel); } result.MergeEqual(res); } } }
internal void LookupSymbolInAliases(LookupResult result, LookupConstraints constraints) { bool callerIsSemanticModel = constraints.OriginalBinder.IsSemanticModelBinder; AliasAndUsingDirective alias; if (this.UsingAliases.TryGetValue(constraints.Name, out alias)) { // Found a match in our list of normal aliases. Mark the alias as being seen so that // it won't be reported to the user as something that can be removed. var res = constraints.OriginalBinder.CheckViability(alias.Alias, constraints.WithAccessThroughType(null)); if (res.Kind == LookupResultKind.Viable) { MarkImportDirective(alias.UsingDirective, callerIsSemanticModel); } result.MergeEqual(res); } foreach (var a in this.ExternAliases) { if (a.Alias.Name == constraints.Name) { // Found a match in our list of extern aliases. Mark the extern alias as being // seen so that it won't be reported to the user as something that can be // removed. var res = constraints.OriginalBinder.CheckViability(a.Alias, constraints.WithAccessThroughType(null)); if (res.Kind == LookupResultKind.Viable) { MarkImportDirective(a.ExternAliasDirective, callerIsSemanticModel); } result.MergeEqual(res); } } }
private static void AddAliasSymbolToResult(LookupSymbolsInfo result, AliasSymbol aliasSymbol, LookupConstraints constraints) { var targetSymbol = aliasSymbol.GetAliasTarget(basesBeingResolved: null); if (constraints.OriginalBinder.CanAddLookupSymbolInfo(targetSymbol, result, constraints.WithAccessThroughType(null), aliasSymbol: aliasSymbol)) { result.AddSymbol(aliasSymbol, aliasSymbol.Name, aliasSymbol.Name); } }