From 46f1a2ebff43c27c71df2d85024c7bd12b0ea243 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Mon, 4 Feb 2013 17:52:27 +0100 Subject: [PATCH] Fixed qualified alias token location. --- ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs | 12 ++++++++++-- .../Parser/mcs/cs-parser.cs | 10 +++++----- .../Parser/mcs/cs-parser.jay | 10 +++++----- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs b/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs index 16f8e3c569..a31eb69593 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs @@ -196,10 +196,15 @@ namespace ICSharpCode.NRefactory.CSharp if (typeName is Mono.CSharp.QualifiedAliasMember) { var qam = (Mono.CSharp.QualifiedAliasMember)typeName; + var loc = LocationsBag.GetLocations (typeName); var memberType = new MemberType (); memberType.Target = new SimpleType (qam.alias, Convert (qam.Location)); memberType.IsDoubleColon = true; - memberType.MemberName = qam.Name; + + if (loc != null && loc.Count > 0) + memberType.AddChild (new CSharpTokenNode (Convert (loc [0]), Roles.DoubleColon), Roles.DoubleColon); + + memberType.MemberNameToken = Identifier.Create (qam.Name, loc != null ? Convert (loc[1]) : TextLocation.Empty); return memberType; } @@ -2150,7 +2155,10 @@ namespace ICSharpCode.NRefactory.CSharp result.Target = new SimpleType (qualifiedAliasMember.alias, Convert (qualifiedAliasMember.Location)); result.IsDoubleColon = true; var location = LocationsBag.GetLocations (qualifiedAliasMember); - result.AddChild (Identifier.Create (qualifiedAliasMember.Name, location != null ? Convert (location [0]) : TextLocation.Empty), Roles.Identifier); + if (location != null && location.Count > 0) + result.AddChild (new CSharpTokenNode (Convert (location [0]), Roles.DoubleColon), Roles.DoubleColon); + + result.AddChild (Identifier.Create (qualifiedAliasMember.Name, location != null && location.Count > 1 ? Convert (location [1]) : TextLocation.Empty), Roles.Identifier); return new TypeReferenceExpression () { Type = result }; } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs index 6dc2d0ce6b..835c719bae 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs @@ -6254,7 +6254,7 @@ void case_339() var lt2 = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) yyVals[0+yyTop], lt1.Location); - lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + lbag.AddLocation (yyVal, savedLocation, GetLocation (yyVals[-1+yyTop])); } void case_341() @@ -6364,7 +6364,7 @@ void case_356() var lt2 = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; yyVal = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) yyVals[-1+yyTop], lt1.Location); - lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); + lbag.AddLocation (yyVal, savedLocation, GetLocation (yyVals[0+yyTop])); } void case_357() @@ -6550,7 +6550,7 @@ void case_436() var lt2 = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) yyVals[0+yyTop], lt1.Location); - lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + lbag.AddLocation (yyVal, savedLocation, GetLocation (yyVals[-1+yyTop])); } void case_438() @@ -7058,7 +7058,7 @@ void case_531() var qam = new QualifiedAliasMember (lt1.Value, lt2.Value, (int) yyVals[0+yyTop], lt1.Location); yyVal = qam; lbag.AddLocation (qam.TypeArguments, Lexer.GetGenericDimensionLocations ()); - lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + lbag.AddLocation (yyVal, savedLocation, GetLocation (yyVals[-1+yyTop])); } void case_532() @@ -7113,7 +7113,7 @@ void case_536() var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; if (lang_version == LanguageVersion.ISO_1) FeatureIsNotAvailable (lt.Location, "namespace alias qualifier"); - + savedLocation = GetLocation (yyVals[0+yyTop]); yyVal = lt; } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay index 1ac25c5a3d..2fa4447253 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay @@ -2806,7 +2806,7 @@ namespace_or_type_expr var lt2 = (Tokenizer.LocatedToken) $2; $$ = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) $3, lt1.Location); - lbag.AddLocation ($$, GetLocation ($2)); + lbag.AddLocation ($$, savedLocation, GetLocation ($2)); } ; @@ -2930,7 +2930,7 @@ explicit_interface var lt2 = (Tokenizer.LocatedToken) $2; $$ = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) $3, lt1.Location); - lbag.AddLocation ($$, GetLocation ($4)); + lbag.AddLocation ($$, savedLocation, GetLocation ($4)); } | explicit_interface IDENTIFIER opt_type_argument_list DOT { @@ -3245,7 +3245,7 @@ member_access var lt2 = (Tokenizer.LocatedToken) $2; $$ = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) $3, lt1.Location); - lbag.AddLocation ($$, GetLocation ($2)); + lbag.AddLocation ($$, savedLocation, GetLocation ($2)); } | primary_expression DOT GENERATE_COMPLETION { $$ = new CompletionMemberAccess ((Expression) $1, null,GetLocation ($3)); @@ -3828,7 +3828,7 @@ unbound_type_name var qam = new QualifiedAliasMember (lt1.Value, lt2.Value, (int) $3, lt1.Location); $$ = qam; lbag.AddLocation (qam.TypeArguments, Lexer.GetGenericDimensionLocations ()); - lbag.AddLocation ($$, GetLocation ($2)); + lbag.AddLocation ($$, savedLocation, GetLocation ($2)); } | unbound_type_name DOT identifier_inside_body { @@ -3879,7 +3879,7 @@ qualified_alias_member var lt = (Tokenizer.LocatedToken) $1; if (lang_version == LanguageVersion.ISO_1) FeatureIsNotAvailable (lt.Location, "namespace alias qualifier"); - + savedLocation = GetLocation ($2); $$ = lt; } ;