Browse Source

Fixed initializer comma locations.

newNRvisualizers
Mike Krüger 15 years ago
parent
commit
618cb984d1
  1. 51
      ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs

51
ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs

@ -2488,8 +2488,6 @@ namespace ICSharpCode.NRefactory.CSharp
if (braceLocs != null) if (braceLocs != null)
init.AddChild (new CSharpTokenNode (Convert (braceLocs[0]), 1), ArrayInitializerExpression.Roles.LBrace); init.AddChild (new CSharpTokenNode (Convert (braceLocs[0]), 1), ArrayInitializerExpression.Roles.LBrace);
AddConvertCollectionOrObjectInitializers (init, minit); AddConvertCollectionOrObjectInitializers (init, minit);
if (braceLocs != null)
init.AddChild (new CSharpTokenNode (Convert (braceLocs[1]), 1), ArrayInitializerExpression.Roles.RBrace);
return init; return init;
} }
@ -2497,7 +2495,7 @@ namespace ICSharpCode.NRefactory.CSharp
{ {
var initLoc = LocationsBag.GetLocations (minit); var initLoc = LocationsBag.GetLocations (minit);
var commaLoc = LocationsBag.GetLocations (minit.Initializers); var commaLoc = LocationsBag.GetLocations (minit.Initializers);
int curComma = commaLoc != null ? commaLoc.Count - 1 : -1; int curComma = 0;
foreach (var expr in minit.Initializers) { foreach (var expr in minit.Initializers) {
var collectionInit = expr as CollectionElementInitializer; var collectionInit = expr as CollectionElementInitializer;
if (collectionInit != null) { if (collectionInit != null) {
@ -2505,43 +2503,42 @@ namespace ICSharpCode.NRefactory.CSharp
var braceLocs = LocationsBag.GetLocations (expr); var braceLocs = LocationsBag.GetLocations (expr);
if (braceLocs != null) if (braceLocs != null)
parent.AddChild (new CSharpTokenNode (Convert (braceLocs[0]), 1), ArrayInitializerExpression.Roles.LBrace); parent.AddChild (new CSharpTokenNode (Convert (braceLocs [0]), 1), ArrayInitializerExpression.Roles.LBrace);
for (int i = 0; i < collectionInit.Arguments.Count; i++) { for (int i = 0; i < collectionInit.Arguments.Count; i++) {
var arg = collectionInit.Arguments[i] as CollectionElementInitializer.ElementInitializerArgument; var arg = collectionInit.Arguments [i] as CollectionElementInitializer.ElementInitializerArgument;
if (arg == null) if (arg == null)
continue; continue;
parent.AddChild ((ICSharpCode.NRefactory.CSharp.Expression)arg.Expr.Accept (this), ArrayInitializerExpression.Roles.Expression); parent.AddChild ((ICSharpCode.NRefactory.CSharp.Expression)arg.Expr.Accept (this), ArrayInitializerExpression.Roles.Expression);
if (curComma >= 0)
parent.AddChild (new CSharpTokenNode (Convert (commaLoc[curComma--]), 1), ArrayInitializerExpression.Roles.Comma);
} }
if (braceLocs != null) if (braceLocs != null)
parent.AddChild (new CSharpTokenNode (Convert (braceLocs[1]), 1), ArrayInitializerExpression.Roles.RBrace); parent.AddChild (new CSharpTokenNode (Convert (braceLocs [1]), 1), ArrayInitializerExpression.Roles.RBrace);
init.AddChild (parent, ArrayInitializerExpression.Roles.Expression); init.AddChild (parent, ArrayInitializerExpression.Roles.Expression);
continue; } else {
} var eleInit = expr as ElementInitializer;
if (eleInit != null) {
var eleInit = expr as ElementInitializer; var nexpr = new NamedExpression ();
if (eleInit != null) { nexpr.AddChild (Identifier.Create (eleInit.Name, Convert (eleInit.Location)), NamedArgumentExpression.Roles.Identifier);
var nexpr = new NamedExpression (); var assignLoc = LocationsBag.GetLocations (eleInit);
nexpr.AddChild (Identifier.Create (eleInit.Name, Convert(eleInit.Location)), NamedArgumentExpression.Roles.Identifier); if (assignLoc != null)
var assignLoc = LocationsBag.GetLocations (eleInit); nexpr.AddChild (new CSharpTokenNode (Convert (assignLoc [0]), 1), NamedArgumentExpression.Roles.Assign);
if (assignLoc != null) if (eleInit.Source != null) {
nexpr.AddChild (new CSharpTokenNode (Convert (assignLoc[0]), 1), NamedArgumentExpression.Roles.Assign); if (eleInit.Source is CollectionOrObjectInitializers) {
if (eleInit.Source != null) { var arrInit = new ArrayInitializerExpression ();
if (eleInit.Source is CollectionOrObjectInitializers) { AddConvertCollectionOrObjectInitializers (arrInit, eleInit.Source as CollectionOrObjectInitializers);
var arrInit = new ArrayInitializerExpression (); nexpr.AddChild (arrInit, NamedArgumentExpression.Roles.Expression);
AddConvertCollectionOrObjectInitializers (arrInit, eleInit.Source as CollectionOrObjectInitializers); } else {
nexpr.AddChild (arrInit, NamedArgumentExpression.Roles.Expression); nexpr.AddChild ((Expression)eleInit.Source.Accept (this), NamedArgumentExpression.Roles.Expression);
} else { }
nexpr.AddChild ((Expression)eleInit.Source.Accept (this), NamedArgumentExpression.Roles.Expression);
} }
init.AddChild (nexpr, ArrayInitializerExpression.Roles.Expression);
} }
init.AddChild (nexpr, ArrayInitializerExpression.Roles.Expression);
} }
if (commaLoc != null && curComma < commaLoc.Count)
init.AddChild (new CSharpTokenNode (Convert (commaLoc [curComma++]), 1), ArrayInitializerExpression.Roles.Comma);
} }
if (initLoc != null) { if (initLoc != null) {

Loading…
Cancel
Save