protected override TDeclarationNode AddMethod <TDeclarationNode>(TDeclarationNode destination, IMethodSymbol method, CodeGenerationOptions options, IList <bool> availableIndices) { CheckDeclarationNode <TypeDeclarationSyntax, CompilationUnitSyntax, NamespaceDeclarationSyntax>(destination); // Synthesized methods for properties/events are not things we actually generate // declarations for. if (method.AssociatedSymbol is IEventSymbol) { return(destination); } // we will ignore the method if the associated property can be generated. if (method.AssociatedSymbol is IPropertySymbol property) { if (PropertyGenerator.CanBeGenerated(property)) { return(destination); } } if (destination is TypeDeclarationSyntax typeDeclaration) { if (method.IsConstructor()) { return(Cast <TDeclarationNode>(ConstructorGenerator.AddConstructorTo( typeDeclaration, method, Workspace, options, availableIndices))); } if (method.IsDestructor()) { return(Cast <TDeclarationNode>(DestructorGenerator.AddDestructorTo(typeDeclaration, method, options, availableIndices))); } if (method.MethodKind == MethodKind.Conversion) { return(Cast <TDeclarationNode>(ConversionGenerator.AddConversionTo( typeDeclaration, method, Workspace, options, availableIndices))); } if (method.MethodKind == MethodKind.UserDefinedOperator) { return(Cast <TDeclarationNode>(OperatorGenerator.AddOperatorTo( typeDeclaration, method, Workspace, options, availableIndices))); } return(Cast <TDeclarationNode>(MethodGenerator.AddMethodTo( typeDeclaration, method, Workspace, options, availableIndices))); } if (method.IsConstructor() || method.IsDestructor()) { return(destination); } if (destination is CompilationUnitSyntax compilationUnit) { return(Cast <TDeclarationNode>( MethodGenerator.AddMethodTo(compilationUnit, method, Workspace, options, availableIndices))); } var ns = Cast <NamespaceDeclarationSyntax>(destination); return(Cast <TDeclarationNode>( MethodGenerator.AddMethodTo(ns, method, Workspace, options, availableIndices))); }
protected override TDeclarationNode AddMethod <TDeclarationNode>(TDeclarationNode destination, IMethodSymbol method, CodeGenerationOptions options, IList <bool> availableIndices) { // https://github.com/dotnet/roslyn/issues/44425: Add handling for top level statements if (destination is GlobalStatementSyntax) { return(destination); } CheckDeclarationNode <TypeDeclarationSyntax, CompilationUnitSyntax, BaseNamespaceDeclarationSyntax>(destination); options = options.With(options: options.Options ?? Workspace.Options); // Synthesized methods for properties/events are not things we actually generate // declarations for. if (method.AssociatedSymbol is IEventSymbol) { return(destination); } // we will ignore the method if the associated property can be generated. if (method.AssociatedSymbol is IPropertySymbol property) { if (PropertyGenerator.CanBeGenerated(property)) { return(destination); } } if (destination is TypeDeclarationSyntax typeDeclaration) { if (method.IsConstructor()) { return(Cast <TDeclarationNode>(ConstructorGenerator.AddConstructorTo( typeDeclaration, method, options, availableIndices))); } if (method.IsDestructor()) { return(Cast <TDeclarationNode>(DestructorGenerator.AddDestructorTo(typeDeclaration, method, options, availableIndices))); } if (method.MethodKind == MethodKind.Conversion) { return(Cast <TDeclarationNode>(ConversionGenerator.AddConversionTo( typeDeclaration, method, options, availableIndices))); } if (method.MethodKind == MethodKind.UserDefinedOperator) { return(Cast <TDeclarationNode>(OperatorGenerator.AddOperatorTo( typeDeclaration, method, options, availableIndices))); } return(Cast <TDeclarationNode>(MethodGenerator.AddMethodTo( typeDeclaration, method, options, availableIndices))); } if (method.IsConstructor() || method.IsDestructor()) { return(destination); } if (destination is CompilationUnitSyntax compilationUnit) { return(Cast <TDeclarationNode>( MethodGenerator.AddMethodTo(compilationUnit, method, options, availableIndices))); } var ns = Cast <BaseNamespaceDeclarationSyntax>(destination); return(Cast <TDeclarationNode>( MethodGenerator.AddMethodTo(ns, method, options, availableIndices))); }