Exemplo n.º 1
0
        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));
 }