AttributeSection ConvertAttributeSection (List<Mono.CSharp.Attribute> optAttributes) { if (optAttributes == null) return null; AttributeSection result = new AttributeSection (); var loc = LocationsBag.GetLocations (optAttributes); int pos = 0; if (loc != null) result.AddChild (new CSharpTokenNode (Convert (loc [pos++]), 1), AttributeSection.Roles.LBracket); string target = optAttributes.First ().ExplicitTarget; if (!string.IsNullOrEmpty (target)) { if (loc != null && pos < loc.Count - 1) { result.AddChild (Identifier.Create (target, Convert (loc [pos++])), AttributeSection.Roles.Identifier); } else { result.AddChild (Identifier.Create (target), AttributeSection.Roles.Identifier); } if (loc != null && pos < loc.Count) result.AddChild (new CSharpTokenNode (Convert (loc [pos++]), 1), AttributeSection.Roles.Colon); } foreach (var attr in GetAttributes (optAttributes)) { result.AddChild (attr, AttributeSection.AttributeRole); } // optional comma if (loc != null && pos < loc.Count - 1 && !loc [pos].Equals (loc [pos + 1])) result.AddChild (new CSharpTokenNode (Convert (loc [pos++]), 1), AttributeSection.Roles.Comma); if (loc != null && pos < loc.Count) result.AddChild (new CSharpTokenNode (Convert (loc [pos++]), 1), AttributeSection.Roles.RBracket); return result; }
AttributeSection ConvertAttributeSection(IEnumerable<Mono.CSharp.Attribute> optAttributes) { if (optAttributes == null) return null; var result = new AttributeSection(); var loc = LocationsBag.GetLocations(optAttributes); int pos = 0; if (loc != null) result.AddChild(new CSharpTokenNode(Convert(loc [pos++]), Roles.LBracket), Roles.LBracket); var first = optAttributes.FirstOrDefault(); string target = first != null ? first.ExplicitTarget : null; if (!string.IsNullOrEmpty(target)) { if (loc != null && pos < loc.Count - 1) { result.AddChild(Identifier.Create(target, Convert(loc [pos++])), Roles.Identifier); } else { result.AddChild(Identifier.Create(target), Roles.Identifier); } if (loc != null && pos < loc.Count) result.AddChild(new CSharpTokenNode(Convert(loc [pos++]), Roles.Colon), Roles.Colon); } int attributeCount = 0; foreach (var attr in GetAttributes (optAttributes)) { result.AddChild(attr, Roles.Attribute); if (loc != null && pos + 1 < loc.Count) result.AddChild(new CSharpTokenNode(Convert(loc [pos++]), Roles.Comma), Roles.Comma); attributeCount++; } if (attributeCount == 0) return null; // Left and right bracket + commas between the attributes int locCount = 2 + attributeCount - 1; // optional comma if (loc != null && pos < loc.Count - 1 && loc.Count == locCount + 1) result.AddChild(new CSharpTokenNode(Convert(loc [pos++]), Roles.Comma), Roles.Comma); if (loc != null && pos < loc.Count) result.AddChild(new CSharpTokenNode(Convert(loc [pos++]), Roles.RBracket), Roles.RBracket); return result; }
AttributeSection ConvertAttributeSection (List<Mono.CSharp.Attribute> optAttributes) { if (optAttributes == null) return null; AttributeSection result = new AttributeSection (); var loc = LocationsBag.GetLocations (optAttributes); if (loc != null) result.AddChild (new CSharpTokenNode (Convert (loc [0]), 1), AttributeSection.Roles.LBracket); result.AttributeTarget = optAttributes.First ().ExplicitTarget; foreach (var attr in GetAttributes (optAttributes)) { result.AddChild (attr, AttributeSection.AttributeRole); } if (loc != null) result.AddChild (new CSharpTokenNode (Convert (loc [1]), 1), AttributeSection.Roles.RBracket); return result; }