Browse Source

try revert critical method

newNRvisualizers
Alex Mizuki 14 years ago
parent
commit
aff71a5d53
  1. 144
      ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs

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

@ -2706,72 +2706,84 @@ namespace ICSharpCode.NRefactory.CSharp
return result; return result;
} }
ArrayInitializerExpression ConvertCollectionOrObjectInitializers (CollectionOrObjectInitializers minit) ArrayInitializerExpression ConvertCollectionOrObjectInitializers(CollectionOrObjectInitializers minit)
{ {
if (minit == null) if (minit == null)
return null; return null;
var init = new ArrayInitializerExpression (); var init = new ArrayInitializerExpression();
AddConvertCollectionOrObjectInitializers (init, minit); AddConvertCollectionOrObjectInitializers(init, minit);
return init; return init;
} }
void AddConvertCollectionOrObjectInitializers (Expression init, CollectionOrObjectInitializers minit) void AddConvertCollectionOrObjectInitializers(Expression init, CollectionOrObjectInitializers minit)
{ {
var initLoc = LocationsBag.GetLocations (minit); var initLoc = LocationsBag.GetLocations(minit);
var commaLoc = LocationsBag.GetLocations (minit.Initializers); var commaLoc = LocationsBag.GetLocations(minit.Initializers);
int curComma = 0; int curComma = 0;
if (initLoc != null) if (initLoc != null)
init.AddChild (new CSharpTokenNode (Convert (initLoc [0])), Roles.LBrace); init.AddChild(new CSharpTokenNode(Convert(initLoc[0])), Roles.LBrace);
foreach (var expr in minit.Initializers) { foreach (var expr in minit.Initializers)
var collectionInit = expr as CollectionElementInitializer; {
if (collectionInit != null) { var collectionInit = expr as CollectionElementInitializer;
var parent = new ArrayInitializerExpression (); if (collectionInit != null)
{
parent.AddChild (new CSharpTokenNode (Convert (expr.Location)), Roles.LBrace); var parent = new ArrayInitializerExpression();
for (int i = 0; i < collectionInit.Arguments.Count; i++) { var braceLocs = LocationsBag.GetLocations(expr);
var arg = collectionInit.Arguments [i] as CollectionElementInitializer.ElementInitializerArgument; if (braceLocs != null)
if (arg == null) parent.AddChild(new CSharpTokenNode(Convert(braceLocs[0])), Roles.LBrace);
continue;
parent.AddChild ((ICSharpCode.NRefactory.CSharp.Expression)arg.Expr.Accept (this), Roles.Expression); for (int i = 0; i < collectionInit.Arguments.Count; i++)
} {
var arg = collectionInit.Arguments[i] as CollectionElementInitializer.ElementInitializerArgument;
var braceLocs = LocationsBag.GetLocations (expr); if (arg == null)
if (braceLocs != null) continue;
parent.AddChild (new CSharpTokenNode (Convert (braceLocs [0])), Roles.RBrace); parent.AddChild((ICSharpCode.NRefactory.CSharp.Expression)arg.Expr.Accept(this), Roles.Expression);
}
init.AddChild (parent, Roles.Expression);
} else { if (braceLocs != null)
var eleInit = expr as ElementInitializer; parent.AddChild(new CSharpTokenNode(Convert(braceLocs[1])), Roles.RBrace);
if (eleInit != null) {
var nexpr = new NamedExpression (); init.AddChild(parent, Roles.Expression);
nexpr.AddChild (Identifier.Create (eleInit.Name, Convert (eleInit.Location)), Roles.Identifier); }
var assignLoc = LocationsBag.GetLocations (eleInit); else
if (assignLoc != null) {
nexpr.AddChild (new CSharpTokenNode (Convert (assignLoc [0])), Roles.Assign); var eleInit = expr as ElementInitializer;
if (eleInit.Source != null) { if (eleInit != null)
if (eleInit.Source is CollectionOrObjectInitializers) { {
var arrInit = new ArrayInitializerExpression (); var nexpr = new NamedExpression();
AddConvertCollectionOrObjectInitializers (arrInit, eleInit.Source as CollectionOrObjectInitializers); nexpr.AddChild(Identifier.Create(eleInit.Name, Convert(eleInit.Location)), Roles.Identifier);
nexpr.AddChild (arrInit, Roles.Expression); var assignLoc = LocationsBag.GetLocations(eleInit);
} else { if (assignLoc != null)
nexpr.AddChild ((Expression)eleInit.Source.Accept (this), Roles.Expression); nexpr.AddChild(new CSharpTokenNode(Convert(assignLoc[0])), Roles.Assign);
} if (eleInit.Source != null)
} {
if (eleInit.Source is CollectionOrObjectInitializers)
init.AddChild (nexpr, Roles.Expression); {
} var arrInit = new ArrayInitializerExpression();
} AddConvertCollectionOrObjectInitializers(arrInit, eleInit.Source as CollectionOrObjectInitializers);
if (commaLoc != null && curComma < commaLoc.Count) nexpr.AddChild(arrInit, Roles.Expression);
init.AddChild (new CSharpTokenNode (Convert (commaLoc [curComma++])), Roles.Comma); }
else
} {
if (initLoc != null) { nexpr.AddChild((Expression)eleInit.Source.Accept(this), Roles.Expression);
if (initLoc.Count == 3) // optional comma }
init.AddChild (new CSharpTokenNode (Convert (initLoc [1])), Roles.Comma); }
init.AddChild (new CSharpTokenNode (Convert (initLoc [initLoc.Count - 1])), Roles.RBrace);
} init.AddChild(nexpr, Roles.Expression);
} }
}
if (commaLoc != null && curComma < commaLoc.Count)
init.AddChild(new CSharpTokenNode(Convert(commaLoc[curComma++])), Roles.Comma);
}
if (initLoc != null)
{
if (initLoc.Count == 3) // optional comma
init.AddChild(new CSharpTokenNode(Convert(initLoc[1])), Roles.Comma);
init.AddChild(new CSharpTokenNode(Convert(initLoc[initLoc.Count - 1])), Roles.RBrace);
}
}
public override object Visit (NewInitialize newInitializeExpression) public override object Visit (NewInitialize newInitializeExpression)
{ {

Loading…
Cancel
Save