private static void WriteBodyFunc(MethodDeclarationSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context, IMethodSymbol symbol) { if (syntax.Body == null) { return; } textWriter.Write("func = function(element"); if (syntax.TypeParameterList != null) { textWriter.Write(", methodGenericsMapping, methodGenerics"); } syntax.ParameterList.Write(textWriter, context); textWriter.WriteLine(")"); if (symbol.Parameters.LastOrDefault()?.IsParams == true) { textWriter.Indent++; WriteParamVariableInit(textWriter, context, symbol); textWriter.Indent--; } syntax.Body.Write(textWriter, context); textWriter.WriteLine("end"); }
private static void WriteInitialize(ClassDeclarationSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context) { if (context.PartialElementState.IsFirst) { textWriter.WriteLine("local initialize = function(element, values)"); textWriter.Indent++; textWriter.WriteLine("if baseInitialize then baseInitialize(element, values); end"); } foreach (var property in syntax.Members.OfType <PropertyDeclarationSyntax>()) { property.WriteInitializeValue(textWriter, context); } foreach (var field in syntax.Members.OfType <FieldDeclarationSyntax>()) { field.WriteInitializeValue(textWriter, context); } if (context.PartialElementState.IsLast) { textWriter.Indent--; textWriter.WriteLine("end"); } }
public static void Write(this AccessorDeclarationSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context) { if (syntax.Body == null) { return; } textWriter.Write(syntax.Keyword.Text); textWriter.Write(" = function(element"); var indexerDeclaration = syntax.Parent.Parent as IndexerDeclarationSyntax; if (indexerDeclaration != null) { textWriter.Write(", "); indexerDeclaration.ParameterList.Parameters.Write(Write, textWriter, context); } if (syntax.Keyword.Kind() == SyntaxKind.SetKeyword) { textWriter.Write(", value"); } textWriter.WriteLine(")"); syntax.Body.Write(textWriter, context); textWriter.WriteLine("end,"); }
public static void Write(this WhileStatementSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context) { textWriter.Write("while ("); syntax.Condition.Write(textWriter, context); textWriter.WriteLine(") do"); syntax.Statement.Write(textWriter, context); textWriter.WriteLine("end"); }
public static void Write(this SwitchStatementSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context) { textWriter.Write("local switchValue = "); syntax.Expression.Write(textWriter, context); textWriter.WriteLine(";"); syntax.Sections.Write(Write, textWriter, context, () => textWriter.Write("else")); textWriter.WriteLine("end"); }
public static void Write( this InitializerExpressionSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context) { // Note, there are 4 different implementations using InitializerExpressionSyntax if (syntax.Kind() == SyntaxKind.ComplexElementInitializerExpression) { textWriter.Write("["); syntax.Expressions.First().Write(textWriter, context); textWriter.Write("] = "); syntax.Expressions.Last().Write(textWriter, context); return; } textWriter.Write(".__Initialize({"); if (syntax.Kind() == SyntaxKind.ArrayInitializerExpression) { if (syntax.Expressions.Any()) { textWriter.Write("[0] = "); } } else if (syntax.Expressions.Count > 1 || GetKind(syntax) == SyntaxKind.CollectionInitializerExpression) { textWriter.WriteLine(); } textWriter.Indent++; if (GetKind(syntax) == SyntaxKind.CollectionInitializerExpression) { syntax.Expressions.Write( ExpressionExtensions.Write, textWriter, context, () => textWriter.WriteLine(",")); } else { syntax.Expressions.Write(ExpressionExtensions.Write, textWriter, context); } textWriter.Indent--; if (syntax.Kind() == SyntaxKind.ArrayInitializerExpression) { } else if (syntax.Expressions.Count > 1 || GetKind(syntax) == SyntaxKind.CollectionInitializerExpression) { textWriter.WriteLine(); } textWriter.Write("})"); }
private static void WriteClose(IIndentedTextWriterWrapper textWriter, IContext context) { if (context.PartialElementState.IsLast) { textWriter.WriteLine("return 'Class', typeObject, getMembers, constructors, elementGenerator, nil, initialize;"); textWriter.Indent--; textWriter.WriteLine("end,"); } }
public static void Write(this ForEachStatementSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context) { textWriter.Write("for _,{0} in (", syntax.Identifier.Text); syntax.Expression.Write(textWriter, context); textWriter.WriteLine(" % _M.DOT).GetEnumerator() do"); syntax.Statement.Write(textWriter, context); textWriter.WriteLine("end"); }
public static void Write(this AttributeListSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context) { textWriter.WriteLine("local attributes = {"); textWriter.Indent++; syntax.Attributes.Write(Write, textWriter, context); textWriter.Indent--; textWriter.WriteLine("};"); }
public static void Write(this TryStatementSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context) { textWriter.WriteLine("_M.Try("); textWriter.Indent++; textWriter.WriteLine("function()"); syntax.Block.Write(textWriter, context); textWriter.WriteLine("end,"); textWriter.WriteLine("{"); textWriter.Indent++; syntax.Catches.Write(Write, textWriter, context); textWriter.Indent--; textWriter.WriteLine("},"); if (syntax.Finally != null) { textWriter.WriteLine("function()"); syntax.Finally.Write(textWriter, context); textWriter.WriteLine("end"); } else { textWriter.WriteLine("nil"); } textWriter.Indent--; textWriter.WriteLine(");"); }
private static void WriteMethodGenericsMapping(MethodDeclarationSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context) { if (syntax.TypeParameterList == null) { return; } textWriter.Write("local methodGenericsMapping = {"); syntax.TypeParameterList.Write(textWriter, context); textWriter.WriteLine("};"); textWriter.WriteLine("local methodGenerics = _M.MG(methodGenericsMapping);"); }
public static void Write(this CatchDeclarationSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context) { if (syntax.Type != null) { var symbol = (ITypeSymbol)context.SemanticModel.GetSymbolInfo(syntax.Type).Symbol; textWriter.Write("type = "); context.TypeReferenceWriter.WriteTypeReference(symbol, textWriter); textWriter.WriteLine(","); } textWriter.WriteLine("func = function({0})", syntax.Identifier.Text); }
private static void WriteClose(IIndentedTextWriterWrapper textWriter, IContext context) { if (!context.PartialElementState.IsLast) { return; } textWriter.WriteLine("return 'Interface', typeObject, getMembers, nil, nil, nil, nil, attributes;"); textWriter.Indent--; textWriter.WriteLine("end,"); }
public static void Write(this ForStatementSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context) { syntax.Declaration.Write(textWriter, context); textWriter.WriteLine(";"); textWriter.Write("while ("); syntax.Condition.Write(textWriter, context); textWriter.WriteLine(") do"); syntax.Statement.Write(textWriter, context); syntax.Incrementors.Single().Write(textWriter, context); textWriter.WriteLine(";"); textWriter.WriteLine("end"); }
private static void WriteImplements(InterfaceDeclarationSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context, INamedTypeSymbol symbol) { textWriter.WriteLine("local implements = {"); textWriter.Indent++; foreach (var interfaceType in symbol.Interfaces) { context.TypeReferenceWriter.WriteTypeReference(interfaceType, textWriter); textWriter.WriteLine(","); } textWriter.Indent--; textWriter.WriteLine("};"); textWriter.WriteLine("typeObject.implements = implements;"); }
public static void Write(this ElseClauseSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context) { textWriter.Write("else"); if (syntax.Statement is IfStatementSyntax) { syntax.Statement.Write(textWriter, context); } else { textWriter.WriteLine(""); syntax.Statement.Write(textWriter, context); textWriter.WriteLine("end"); } }
private static void WriteIsParams(IIndentedTextWriterWrapper textWriter, IMethodSymbol symbol) { if (symbol.Parameters.LastOrDefault()?.IsParams == true) { textWriter.WriteLine("isParams = true,"); } }
private static void WriteOverride(IIndentedTextWriterWrapper textWriter, IMethodSymbol symbol) { if (symbol.IsOverride) { textWriter.WriteLine("override = true,"); } }
public static void Write(this ConstructorInitializerSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context) { var symbol = (IMethodSymbol)context.SemanticModel.GetSymbolInfo(syntax).Symbol; if (syntax.Kind() == SyntaxKind.BaseConstructorInitializer) { textWriter.Write("(element % _M.DOT_LVL(typeObject.Level - 1))._C_0_"); context.SignatureWriter.WriteSignature(symbol.Parameters.Select(p => p.Type).ToArray(), textWriter); } else if (syntax.Kind() == SyntaxKind.ThisConstructorInitializer) { textWriter.Write("(element % _M.DOT_LVL(typeObject.Level))"); var signatureWriter = textWriter.CreateTextWriterAtSameIndent(); var hasGenericComponents = context.SignatureWriter.WriteSignature(symbol.Parameters.Select(p => p.Type).ToArray(), signatureWriter); if (hasGenericComponents) { textWriter.Write("['_C_0_'..("); textWriter.AppendTextWriter(signatureWriter); textWriter.Write(")]"); } else { textWriter.Write("._C_0_"); textWriter.AppendTextWriter(signatureWriter); } } syntax.ArgumentList.Write(textWriter, context); textWriter.WriteLine(";"); }
private static void WriteGenerics(MethodDeclarationSyntax syntax, IIndentedTextWriterWrapper textWriter) { if (syntax.TypeParameterList != null) { textWriter.WriteLine("generics = methodGenericsMapping,"); } }
private static void WriteTypePopulation(ITypeSymbol symbol, IIndentedTextWriterWrapper textWriter, IContext context) { foreach (var interfaceSymbol in symbol.Interfaces) { if (context.SemanticAdaptor.IsInterface(interfaceSymbol) && context.SemanticAdaptor.GetName(interfaceSymbol) != nameof(ICsLuaAddOn)) { textWriter.Write("table.insert(implements, "); context.TypeReferenceWriter.WriteTypeReference(interfaceSymbol, textWriter); textWriter.WriteLine(");"); } } textWriter.WriteLine("typeObject.baseType = baseTypeObject;"); textWriter.WriteLine("typeObject.level = baseTypeObject.level + 1;"); textWriter.WriteLine("typeObject.implements = implements;"); }
private static void WriteBaseInheritance(ITypeSymbol symbol, IIndentedTextWriterWrapper textWriter, IContext context) { textWriter.Write("local baseTypeObject, getBaseMembers, baseConstructors, baseElementGenerator, implements, baseInitialize = "); context.TypeReferenceWriter.WriteInteractionElementReference(symbol.BaseType, textWriter); textWriter.WriteLine(".__meta(staticValues);"); }
public static void WriteDefaultValue(this VariableDeclaratorSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context) { textWriter.Write(syntax.Identifier.Text); if (syntax.Initializer != null) { syntax.Initializer.Write(textWriter, context); textWriter.WriteLine(","); } else { var symbol = (IFieldSymbol)context.SemanticModel.GetDeclaredSymbol(syntax); textWriter.Write(" = _M.DV("); context.TypeReferenceWriter.WriteTypeReference(symbol.Type, textWriter); textWriter.WriteLine("),"); } }
public static void Write(this IfStatementSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context) { textWriter.Write("if ("); syntax.Condition.Write(textWriter, context); textWriter.WriteLine(") then"); syntax.Statement.Write(textWriter, context); if (syntax.Else != null) { syntax.Else.Write(textWriter, context); } else { textWriter.WriteLine("end"); } }
private static void WriteSignatureHash( IIndentedTextWriterWrapper textWriter, IContext context, IMethodSymbol symbol) { textWriter.Write("signatureHash = "); context.SignatureWriter.WriteSignature(symbol.Parameters.Select(p => p.Type).ToArray(), textWriter); textWriter.WriteLine(","); }
public static void Write(this SwitchSectionSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context) { textWriter.Write("if ("); syntax.Labels.Write(Write, textWriter, context, () => textWriter.Write(" or ")); textWriter.WriteLine(") then"); textWriter.Indent++; syntax.Statements.Write(StatementExtensions.Write, textWriter, context, null, s => !(s is BreakStatementSyntax)); textWriter.Indent--; }
public static void Write(this EnumDeclarationSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context) { var symbol = context.SemanticModel.GetDeclaredSymbol(syntax); textWriter.WriteLine("[0] = _M.EN({"); textWriter.Indent++; syntax.Members.Write(Write, textWriter, context, () => textWriter.WriteLine(",")); textWriter.Indent--; textWriter.WriteLine(""); var namespaceName = context.SemanticAdaptor.GetFullNamespace(symbol); var name = context.SemanticAdaptor.GetName(symbol); textWriter.Write($"}},'{name}','{namespaceName}',"); context.SignatureWriter.WriteSignature(symbol, textWriter); textWriter.WriteLine("),"); }
private static void WriteParamVariableInit(IIndentedTextWriterWrapper textWriter, IContext context, IMethodSymbol symbol) { var parameter = symbol.Parameters.Last(); textWriter.Write("local "); textWriter.Write(parameter.Name); textWriter.Write(" = ("); context.TypeReferenceWriter.WriteInteractionElementReference(parameter.Type, textWriter); textWriter.WriteLine("._C_0_0() % _M.DOT).__Initialize({[0] = firstParam, ...});"); }
private static void WriteMembers(InterfaceDeclarationSyntax syntax, IIndentedTextWriterWrapper textWriter, IContext context) { if (context.PartialElementState.IsFirst) { textWriter.WriteLine("local getMembers = function()"); textWriter.Indent++; textWriter.WriteLine("local members = {};"); textWriter.WriteLine("_M.GAM(members, implements);"); } syntax.Members.Write(MemberExtensions.Write, textWriter, context); if (context.PartialElementState.IsLast) { textWriter.WriteLine("return members;"); textWriter.Indent--; textWriter.WriteLine("end"); } }
private static void WriteFooter(IIndentedTextWriterWrapper textWriter, IContext context, INamedTypeSymbol symbol) { if (!context.PartialElementState.IsFirst || HasCsLuaAddOnAttribute(symbol) != true) { return; } textWriter.Write("("); textWriter.Write(context.SemanticAdaptor.GetFullName(symbol)); textWriter.WriteLine("._C_0_0() % _M.DOT).Execute();"); }