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); }
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; }
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)); }