public override object TrackedVisitFieldDeclaration(FieldDeclaration fieldDeclaration, object data) { VariableDeclaration field = (VariableDeclaration)fieldDeclaration.Fields[0]; TypeDeclaration typeDeclaration = (TypeDeclaration)fieldDeclaration.Parent; NodeTypeExistenceVisitor nodeTypeExistenceVisitor = new NodeTypeExistenceVisitor(typeof(ThisReferenceExpression)); NodeTypeExistenceVisitor indexerNodeExistenceVisitor = new NodeTypeExistenceVisitor(typeof(IndexerExpression)); field.Initializer.AcceptVisitor(nodeTypeExistenceVisitor, null); field.Initializer.AcceptVisitor(indexerNodeExistenceVisitor, null); if (field.Initializer != null && (field.Initializer is InvocationExpression || IsArrayCreation(fieldDeclaration) || nodeTypeExistenceVisitor.Contains || indexerNodeExistenceVisitor.Contains) && !AstUtil.ContainsModifier(fieldDeclaration, Modifiers.Static)) { IList constructors = AstUtil.GetChildrenWithType(typeDeclaration, typeof(ConstructorDeclaration)); IdentifierExpression left = new IdentifierExpression(field.Name); Expression right = field.Initializer; AssignmentExpression assignmentExpression = new AssignmentExpression(left, AssignmentOperatorType.Assign, right); ExpressionStatement ExpressionStatement = new ExpressionStatement(assignmentExpression); field.Initializer = null; ConstructorDeclaration constructorDeclaration = null; ExpressionStatement.Parent = constructorDeclaration; foreach (ConstructorDeclaration consDec in constructors) { if (!AstUtil.ContainsModifier(consDec, Modifiers.Static)) { if (consDec.Parameters.Count == 0) { constructorDeclaration = consDec; constructorDeclaration.Body.Children.Add(ExpressionStatement); constructorDeclaration.Parent = typeDeclaration; return(base.TrackedVisitFieldDeclaration(fieldDeclaration, data)); } else { consDec.ConstructorInitializer = new ConstructorInitializer(); consDec.ConstructorInitializer.ConstructorInitializerType = ConstructorInitializerType.This; } } } constructorDeclaration = GetConstructor(ExpressionStatement, typeDeclaration); constructorDeclaration.Parent = typeDeclaration; return(base.TrackedVisitFieldDeclaration(fieldDeclaration, data)); } return(base.TrackedVisitFieldDeclaration(fieldDeclaration, data)); }
public override object TrackedVisitFieldDeclaration(FieldDeclaration fieldDeclaration, object data) { VariableDeclaration field = (VariableDeclaration) fieldDeclaration.Fields[0]; TypeDeclaration typeDeclaration = (TypeDeclaration) fieldDeclaration.Parent; NodeTypeExistenceVisitor nodeTypeExistenceVisitor = new NodeTypeExistenceVisitor(typeof(ThisReferenceExpression)); NodeTypeExistenceVisitor indexerNodeExistenceVisitor = new NodeTypeExistenceVisitor(typeof(IndexerExpression)); field.Initializer.AcceptVisitor(nodeTypeExistenceVisitor, null); field.Initializer.AcceptVisitor(indexerNodeExistenceVisitor, null); if (field.Initializer != null && (field.Initializer is InvocationExpression || IsArrayCreation(fieldDeclaration) || nodeTypeExistenceVisitor.Contains || indexerNodeExistenceVisitor.Contains) && !AstUtil.ContainsModifier(fieldDeclaration, Modifiers.Static)) { IList constructors = AstUtil.GetChildrenWithType(typeDeclaration, typeof(ConstructorDeclaration)); IdentifierExpression left = new IdentifierExpression(field.Name); Expression right = field.Initializer; AssignmentExpression assignmentExpression = new AssignmentExpression(left, AssignmentOperatorType.Assign, right); ExpressionStatement ExpressionStatement = new ExpressionStatement(assignmentExpression); field.Initializer = null; ConstructorDeclaration constructorDeclaration = null; ExpressionStatement.Parent = constructorDeclaration; foreach (ConstructorDeclaration consDec in constructors) { if (!AstUtil.ContainsModifier(consDec, Modifiers.Static)) { if (consDec.Parameters.Count == 0) { constructorDeclaration = consDec; constructorDeclaration.Body.Children.Add(ExpressionStatement); constructorDeclaration.Parent = typeDeclaration; return base.TrackedVisitFieldDeclaration(fieldDeclaration, data); } else { consDec.ConstructorInitializer = new ConstructorInitializer(); consDec.ConstructorInitializer.ConstructorInitializerType = ConstructorInitializerType.This; } } } constructorDeclaration = GetConstructor(ExpressionStatement, typeDeclaration); constructorDeclaration.Parent = typeDeclaration; return base.TrackedVisitFieldDeclaration(fieldDeclaration, data); } return base.TrackedVisitFieldDeclaration(fieldDeclaration, data); }