public override void Visit(Property p) { var newProperty = new PropertyDeclaration(); AddAttributeSection(newProperty, p); var location = LocationsBag.GetMemberLocation(p); AddModifiers(newProperty, location); newProperty.AddChild(ConvertToType(p.TypeExpression), Roles.Type); AddExplicitInterface(newProperty, p.MemberName); newProperty.AddChild(Identifier.Create(p.MemberName.Name, Convert(p.Location)), Roles.Identifier); if (location != null && location.Count > 0) newProperty.AddChild(new CSharpTokenNode(Convert(location [0]), Roles.LBrace), Roles.LBrace); Accessor getAccessor = null; if (p.Get != null) { getAccessor = new Accessor(); AddAttributeSection(getAccessor, p.Get); var getLocation = LocationsBag.GetMemberLocation(p.Get); AddModifiers(getAccessor, getLocation); getAccessor.AddChild(new CSharpTokenNode(Convert(p.Get.Location), PropertyDeclaration.GetKeywordRole), PropertyDeclaration.GetKeywordRole); if (p.Get.Block != null) { getAccessor.AddChild((BlockStatement)p.Get.Block.Accept(this), Roles.Body); } else { if (getLocation != null && getLocation.Count > 0) getAccessor.AddChild(new CSharpTokenNode(Convert(getLocation [0]), Roles.Semicolon), Roles.Semicolon); } } Accessor setAccessor = null; if (p.Set != null) { setAccessor = new Accessor(); AddAttributeSection(setAccessor, p.Set); var setLocation = LocationsBag.GetMemberLocation(p.Set); AddModifiers(setAccessor, setLocation); setAccessor.AddChild(new CSharpTokenNode(Convert(p.Set.Location), PropertyDeclaration.SetKeywordRole), PropertyDeclaration.SetKeywordRole); if (p.Set.Block != null) { setAccessor.AddChild((BlockStatement)p.Set.Block.Accept(this), Roles.Body); } else { if (setLocation != null && setLocation.Count > 0) setAccessor.AddChild(new CSharpTokenNode(Convert(setLocation [0]), Roles.Semicolon), Roles.Semicolon); } } if (getAccessor != null && setAccessor != null) { if (getAccessor.StartLocation < setAccessor.StartLocation) { newProperty.AddChild(getAccessor, PropertyDeclaration.GetterRole); newProperty.AddChild(setAccessor, PropertyDeclaration.SetterRole); } else { newProperty.AddChild(setAccessor, PropertyDeclaration.SetterRole); newProperty.AddChild(getAccessor, PropertyDeclaration.GetterRole); } } else { if (getAccessor != null) newProperty.AddChild(getAccessor, PropertyDeclaration.GetterRole); if (setAccessor != null) newProperty.AddChild(setAccessor, PropertyDeclaration.SetterRole); } if (location != null && location.Count > 1) { newProperty.AddChild(new CSharpTokenNode(Convert(location [1]), Roles.RBrace), Roles.RBrace); } else { // parser error, set end node to max value. newProperty.AddChild(new ErrorNode(), Roles.Error); } typeStack.Peek().AddChild(newProperty, Roles.TypeMemberRole); }
public override void Visit (Property p) { PropertyDeclaration newProperty = new PropertyDeclaration (); var location = LocationsBag.GetMemberLocation (p); AddModifiers (newProperty, location); newProperty.AddChild ((INode)p.TypeName.Accept (this), AbstractNode.Roles.ReturnType); newProperty.AddChild (new Identifier (p.MemberName.Name, Convert (p.MemberName.Location)), AbstractNode.Roles.Identifier); if (location != null) newProperty.AddChild (new CSharpTokenNode (Convert (location[0]), 1), MethodDeclaration.Roles.LBrace); if (p.Get != null) { MonoDevelop.CSharp.Dom.Accessor getAccessor = new MonoDevelop.CSharp.Dom.Accessor (); var getLocation = LocationsBag.GetMemberLocation (p.Get); AddModifiers (getAccessor, getLocation); getAccessor.AddChild (new CSharpTokenNode (Convert (p.Get.Location), "get".Length), PropertyDeclaration.Roles.Keyword); if (p.Get.Block != null) { getAccessor.AddChild ((INode)p.Get.Block.Accept (this), MethodDeclaration.Roles.Body); } else { if (getLocation != null && getLocation.Count > 0) newProperty.AddChild (new CSharpTokenNode (Convert (getLocation[0]), 1), MethodDeclaration.Roles.Semicolon); } newProperty.AddChild (getAccessor, PropertyDeclaration.PropertyGetRole); } if (p.Set != null) { MonoDevelop.CSharp.Dom.Accessor setAccessor = new MonoDevelop.CSharp.Dom.Accessor (); var setLocation = LocationsBag.GetMemberLocation (p.Set); AddModifiers (setAccessor, setLocation); setAccessor.AddChild (new CSharpTokenNode (Convert (p.Set.Location), "set".Length), PropertyDeclaration.Roles.Keyword); if (p.Set.Block != null) { setAccessor.AddChild ((INode)p.Set.Block.Accept (this), MethodDeclaration.Roles.Body); } else { if (setLocation != null && setLocation.Count > 0) newProperty.AddChild (new CSharpTokenNode (Convert (setLocation[0]), 1), MethodDeclaration.Roles.Semicolon); } newProperty.AddChild (setAccessor, PropertyDeclaration.PropertySetRole); } if (location != null) newProperty.AddChild (new CSharpTokenNode (Convert (location[1]), 1), MethodDeclaration.Roles.RBrace); typeStack.Peek ().AddChild (newProperty, TypeDeclaration.Roles.Member); }
public override void Visit (Property p) { PropertyDeclaration newProperty = new PropertyDeclaration (); AddAttributeSection (newProperty, p); var location = LocationsBag.GetMemberLocation (p); AddModifiers (newProperty, location); newProperty.AddChild (ConvertToType (p.TypeName), AstNode.Roles.Type); if (p.MemberName.Left != null) { newProperty.AddChild (ConvertToType (p.MemberName.Left), PropertyDeclaration.PrivateImplementationTypeRole); var privateImplTypeLoc = LocationsBag.GetLocations (p.MemberName.Left); if (privateImplTypeLoc != null) newProperty.AddChild (new CSharpTokenNode (Convert (privateImplTypeLoc[0]), 1), MethodDeclaration.Roles.Dot); } newProperty.AddChild (Identifier.Create (p.MemberName.Name, Convert (p.Location)), PropertyDeclaration.Roles.Identifier); if (location != null) newProperty.AddChild (new CSharpTokenNode (Convert (location[0]), 1), MethodDeclaration.Roles.LBrace); Accessor getAccessor = null; if (p.Get != null) { getAccessor = new Accessor (); AddAttributeSection (getAccessor, p.Get); var getLocation = LocationsBag.GetMemberLocation (p.Get); AddModifiers (getAccessor, getLocation); getAccessor.AddChild (new CSharpTokenNode (Convert (p.Get.Location), "get".Length), PropertyDeclaration.Roles.Keyword); if (p.Get.Block != null) { getAccessor.AddChild ((BlockStatement)p.Get.Block.Accept (this), MethodDeclaration.Roles.Body); } else { if (getLocation != null && getLocation.Count > 0) getAccessor.AddChild (new CSharpTokenNode (Convert (getLocation[0]), 1), MethodDeclaration.Roles.Semicolon); } } Accessor setAccessor = null; if (p.Set != null) { setAccessor = new Accessor (); AddAttributeSection (setAccessor, p.Set); var setLocation = LocationsBag.GetMemberLocation (p.Set); AddModifiers (setAccessor, setLocation); setAccessor.AddChild (new CSharpTokenNode (Convert (p.Set.Location), "set".Length), PropertyDeclaration.Roles.Keyword); if (p.Set.Block != null) { setAccessor.AddChild ((BlockStatement)p.Set.Block.Accept (this), MethodDeclaration.Roles.Body); } else { if (setLocation != null && setLocation.Count > 0) setAccessor.AddChild (new CSharpTokenNode (Convert (setLocation[0]), 1), MethodDeclaration.Roles.Semicolon); } } if (getAccessor != null && setAccessor != null) { if (getAccessor.StartLocation < setAccessor.StartLocation) { newProperty.AddChild (getAccessor, PropertyDeclaration.GetterRole); newProperty.AddChild (setAccessor, PropertyDeclaration.SetterRole); } else { newProperty.AddChild (setAccessor, PropertyDeclaration.SetterRole); newProperty.AddChild (getAccessor, PropertyDeclaration.GetterRole); } } else { if (getAccessor != null) newProperty.AddChild (getAccessor, PropertyDeclaration.GetterRole); if (setAccessor != null) newProperty.AddChild (setAccessor, PropertyDeclaration.SetterRole); } if (location != null && location.Count > 1) { newProperty.AddChild (new CSharpTokenNode (Convert (location[1]), 1), MethodDeclaration.Roles.RBrace); } else { // parser error, set end node to max value. newProperty.AddChild (new ErrorNode (), AstNode.Roles.Error); } typeStack.Peek ().AddChild (newProperty, TypeDeclaration.MemberRole); }