public static void Attach( IMethodSymbol destructor, string typeName, ImmutableArray <SyntaxNode> statements) { var info = new CodeGenerationDestructorInfo(typeName, statements); s_destructorToInfoMap.Add(destructor, info); }
/// <summary> /// Creates a destructor symbol that can be used to describe a destructor declaration. /// </summary> public static IMethodSymbol CreateDestructorSymbol( ImmutableArray <AttributeData> attributes, string typeName, ImmutableArray <SyntaxNode> statements = default) { var result = new CodeGenerationDestructorSymbol(null, attributes); CodeGenerationDestructorInfo.Attach(result, typeName, statements); return(result); }
protected override CodeGenerationSymbol Clone() { var result = new CodeGenerationDestructorSymbol(this.ContainingType, this.GetAttributes()); CodeGenerationDestructorInfo.Attach(result, CodeGenerationDestructorInfo.GetTypeName(this), CodeGenerationDestructorInfo.GetStatements(this)); return(result); }
private static string GetTypeName(CodeGenerationDestructorInfo info, IMethodSymbol constructor) => info == null ? constructor.ContainingType.Name : info._typeName;
private static ImmutableArray <SyntaxNode> GetStatements(CodeGenerationDestructorInfo info) => info?._statements ?? default;