private RDomParameter CreateParameter(List <IAssignmentStatement> assignments, List <Tuple <RDomParameter, RDomParameter, RDomArgument> > altConstructorPairs, IProperty prop)
        {
            var paramName = StringUtilities.CamelCase(prop.Name);
            var type      = prop.PropertyType.Copy();
            var param     = new RDomParameter(paramName, type);

            triviaManager.StoreStringWhitespace(param, LanguageElement.Identifier, "              ", "");
            triviaManager.StoreStringWhitespace(param, LanguageElement.EndOfLine, "", "\r\n");
            var newAssignment = new RDomAssignmentStatement(
                RDom.CSharp.ParseExpression(prop.Name),
                RDom.CSharp.ParseExpression(paramName));

            triviaManager.StoreStringWhitespace(newAssignment, LanguageElement.EndOfLine, "", "\r\n");
            assignments.Add(newAssignment);
            if (!(prop.Attributes.Any(x => x.Name == "Required")))
            {
                param.DefaultValue = GetDefaultValue(prop.PropertyType);
            }
            if (prop.PropertyType.Name == "IReferencedType")
            {
                var paramNewName = paramName + "Name";
                var paramNew     = new RDomParameter(paramName, "System.String");
                var argNew       = new RDomArgument(RDom.CSharp.ParseExpression(string.Format("new RDomReferencedType({0})", paramNewName)));
                altConstructorPairs.Add(Tuple.Create(param, paramNew, argNew));
            }

            return(param);
        }
 private static RDomConstructor CreateRDomConstructor(IClass cl)
 {
     var constructor = new RDomConstructor(cl.Name, AccessModifier.Public, constructorInitializerType: ConstructorInitializerType.This);
      var nullParam = new RDomArgument(RDom.CSharp.ParseExpression("null"));
      constructor.InitializationArguments.AddOrMoveRange(new IArgument[] { nullParam, nullParam.Copy(), nullParam.Copy() });
      cl.InsertAfterInitialFields(constructor);
      return constructor;
 }
        private static RDomConstructor CreateRDomConstructor(IClass cl)
        {
            var constructor = new RDomConstructor(cl.Name, AccessModifier.Public, constructorInitializerType: ConstructorInitializerType.This);
            var nullParam   = new RDomArgument(RDom.CSharp.ParseExpression("null"));

            constructor.InitializationArguments.AddOrMoveRange(new IArgument[] { nullParam, nullParam.Copy(), nullParam.Copy() });
            cl.InsertAfterInitialFields(constructor);
            return(constructor);
        }
        protected override IDom CreateItemFrom(SyntaxNode syntaxNode, IDom parent, SemanticModel model)
        {
            var syntax  = syntaxNode as ConstructorDeclarationSyntax;
            var newItem = new RDomConstructor(syntaxNode, parent, model);

            CreateFromWorker.StandardInitialize(newItem, syntaxNode, parent, model, OutputContext);
            CreateFromWorker.InitializeStatements(newItem, syntax.Body, newItem, model);
            CreateFromWorker.StoreWhitespace(newItem, syntax, LanguagePart.Current, WhitespaceLookup);
            CreateFromWorker.StoreWhitespace(newItem, syntax.Initializer, LanguagePart.Initializer, WhitespaceLookup);
            CreateFromWorker.StoreWhitespace(newItem, syntax.Body, LanguagePart.Current, WhitespaceLookup);
            CreateFromWorker.StoreWhitespace(newItem, syntax.ParameterList, LanguagePart.Current, WhitespaceLookup);

            newItem.Name = newItem.TypedSymbol.Name;

            //newItem.AccessModifier = RoslynUtilities.GetAccessibilityFromSymbol(newItem.Symbol);
            //newItem.IsStatic = newItem.Symbol.IsStatic;

            newItem.Parameters.CreateAndAdd(syntax, x => x.ParameterList.Parameters, x => OutputContext.Corporation.Create(x, newItem, model).Cast <IParameter>());
            //var parameters = ListUtilities.MakeList(syntax, x => x.ParameterList.Parameters, x => Corporation.Create(x, newItem, model))
            //                    .OfType<IParameter>();
            //newItem.Parameters.AddOrMoveRange(parameters);


            if (syntax.Initializer == null)
            {
                newItem.ConstructorInitializerType = ConstructorInitializerType.None;
            }
            else
            {
                var initializerSyntax = syntax.Initializer;
                if (initializerSyntax.ThisOrBaseKeyword.ToString() == "this")
                {
                    newItem.ConstructorInitializerType = ConstructorInitializerType.This;
                }
                else
                {
                    newItem.ConstructorInitializerType = ConstructorInitializerType.Base;
                }
                CreateFromWorker.StoreWhitespace(newItem, initializerSyntax.ArgumentList,
                                                 LanguagePart.Initializer, WhitespaceLookup);
                foreach (var arg in initializerSyntax.ArgumentList.Arguments)
                {
                    var newArg = new RDomArgument(arg, newItem, model);

                    // TODO: Named paramters and align this with the invocation factory
                    newArg.ValueExpression = OutputContext.Corporation.CreateSpecial <IExpression>(arg.Expression, newItem, model).FirstOrDefault();
                    CreateFromWorker.StoreWhitespaceForFirstAndLastToken(newArg, arg, LanguagePart.Current, LanguageElement.ConstructorInitializerArgument);
                    CreateFromWorker.StoreListMemberWhitespace(arg,
                                                               SyntaxKind.CommaToken, LanguageElement.ConstructorInitializerArgument, newArg);
                    newItem.InitializationArguments.AddOrMove(newArg);
                }
            }

            return(newItem);
        }
        public void Argument_can_be_constructed()
        {
            var expected = 42;

             var expression = new RDomLiteralExpression(expected);
             var arg = new RDomArgument(expression);
             Assert.IsNotNull(expression);
             Assert.IsNotNull(arg);
             var actual = RDom.CSharp.GetSyntaxNode(arg).ToFullString();
             Assert.AreEqual(expected.ToString(), actual);
        }
 public void Invocation_expression_can_be_constructed()
 {
     var root = RDom.CSharp.Load(csharpCode);
      var method = root.Classes.First().Methods.First();
      var expected = "Console.WriteLine(42)";
      var expression = new RDomInvocationExpression("Console.WriteLine");
      var arg = new RDomArgument(new RDomLiteralExpression(42));
      expression.Arguments.AddOrMove(arg);
      Assert.IsNotNull(expression);
      var actual = RDom.CSharp.GetFormattedSourceCode(expression);
      Assert.AreEqual(expected, actual);
 }
Esempio n. 7
0
        public void Argument_can_be_constructed()
        {
            var expected = 42;

            var expression = new RDomLiteralExpression(expected);
            var arg        = new RDomArgument(expression);

            Assert.IsNotNull(expression);
            Assert.IsNotNull(arg);
            var actual = RDom.CSharp.GetSyntaxNode(arg).ToFullString();

            Assert.AreEqual(expected.ToString(), actual);
        }
Esempio n. 8
0
        public void Invocation_expression_can_be_constructed()
        {
            var root       = RDom.CSharp.Load(csharpCode);
            var method     = root.Classes.First().Methods.First();
            var expected   = "Console.WriteLine(42)";
            var expression = new RDomInvocationExpression("Console.WriteLine");
            var arg        = new RDomArgument(new RDomLiteralExpression(42));

            expression.Arguments.AddOrMove(arg);
            Assert.IsNotNull(expression);
            var actual = RDom.CSharp.GetFormattedSourceCode(expression);

            Assert.AreEqual(expected, actual);
        }
Esempio n. 9
0
        private IEnumerable <IArgument> GetArguments(ArgumentListSyntax argumentList, IDom newItem, SemanticModel model)
        {
            var ret = new List <IArgument>();

            foreach (var argSyntax in argumentList.Arguments)
            {
                // TODO: more work, align with constructor args, and probably create factory
                var newArg = new RDomArgument(argSyntax, newItem, model);
                // KAD: Explict node removal
                //newArg.ValueExpression = OutputContext.Corporation.Create<IExpression>(argSyntax.Expression, newItem, model).FirstOrDefault();
                newArg.ValueExpression = OutputContext.Corporation.CreateSpecial <IExpression>(argSyntax.Expression, newItem, model).FirstOrDefault();
                if (argSyntax.NameColon != null)
                {
                    newArg.Name = argSyntax.NameColon.Name.ToString();
                }
                newArg.IsRef = argSyntax.RefOrOutKeyword.CSharpKind() == SyntaxKind.RefKeyword;
                newArg.IsOut = argSyntax.RefOrOutKeyword.CSharpKind() == SyntaxKind.OutKeyword;
                ret.Add(newArg);
            }
            return(ret);
        }
        private RDomParameter CreateParameter(List<IAssignmentStatement> assignments, List<Tuple<RDomParameter, RDomParameter, RDomArgument>> altConstructorPairs, IProperty prop)
        {
            var paramName = StringUtilities.CamelCase(prop.Name);
             var type = prop.PropertyType.Copy();
             var param = new RDomParameter(paramName, type);
             triviaManager.StoreStringWhitespace(param, LanguageElement.Identifier, "              ", "");
             triviaManager.StoreStringWhitespace(param, LanguageElement.EndOfLine, "", "\r\n");
             var newAssignment = new RDomAssignmentStatement(
                  RDom.CSharp.ParseExpression(prop.Name),
                  RDom.CSharp.ParseExpression(paramName));
             triviaManager.StoreStringWhitespace(newAssignment, LanguageElement.EndOfLine, "", "\r\n");
             assignments.Add(newAssignment);
             if (!(prop.Attributes.Any(x => x.Name == "Required")))
             {
            param.DefaultValue = GetDefaultValue(prop.PropertyType);
             }
             if (prop.PropertyType.Name == "IReferencedType")
             {
            var paramNewName = paramName + "Name";
            var paramNew = new RDomParameter(paramName, "System.String");
            var argNew = new RDomArgument(RDom.CSharp.ParseExpression(string.Format("new RDomReferencedType({0})", paramNewName)));
            altConstructorPairs.Add(Tuple.Create(param, paramNew, argNew));
             }

             return param;
        }