Beispiel #1
0
        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");
            }
        }
Beispiel #3
0
        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");
 }
Beispiel #6
0
        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");
        }
Beispiel #9
0
        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("};");
        }
Beispiel #10
0
        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(");");
        }
Beispiel #11
0
        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);");
        }
Beispiel #12
0
        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");
            }
        }
Beispiel #17
0
 private static void WriteIsParams(IIndentedTextWriterWrapper textWriter, IMethodSymbol symbol)
 {
     if (symbol.Parameters.LastOrDefault()?.IsParams == true)
     {
         textWriter.WriteLine("isParams = true,");
     }
 }
Beispiel #18
0
 private static void WriteOverride(IIndentedTextWriterWrapper textWriter, IMethodSymbol symbol)
 {
     if (symbol.IsOverride)
     {
         textWriter.WriteLine("override = true,");
     }
 }
Beispiel #19
0
        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(";");
        }
Beispiel #20
0
 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);");
        }
Beispiel #23
0
        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");
            }
        }
Beispiel #25
0
 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--;
 }
Beispiel #27
0
        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("),");
        }
Beispiel #28
0
        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();");
        }