public override void Translate(MethodDeclaration model, TranslationContext context) { if (model == null) { return; } context.WriteDeclaration(model); context.Write(" = function ("); if (model.HasParameters) { context.WriteModels(model.Parameters, ", "); } // begin method context.WriteLine(") {"); context.Indent(); // set optional params to defaults foreach (var param in model.Parameters.Where(p => p.Definition.HasDefaultValue)) { context.Write(String.Format("{0} = ({0} !== undefined) ? {0} : ", param.Name)); context.WriteModel(param.DefaultExpression); context.WriteLine(";"); } // write method body context.WriteModelBody(model.Body); context.Unindent(); context.EnsureLineBreak(); context.WriteLine("};"); }
public override void Translate(FieldDeclaration model, TranslationContext context) { if (model == null) { return; } context.WriteDeclaration(model); context.Write(" = "); if (model.Initializer == null) { context.Write(context.GetDefaultValue(model.Definition.Type)); } else { // write the initializer context.InitializingType = model.Container; context.WriteModel(model.Initializer); context.InitializingType = null; } context.WriteLine(";"); }
public override void Translate(EventDeclaration model, TranslationContext context) { if (model == null) { return; } string fieldAddScript = null; string fieldRemScript = null; if (model.IsField) { // add a backing event list var fieldName = "$" + model.Definition.Name; var backingField = new FieldDeclaration { Container = model.Container, OriginatingNode = model.OriginatingNode, OriginatingTree = model.OriginatingTree, Definition = new FieldDefinition { Name = fieldName, ContainingType = model.Definition.ContainingType, Type = new ClassDefinition() { Kind = DefinitionKind.Type, Name = "Event", Namespace = "Blade", } }, Initializer = new LiteralExpression { Type = LiteralType.None, Text = "new Blade.Event()" } }; // use same modifier as property, but force private backingField.Definition.Modifiers.Apply(model.Definition.Modifiers); backingField.Definition.Modifiers.Access = Accessibility.Private; context.WriteModel(backingField); // manually create get/set body var fieldPrefix = model.IsStatic ? model.Container.Name : "this"; var fieldAccess = fieldPrefix + "." + fieldName; fieldAddScript = fieldAccess + ".add(func, ctx);"; fieldRemScript = fieldAccess + ".rem(func);"; // add a method to invoke the event context.WriteDeclaration(model); context.WriteLine(" = function() {"); context.Indent(); context.WriteLine(fieldAccess + ".pub.apply(" + fieldAccess + ", arguments);"); context.Unindent(); context.WriteLine("}"); } // write the add accessor context.WriteDeclaration(model, postfix: "$add"); context.WriteLine(" = function(func, ctx) {"); context.Indent(); if (model.IsField) { context.WriteLine(fieldAddScript); } else { context.WriteModelBody(model.AddAccessor); } context.Unindent(); context.WriteLine("};"); // write the remove accessor context.WriteDeclaration(model, postfix: "$rem"); context.WriteLine(" = function(func) {"); context.Indent(); if (model.IsField) { context.WriteLine(fieldRemScript); } else { context.WriteModelBody(model.RemoveAccessor); } context.Unindent(); context.WriteLine("};"); }
public override void Translate(PropertyDeclaration model, TranslationContext context) { if (model == null) { return; } string autoGetScript = null; string autoSetScript = null; if (model.IsAutoProperty) { // add a backing field var fieldName = "$" + model.Definition.Name; var backingField = new FieldDeclaration { Container = model.Container, OriginatingNode = model.OriginatingNode, OriginatingTree = model.OriginatingTree, Definition = new FieldDefinition { Name = fieldName, ContainingType = model.Definition.ContainingType, Type = model.Definition.Type, Kind = DefinitionKind.Member, MemberKind = MemberDefinitionKind.Field } }; // use same modifier as property, but force private backingField.Definition.Modifiers.Apply(model.Definition.Modifiers); backingField.Definition.Modifiers.Access = Accessibility.Private; context.WriteModel(backingField); // manually create get/set body var fieldPrefix = model.IsStatic ? model.Container.Name : "this"; autoGetScript = "return " + fieldPrefix + "." + fieldName + ";"; autoSetScript = fieldPrefix + "." + fieldName + " = value;"; } // write the get accessor if (model.HasGetter || model.IsAutoProperty) { context.WriteDeclaration(model, "get_"); context.WriteLine(" = function() {"); context.Indent(); if (model.IsAutoProperty) { context.WriteLine(autoGetScript); } else { context.WriteModelBody(model.GetAccessor); } context.Unindent(); context.WriteLine("};"); } // write the set accessor if (model.HasSetter || model.IsAutoProperty) { context.WriteDeclaration(model, "set_"); context.WriteLine(" = function(value) {"); context.Indent(); if (model.IsAutoProperty) { context.WriteLine(autoSetScript); } else { context.WriteModelBody(model.SetAccessor); } context.Unindent(); context.WriteLine("};"); } }