private static void GenerateDisposeBody(CSharpGeneratorContext context, ICSharpFunctionDeclaration methodDeclaration, ICollection <GeneratorDeclaredElement <ITypeOwner> > elements, CSharpElementFactory factory) { var builder = new StringBuilder(); var owner = (IParametersOwner)methodDeclaration.DeclaredElement; if (owner == null) { return; } var typeElement = context.ClassDeclaration.DeclaredElement; var args = new List <object>(); if (elements.Count == 0) { if (typeElement is IClass) { builder.Append("base.Dispose();"); } methodDeclaration.SetBody(factory.CreateBlock("{" + builder + "}", args.ToArray())); return; } foreach (var element in elements) { var typeOwner = element.DeclaredElement; var type = typeOwner.Type; if (type.IsReferenceType() && context.GetElementOptionValue(element, CSharpBuilderOptions.CanBeNull) == bool.TrueString) { builder.Append("if ($" + args.Count + " != null) $" + args.Count + ".Dispose();"); } else { builder.Append("$" + args.Count + ".Dispose();"); } args.Add(typeOwner); } methodDeclaration.SetBody(factory.CreateBlock("{" + builder + "}", args.ToArray())); }
public IBlock SetBody(IBlock param) { return(_functionDeclaration.SetBody(param)); }