コード例 #1
0
        protected override Task <ISymbol> GenerateMemberAsync(ISymbol newOverriddenMember, INamedTypeSymbol newContainingType, Document newDocument, CompletionItem completionItem, CancellationToken cancellationToken)
        {
            // Special case: if you are overriding object.ToString(), we will make the return value as non-nullable. The return was made nullable because
            // are implementations out there that will return null, but that's not something we really want new implementations doing. We may need to consider
            // expanding this behavior to other methods in the future; if that is the case then we would want there to be an attribute on the return type
            // rather than updating this list, but for now there is no such attribute until we find more cases for it. See
            // https://github.com/dotnet/roslyn/issues/30317 for some additional conversation about this design decision.
            //
            // We don't check if methodSymbol.ContainingType is object, in case you're overriding something that is itself an override
            if (newOverriddenMember is IMethodSymbol methodSymbol &&
                methodSymbol.Name == "ToString" &&
                methodSymbol.Parameters.Length == 0)
            {
                newOverriddenMember = CodeGenerationSymbolFactory.CreateMethodSymbol(methodSymbol, returnType: methodSymbol.ReturnType.WithNullableAnnotation(NullableAnnotation.NotAnnotated));
            }

            // Figure out what to insert, and do it. Throw if we've somehow managed to get this far and can't.
            var syntaxFactory = newDocument.GetLanguageService <SyntaxGenerator>();

            var itemModifiers = MemberInsertionCompletionItem.GetModifiers(completionItem);
            var modifiers     = itemModifiers.WithIsUnsafe(itemModifiers.IsUnsafe | newOverriddenMember.RequiresUnsafeModifier());

            return(syntaxFactory.OverrideAsync(
                       newOverriddenMember, newContainingType, newDocument, modifiers, cancellationToken));
        }
コード例 #2
0
        protected override async Task <ISymbol> GenerateMemberAsync(ISymbol newOverriddenMember, INamedTypeSymbol newContainingType, Document newDocument, CompletionItem completionItem, CancellationToken cancellationToken)
        {
            // Figure out what to insert, and do it. Throw if we've somehow managed to get this far and can't.
            var syntaxFactory  = newDocument.GetLanguageService <SyntaxGenerator>();
            var codeGenService = newDocument.GetLanguageService <ICodeGenerationService>();

            var itemModifiers = MemberInsertionCompletionItem.GetModifiers(completionItem);
            var modifiers     = itemModifiers.WithIsUnsafe(itemModifiers.IsUnsafe | newOverriddenMember.IsUnsafe());

            if (newOverriddenMember.Kind == SymbolKind.Method)
            {
                return(await syntaxFactory.OverrideMethodAsync((IMethodSymbol)newOverriddenMember,
                                                               modifiers, newContainingType, newDocument, cancellationToken).ConfigureAwait(false));
            }
            else if (newOverriddenMember.Kind == SymbolKind.Property)
            {
                return(await syntaxFactory.OverridePropertyAsync((IPropertySymbol)newOverriddenMember,
                                                                 modifiers, newContainingType, newDocument, cancellationToken).ConfigureAwait(false));
            }
            else
            {
                return(syntaxFactory.OverrideEvent((IEventSymbol)newOverriddenMember,
                                                   modifiers, newContainingType));
            }
        }
コード例 #3
0
        protected override Task <ISymbol> GenerateMemberAsync(ISymbol newOverriddenMember, INamedTypeSymbol newContainingType, Document newDocument, CompletionItem completionItem, CancellationToken cancellationToken)
        {
            // Figure out what to insert, and do it. Throw if we've somehow managed to get this far and can't.
            var syntaxFactory = newDocument.GetLanguageService <SyntaxGenerator>();

            var itemModifiers = MemberInsertionCompletionItem.GetModifiers(completionItem);
            var modifiers     = itemModifiers.WithIsUnsafe(itemModifiers.IsUnsafe | newOverriddenMember.IsUnsafe());

            return(syntaxFactory.OverrideAsync(
                       newOverriddenMember, newContainingType, newDocument, modifiers, cancellationToken));
        }
コード例 #4
0
        protected override async Task <ISymbol> GenerateMemberAsync(ISymbol member, INamedTypeSymbol containingType, Document document, CompletionItem item, CancellationToken cancellationToken)
        {
            var syntaxFactory = document.GetLanguageService <SyntaxGenerator>();
            var semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false);

            return(CodeGenerationSymbolFactory.CreateMethodSymbol(attributes: new List <AttributeData>(),
                                                                  accessibility: Accessibility.NotApplicable,
                                                                  modifiers: MemberInsertionCompletionItem.GetModifiers(item),
                                                                  returnType: semanticModel.Compilation.GetSpecialType(SpecialType.System_Void),
                                                                  explicitInterfaceSymbol: null,
                                                                  name: member.Name,
                                                                  typeParameters: ((IMethodSymbol)member).TypeParameters,
                                                                  parameters: member.GetParameters().Select(p => CodeGenerationSymbolFactory.CreateParameterSymbol(p.GetAttributes(), p.RefKind, p.IsParams, p.Type, p.Name)).ToList(),
                                                                  statements: syntaxFactory.CreateThrowNotImplementedStatementBlock(semanticModel.Compilation)));
        }