| File: Completion\CompletionProviders\InternalsVisibleToCompletionProvider.cs | Web Access |
| Project: src\roslyn\src\Features\CSharp\Portable\Microsoft.CodeAnalysis.CSharp.Features.csproj (Microsoft.CodeAnalysis.CSharp.Features) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Collections.Immutable; using System.Composition; using Microsoft.CodeAnalysis.Completion; using Microsoft.CodeAnalysis.Completion.Providers; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.Host.Mef; using Microsoft.CodeAnalysis.Text; namespace Microsoft.CodeAnalysis.CSharp.Completion.Providers; [ExportCompletionProvider(nameof(InternalsVisibleToCompletionProvider), LanguageNames.CSharp)] [ExtensionOrder(After = nameof(DeclarationNameCompletionProvider))] [Shared] internal sealed class InternalsVisibleToCompletionProvider : AbstractInternalsVisibleToCompletionProvider { [ImportingConstructor] [Obsolete(MefConstruction.ImportingConstructorMessage, error: true)] public InternalsVisibleToCompletionProvider() { } internal override string Language => LanguageNames.CSharp; protected override IImmutableList<SyntaxNode> GetAssemblyScopedAttributeSyntaxNodesOfDocument(SyntaxNode documentRoot) { var builder = (ImmutableList<SyntaxNode>.Builder?)null; if (documentRoot is CompilationUnitSyntax compilationUnit) { foreach (var attributeList in compilationUnit.AttributeLists) { // For most documents the compilationUnit.AttributeLists should be empty. // Therefore we delay initialization of the builder builder ??= ImmutableList.CreateBuilder<SyntaxNode>(); builder.AddRange(attributeList.Attributes); } } return builder == null ? [] : builder.ToImmutable(); } protected override SyntaxNode? GetConstructorArgumentOfInternalsVisibleToAttribute(SyntaxNode internalsVisibleToAttribute) { var arguments = ((AttributeSyntax)internalsVisibleToAttribute).ArgumentList!.Arguments; // InternalsVisibleTo has only one constructor argument. // https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.internalsvisibletoattribute(v=vs.110).aspx // We can assume that this is the assemblyName argument. return arguments.Count > 0 ? arguments[0].Expression : null; } protected override bool ShouldTriggerAfterQuotes(SourceText text, int insertedCharacterPosition) => CompletionUtilities.IsStartingNewWord(text, insertedCharacterPosition); }