Beispiel #1
0
        private JNode VisitInvocationResolveResultAsCtor(CSharpInvocationResolveResult res)
        {
            if (res.Type.Kind == TypeKind.Delegate)
            {
                return(Visit(res.Arguments.Single()));
            }
            var me    = (IMethod)res.Member;
            var meAtt = JMeta.GetJMethodAttribute(me);
            var ce    = me.GetDeclaringTypeDefinition();
            var att   = ce == null ? null : ce.GetJsTypeAttribute();

            if (att != null && att.Mode == JsMode.Json && (meAtt == null || meAtt.Name == null))
            {
                var node2 = VisitInvocationResolveResult(res);
                var json  = InitializersToJson(res.InitializerStatements, res.Type);
                return(json);
            }
            else
            {
                var invokeExp = (JInvocationExpression)VisitInvocationResolveResult(res);
                var newExp    = new JNewObjectExpression {
                    Invocation = invokeExp
                };
                JExpression finalExp;
                if (meAtt != null && meAtt.OmitNewOperator)
                {
                    finalExp = invokeExp;
                }
                else
                {
                    finalExp = newExp;
                }

                if (meAtt != null && meAtt.JsonInitializers)
                {
                    var json = InitializersToJson(res.InitializerStatements, res.Type);
                    invokeExp.Arguments.Add(json);
                }
                else if (res.InitializerStatements.IsNotNullOrEmpty())
                {
                    //var func = J.Function();
                    var func   = J.Block();
                    var inits2 = res.InitializerStatements.Select(t => Visit(t)).ToList();
                    var init1  = res.InitializerStatements[0];

                    var target  = FindInitializedObjectResolveResult(res);// ((init1 as OperatorResolveResult).Operands[0] as MemberResolveResult).TargetResult as InitializedObjectResolveResult;
                    var varName = Initializers[target];
                    func.Add(J.Var(varName, res.Type.JAccess(), finalExp).Statement());

                    foreach (var init in inits2)
                    {
                        var exp = ((JExpression)init);
                        func.Add(exp.Statement());
                    }
                    func.Add(J.Return(J.Member(varName)));
                    finalExp = WrapFunctionAndInvoke(res, func);
                }

                return(finalExp);
            }
        }
Beispiel #2
0
 public void VisitNewObjectExpression(JNewObjectExpression node)
 {
     Write("new ");
     Visit(node.Invocation);
 }