internal static DestructorDeclarationSyntax GenerateDestructorDeclaration( IMethodSymbol destructor, CodeGenerationDestination destination, CodeGenerationOptions options) { options = options ?? CodeGenerationOptions.Default; var reusableSyntax = GetReuseableSyntaxNodeForSymbol <DestructorDeclarationSyntax>(destructor, options); if (reusableSyntax != null) { return(reusableSyntax); } bool hasNoBody = !options.GenerateMethodBodies; var declaration = SyntaxFactory.DestructorDeclaration( attributeLists: AttributeGenerator.GenerateAttributeLists(destructor.GetAttributes(), options), modifiers: default(SyntaxTokenList), tildeToken: SyntaxFactory.Token(SyntaxKind.TildeToken), identifier: CodeGenerationDestructorInfo.GetTypeName(destructor).ToIdentifierToken(), parameterList: SyntaxFactory.ParameterList(), body: hasNoBody ? null : GenerateBlock(destructor), semicolonToken: hasNoBody ? SyntaxFactory.Token(SyntaxKind.SemicolonToken) : default(SyntaxToken)); return(AddCleanupAnnotationsTo( ConditionallyAddDocumentationCommentTo(declaration, destructor, options))); }
private static BlockSyntax GenerateBlock( IMethodSymbol constructor) { var statements = CodeGenerationDestructorInfo.GetStatements(constructor) == null ? default(SyntaxList <StatementSyntax>) : StatementGenerator.GenerateStatements(CodeGenerationDestructorInfo.GetStatements(constructor)); return(SyntaxFactory.Block(statements)); }