private static void GenerateClass(ScriptGenerator generator, ClassSymbol classSymbol) { ScriptTextWriter writer = generator.Writer; string name = classSymbol.FullGeneratedName; writer.Write("function "); writer.Write(name); writer.Write("("); if (classSymbol.Constructor != null && classSymbol.Constructor.Parameters != null) { bool firstParameter = true; foreach (ParameterSymbol parameterSymbol in classSymbol.Constructor.Parameters) { if (firstParameter == false) { writer.Write(", "); } writer.Write(parameterSymbol.GeneratedName); firstParameter = false; } } writer.WriteLine(") {"); writer.Indent++; if (generator.Options.EnableDocComments) { DocCommentGenerator.GenerateComment(generator, classSymbol); } foreach (MemberSymbol memberSymbol in classSymbol.Members) { if (memberSymbol.Type == SymbolType.Field && (memberSymbol.Visibility & MemberVisibility.Static) == 0) { FieldSymbol fieldSymbol = (FieldSymbol)memberSymbol; if (fieldSymbol.HasInitializer) { writer.Write("this."); writer.Write(fieldSymbol.GeneratedName); writer.Write(" = "); CodeGenerator.GenerateScript(generator, fieldSymbol); writer.Write(";"); writer.WriteLine(); } } } if (classSymbol.Constructor != null) { CodeGenerator.GenerateScript(generator, classSymbol.Constructor); } else if (classSymbol.BaseClass != null && classSymbol.IsTestClass == false) { writer.Write(classSymbol.BaseClass.FullGeneratedName); writer.Write(".call(this);"); writer.WriteLine(); } writer.Indent--; writer.WriteLine("}"); foreach (MemberSymbol memberSymbol in classSymbol.Members) { if (memberSymbol.Type != SymbolType.Field && (memberSymbol.Visibility & MemberVisibility.Static) != 0) { MemberGenerator.GenerateScript(generator, memberSymbol); } } if (classSymbol.IsStaticClass == false) { writer.Write("var "); writer.Write(name); writer.WriteLine("$ = {"); writer.Indent++; bool firstMember = true; foreach (MemberSymbol memberSymbol in classSymbol.Members) { if ((memberSymbol.Visibility & MemberVisibility.Static) == 0) { if (memberSymbol.Type == SymbolType.Field) { continue; } if (memberSymbol is CodeMemberSymbol && ((CodeMemberSymbol)memberSymbol).IsAbstract) { continue; } if (firstMember == false) { writer.WriteLine(","); } MemberGenerator.GenerateScript(generator, memberSymbol); firstMember = false; } } if (classSymbol.Indexer != null) { if (firstMember == false) { writer.WriteLine(","); } MemberGenerator.GenerateScript(generator, classSymbol.Indexer); } writer.Indent--; writer.WriteLine(); writer.Write("};"); writer.WriteLine(); } }