public override object VisitFieldDeclaration(FieldDeclaration fieldDeclaration, object data) { for (int i = 0; i < fieldDeclaration.Fields.Count; ++i) { VariableDeclaration field = (VariableDeclaration)fieldDeclaration.Fields[i]; if ((fieldDeclaration.Modifier & Modifiers.WithEvents) != 0) { //this.withEventsFields.Add(field); } TypeReference fieldType = fieldDeclaration.GetTypeForField(i); if (fieldType.IsNull) { fieldType = new TypeReference(typeDeclarations.Peek().Name); } CodeMemberField memberField = new CodeMemberField(ConvType(fieldType), field.Name); memberField.Attributes = ConvMemberAttributes(fieldDeclaration.Modifier); if (!field.Initializer.IsNull) { memberField.InitExpression = (CodeExpression)field.Initializer.AcceptVisitor(this, data); } typeDeclarations.Peek().Members.Add(memberField); } return(null); }
public object VisitFieldDeclaration(FieldDeclaration fieldDeclaration, object data) { for (int i = 0; i < fieldDeclaration.Fields.Count; i++) { ConvertField(fieldDeclaration.GetTypeForField(i), fieldDeclaration.Fields[i], fieldDeclaration); } return(null); }
void TransformWithEventsField(FieldDeclaration fieldDeclaration) { if (resolver.CallingClass == null) { return; } INode insertAfter = fieldDeclaration; for (int i = 0; i < fieldDeclaration.Fields.Count;) { VariableDeclaration field = fieldDeclaration.Fields[i]; IdentifierExpression backingFieldNameExpression = null; PropertyDeclaration createdProperty = null; foreach (IMethod m in resolver.CallingClass.GetCompoundClass().Methods) { foreach (string handlesClause in m.HandlesClauses) { int pos = handlesClause.IndexOf('.'); if (pos > 0) { string fieldName = handlesClause.Substring(0, pos); string eventName = handlesClause.Substring(pos + 1); if (resolver.IsSameName(fieldName, field.Name)) { if (createdProperty == null) { FieldDeclaration backingField = new FieldDeclaration(null); backingField.Fields.Add(new VariableDeclaration( "withEventsField_" + field.Name, field.Initializer, fieldDeclaration.GetTypeForField(i))); backingField.Modifier = Modifiers.Private; InsertAfterSibling(insertAfter, backingField); createdProperty = new PropertyDeclaration(fieldDeclaration.Modifier, null, field.Name, null); createdProperty.TypeReference = fieldDeclaration.GetTypeForField(i); createdProperty.StartLocation = fieldDeclaration.StartLocation; createdProperty.EndLocation = fieldDeclaration.EndLocation; backingFieldNameExpression = new IdentifierExpression(backingField.Fields[0].Name); createdProperty.GetRegion = new PropertyGetRegion(new BlockStatement(), null); createdProperty.GetRegion.Block.AddChild(new ReturnStatement( backingFieldNameExpression)); Expression backingFieldNotNullTest = new BinaryOperatorExpression( backingFieldNameExpression, BinaryOperatorType.InEquality, new PrimitiveExpression(null, "null")); createdProperty.SetRegion = new PropertySetRegion(new BlockStatement(), null); createdProperty.SetRegion.Block.AddChild(new IfElseStatement( backingFieldNotNullTest, new BlockStatement() )); createdProperty.SetRegion.Block.AddChild(new ExpressionStatement( new AssignmentExpression( backingFieldNameExpression, AssignmentOperatorType.Assign, new IdentifierExpression("value")))); createdProperty.SetRegion.Block.AddChild(new IfElseStatement( backingFieldNotNullTest, new BlockStatement() )); InsertAfterSibling(backingField, createdProperty); insertAfter = createdProperty; } // insert code to remove the event handler IfElseStatement ies = (IfElseStatement)createdProperty.SetRegion.Block.Children[0]; ies.TrueStatement[0].AddChild(new RemoveHandlerStatement( new MemberReferenceExpression(backingFieldNameExpression, eventName), new AddressOfExpression(new IdentifierExpression(m.Name)))); // insert code to add the event handler ies = (IfElseStatement)createdProperty.SetRegion.Block.Children[2]; ies.TrueStatement[0].AddChild(new AddHandlerStatement( new MemberReferenceExpression(backingFieldNameExpression, eventName), new AddressOfExpression(new IdentifierExpression(m.Name)))); } } } } if (createdProperty != null) { // field replaced with property fieldDeclaration.Fields.RemoveAt(i); } else { i++; } } }
public override object VisitFieldDeclaration(FieldDeclaration fieldDeclaration, object data) { for (int i = 0; i < fieldDeclaration.Fields.Count; ++i) { VariableDeclaration field = (VariableDeclaration)fieldDeclaration.Fields[i]; if ((fieldDeclaration.Modifier & Modifiers.WithEvents) != 0) { //this.withEventsFields.Add(field); } TypeReference fieldType = fieldDeclaration.GetTypeForField(i); if (fieldType.IsNull) { fieldType = new TypeReference(typeDeclarations.Peek().Name); } CodeMemberField memberField = new CodeMemberField(ConvType(fieldType), field.Name); memberField.Attributes = ConvMemberAttributes(fieldDeclaration.Modifier); if (!field.Initializer.IsNull) { memberField.InitExpression = (CodeExpression)field.Initializer.AcceptVisitor(this, data); } typeDeclarations.Peek().Members.Add(memberField); } return null; }