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)); }
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)); } }
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)); }
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))); }