NamespaceDeclaration CreateNamespace(DependencyRelation relation, NamespaceDeclaration originalNamespace)
 {
     var ns = new NamespaceDeclaration(originalNamespace.Name);
     ns.Children.AddRange(originalNamespace.Children.OfType<UsingDeclaration>());
     ns.Children.Add(CreatePartialClass(relation));
     return ns;
 }
        NamespaceDeclaration CreateNamespace(DependencyRelation relation, NamespaceDeclaration originalNamespace)
        {
            var ns = new NamespaceDeclaration(originalNamespace.Name);

            ns.Children.AddRange(originalNamespace.Children.OfType <UsingDeclaration>());
            ns.Children.Add(CreatePartialClass(relation));
            return(ns);
        }
 IEnumerable <INode> CreateAssignments(DependencyRelation relation)
 {
     return(from d in relation.Dependencies
            let name = CamelCaseName(d)
                       select new ExpressionStatement(new AssignmentExpression(
                                                          new MemberReferenceExpression(
                                                              new ThisReferenceExpression(),
                                                              name
                                                              ),
                                                          AssignmentOperatorType.Assign,
                                                          new IdentifierExpression(name)
                                                          )));
 }
 IEnumerable <ConstructorDeclaration> CreateConstructors(DependencyRelation relation)
 {
     if (relation.ExistingConstructors.Count > 0)
     {
         foreach (var c in relation.ExistingConstructors)
         {
             yield return(CreateConstructorFromExistingConstructor(relation, c));
         }
     }
     else
     {
         yield return(CreateSimpleConstructor(relation));
     }
 }
 IEnumerable<ConstructorDeclaration> CreateConstructors(DependencyRelation relation)
 {
     if (relation.ExistingConstructors.Count > 0)
     {
         foreach (var c in relation.ExistingConstructors)
         {
             yield return CreateConstructorFromExistingConstructor(relation, c);
         }
     }
     else
     {
         yield return CreateSimpleConstructor(relation);
     }
 }
        INode CreatePartialClass(DependencyRelation relation)
        {
            var partialClass = new TypeDeclaration(
                relation.DependentType.Modifier, 
                new List<AttributeSection>()
            );
            partialClass.Name = relation.DependentType.Name;
            var fields = CreateFields(relation);
            var constructors = CreateConstructors(relation);

            partialClass.Children.AddRange(fields);
            partialClass.Children.AddRange(constructors);

            return partialClass;
        }
 ConstructorDeclaration CreateSimpleConstructor(DependencyRelation relation)
 {
     return(new ConstructorDeclaration(
                relation.DependentType.Name,
                Modifiers.Public,
                CreateParameters(relation).ToList(),
                new List <AttributeSection>()
                )
     {
         Body = new BlockStatement
         {
             Children = CreateAssignments(relation).ToList()
         }
     });
 }
 IEnumerable<FieldDeclaration> CreateFields(DependencyRelation relation)
 {
     return from d in relation.Dependencies
            select new FieldDeclaration(
                new List<AttributeSection>(),
                d,
                Modifiers.Private
            )
            {
                Fields = new List<VariableDeclaration>
                {
                    new VariableDeclaration(CamelCaseName(d))
                }
            };
 }
 IEnumerable <FieldDeclaration> CreateFields(DependencyRelation relation)
 {
     return(from d in relation.Dependencies
            select new FieldDeclaration(
                new List <AttributeSection>(),
                d,
                Modifiers.Private
                )
     {
         Fields = new List <VariableDeclaration>
         {
             new VariableDeclaration(CamelCaseName(d))
         }
     });
 }
 ConstructorDeclaration CreateConstructorFromExistingConstructor(DependencyRelation relation, ConstructorDeclaration c)
 {
     return(new ConstructorDeclaration(
                relation.DependentType.Name,
                Modifiers.Public,
                c.Parameters.Concat(CreateParameters(relation)).ToList(),
                new List <AttributeSection>()
                )
     {
         Body = new BlockStatement
         {
             Children = CreateAssignments(relation).Concat(c.Body.Children).ToList()
         }
     });
 }
        INode CreatePartialClass(DependencyRelation relation)
        {
            var partialClass = new TypeDeclaration(
                relation.DependentType.Modifier,
                new List <AttributeSection>()
                );

            partialClass.Name = relation.DependentType.Name;
            var fields       = CreateFields(relation);
            var constructors = CreateConstructors(relation);

            partialClass.Children.AddRange(fields);
            partialClass.Children.AddRange(constructors);

            return(partialClass);
        }
Esempio n. 12
0
        public override object VisitTypeDeclaration(TypeDeclaration typeDeclaration, object data)
        {
            var previous = currentDependencyRelation;

            if (typeDeclaration.Type == ClassType.Class)
            {
                var dependsOn = FindDependencyDeclaration(typeDeclaration);
                if (dependsOn != null)
                {
                    currentDependencyRelation = new DependencyRelation(typeDeclaration, dependsOn.GenericTypes);
                    DependencyRelations.Add(currentDependencyRelation);
                }
            }

            var result = base.VisitTypeDeclaration(typeDeclaration, data);
            currentDependencyRelation = previous;
            return result;
        }
Esempio n. 13
0
        public override object VisitTypeDeclaration(TypeDeclaration typeDeclaration, object data)
        {
            var previous = currentDependencyRelation;

            if (typeDeclaration.Type == ClassType.Class)
            {
                var dependsOn = FindDependencyDeclaration(typeDeclaration);
                if (dependsOn != null)
                {
                    currentDependencyRelation = new DependencyRelation(typeDeclaration, dependsOn.GenericTypes);
                    DependencyRelations.Add(currentDependencyRelation);
                }
            }

            var result = base.VisitTypeDeclaration(typeDeclaration, data);

            currentDependencyRelation = previous;
            return(result);
        }
 ConstructorDeclaration CreateSimpleConstructor(DependencyRelation relation)
 {
     return new ConstructorDeclaration(
         relation.DependentType.Name,
         Modifiers.Public,
         CreateParameters(relation).ToList(),
         new List<AttributeSection>()
     )
     {
         Body = new BlockStatement
         {
             Children = CreateAssignments(relation).ToList()
         }
     };
 }
 ConstructorDeclaration CreateConstructorFromExistingConstructor(DependencyRelation relation, ConstructorDeclaration c)
 {
     return new ConstructorDeclaration(
         relation.DependentType.Name,
         Modifiers.Public,
         c.Parameters.Concat(CreateParameters(relation)).ToList(),
         new List<AttributeSection>()
     )
     {
         Body = new BlockStatement
         {
             Children = CreateAssignments(relation).Concat(c.Body.Children).ToList()
         }
     };
 }
 IEnumerable <ParameterDeclarationExpression> CreateParameters(DependencyRelation relation)
 {
     return(from d in relation.Dependencies
            select new ParameterDeclarationExpression(d, CamelCaseName(d)));
 }
 IEnumerable<INode> CreateAssignments(DependencyRelation relation)
 {
     return from d in relation.Dependencies
            let name = CamelCaseName(d)
            select new ExpressionStatement(new AssignmentExpression(
                new MemberReferenceExpression(
                    new ThisReferenceExpression(),
                    name
                ),
                AssignmentOperatorType.Assign,
                new IdentifierExpression(name)
            ));
 }
 IEnumerable<ParameterDeclarationExpression>CreateParameters(DependencyRelation relation)
 {
     return from d in relation.Dependencies
            select new ParameterDeclarationExpression(d, CamelCaseName(d));
 }