コード例 #1
0
        public virtual void Write(ICodeFragment fragment, IOutputCache output)
        {
            PropertyTemplate template      = (PropertyTemplate)fragment;
            FieldTemplate    fieldTemplate = new FieldTemplate(template.Class, template.Name, template.Type).FormatName(output.Language, true);

            if (fieldTemplate.Name == template.Name)
            {
                fieldTemplate.Name += "Field";
            }
            fieldTemplate.DefaultValue = template.DefaultValue;
            output.Add(fieldTemplate);
            if (template.HasGetter)
            {
                output.If(template.Visibility != Visibility.None).Add(template.Visibility.ToString().ToLower()).Add(" ").EndIf()
                .If(template.IsStatic).Add("static ").EndIf()
                .Add($"get {template.Name}(): ")
                .Add(template.Type)
                .StartBlock()
                .Add(Code.Return(Code.This().Field(fieldTemplate.Name)))
                .EndBlock();
            }
            if (template.HasSetter)
            {
                output.If(template.Visibility != Visibility.None).Add(template.Visibility.ToString().ToLower()).Add(" ").EndIf()
                .If(template.IsStatic).Add("static ").EndIf()
                .Add($"set {template.Name}(value: ")
                .Add(template.Type)
                .Add(")")
                .StartBlock()
                .Add(Code.This().Field(fieldTemplate.Name).Assign(Code.Local("value")).Close())
                .EndBlock();
            }
        }
コード例 #2
0
        public virtual void Write(ICodeFragment fragment, IOutputCache output)
        {
            PropertyTemplate template      = (PropertyTemplate)fragment;
            FieldTemplate    fieldTemplate = new(template.Class, template.Name, template.Type);

            fieldTemplate.Strict = template.Strict;
            if (template.Getter == null && template.HasGetter || template.Setter == null && template.HasSetter)
            {
                if (fieldTemplate.Name == template.Name)
                {
                    fieldTemplate.Name += "Field";
                }
                fieldTemplate.DefaultValue = template.DefaultValue;
                output.Add(fieldTemplate);
            }
            if (template.HasGetter || template.Getter != null)
            {
                output.If(template.Visibility != Visibility.None).Add(template.Visibility.ToString().ToLower()).Add(" ").EndIf()
                .If(template.IsStatic).Add("static ").EndIf()
                .Add($"get {template.Name}(): ")
                .Add(template.Type)
                .If(template.Strict && template.Type.IsNullable).Add(" | undefined").EndIf()
                .StartBlock()
                .Add(template.Getter ?? Code.Return(Code.This().Field(fieldTemplate.Name)))
                .EndBlock();
            }
            if (template.HasSetter || template.Setter != null)
            {
                output.If(template.Visibility != Visibility.None).Add(template.Visibility.ToString().ToLower()).Add(" ").EndIf()
                .If(template.IsStatic).Add("static ").EndIf()
                .Add($"set {template.Name}(value: ")
                .Add(template.Type)
                .If(template.Strict && template.Type.IsNullable).Add(" | undefined").EndIf()
                .Add(")")
                .StartBlock()
                .Add(template.Setter ?? Code.This().Field(fieldTemplate.Name).Assign(Code.Local("value")).Close())
                .EndBlock();
            }
        }
コード例 #3
0
        public virtual void Write(ICodeFragment fragment, IOutputCache output)
        {
            FieldTemplate template = (FieldTemplate)fragment;

            output.If(template.Visibility != Visibility.None).Add(template.Visibility.ToString().ToLower()).Add(" ").EndIf()
            .If(template.IsStatic).Add("static ").EndIf()
            .If(template.IsConst).Add("const ").EndIf()
            .If(template.IsReadonly).Add("readonly ").EndIf()
            .Add(template.Name)
            .Add(": ")
            .Add(template.Type)
            .If(template.DefaultValue != null).Add(" = ").Add(template.DefaultValue).EndIf()
            .CloseLine();
        }
コード例 #4
0
        public virtual void Write(ICodeFragment fragment, IOutputCache output)
        {
            FieldTemplate template = (FieldTemplate)fragment;

            output.If(template.Visibility != Visibility.None).Add(template.Visibility.ToString().ToLower()).Add(" ").EndIf()
            .If(template.IsStatic || template.IsConstant).Add("static ").EndIf()
            .If(template.IsReadonly || template.IsConstant).Add("readonly ").EndIf()
            .Add(template.Name)
            .If(template.IsOptional).Add("?").EndIf()
            .Add(": ")
            .Add(template.Type)
            .If(template.DefaultValue == null && template.Strict && template.Type.IsNullable).Add(" | undefined").EndIf()
            .If(template.DefaultValue != null && !template.Class.IsInterface).Add(" = ").Add(template.DefaultValue).EndIf()
            .CloseLine();
        }
コード例 #5
0
        public virtual void Write(ICodeFragment fragment, IOutputCache output)
        {
            AnonymousObjectTemplate template = (AnonymousObjectTemplate)fragment;

            output.Add("{")
            .Indent();
            PropertyValueTemplate last = template.Properties.LastOrDefault();

            foreach (PropertyValueTemplate property in template.Properties)
            {
                output.If(property.Value == null).Add(property.Name).EndIf()
                .If(property.Value != null).Add($"{property.Name}: ").Add(property.Value).EndIf()
                .If(property != last).Add(",").EndIf()
                .BreakLine();
            }
            output.UnIndent().Add("}");
        }
コード例 #6
0
        public virtual void Write(ICodeFragment fragment, IOutputCache output)
        {
            BaseLanguage  language = this.options.Language.CastTo <BaseLanguage>();
            ClassTemplate template = (ClassTemplate)fragment;

            output.Add(template.Comment);
            output.Add(template.Attributes);
            output.Add(language.ClassScope).Add(" ");
            if (template.IsAbstract && language.HasAbstractClasses && !template.IsInterface)
            {
                output.Add("abstract ");
            }
            if (template.IsStatic && language.HasStaticClasses)
            {
                output.Add("static ");
            }
            else if (!string.IsNullOrEmpty(language.PartialKeyword))
            {
                output.Add(language.PartialKeyword).Add(" ");
            }
            if (template.IsInterface)
            {
                output.Add("interface ");
            }
            else
            {
                output.Add("class ");
            }
            output.Add(template.Name);
            if (template.Generics.Count > 0)
            {
                output.Add("<").Add(template.Generics.Select(x => Code.Instance.Type(x.Name)), ", ").Add(">");
            }
            template.BasedOn.OrderBy(x => x.ToType().IsInterface).ForEach(x => output.Add(x));
            output.Add(template.Generics.Select(x => x.ToConstraints()).Where(x => x.Types.Count > 0));
            output.StartBlock();
            if (template.IsInterface)
            {
                template.Fields.ForEach(x => x.Visibility     = Visibility.None);
                template.Properties.ForEach(x => x.Visibility = Visibility.None);
            }
            bool isFirst = true;

            if (template.Classes.Count > 0)
            {
                output.Add(template.Classes);
                isFirst = false;
            }
            if (template.Fields.Count > 0)
            {
                output.If(!isFirst).BreakLine().EndIf();
                output.Add(template.Fields);
                isFirst = false;
            }
            if (template.Properties.Count > 0)
            {
                output.If(!isFirst).BreakLine().EndIf();
                output.Add(template.Properties);
                isFirst = false;
            }
            if (template.Code != null)
            {
                output.If(!isFirst).BreakLine().EndIf();
                output.Add(template.Code);
                isFirst = false;
            }
            if (template.Methods.Count > 0)
            {
                output.If(!isFirst).BreakLine().EndIf();
                MethodTemplate last = template.Methods.Last();
                foreach (MethodTemplate method in template.Methods)
                {
                    output.Add(method);
                    if (method != last)
                    {
                        output.BreakLine();
                    }
                }
            }
            if (this.options.Formatting.CollapseEmptyClasses && output.LastFragments.First().Equals(template))
            {
                output.UnBreakLine();
                output.Add(this.options.Formatting.CollapsedClassesSpacer, true);
            }
            output.EndBlock();
        }