diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Resolver/SimpleNameLookupTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Resolver/SimpleNameLookupTests.cs
index f99f6c45c6..caa66e0993 100644
--- a/ICSharpCode.NRefactory.Tests/CSharp/Resolver/SimpleNameLookupTests.cs
+++ b/ICSharpCode.NRefactory.Tests/CSharp/Resolver/SimpleNameLookupTests.cs
@@ -190,7 +190,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
Assert.AreSame(SharedTypes.UnknownType, result.Type);
}
- [Test, Ignore("not yet implemented (depends on distuishing types and expressions)")]
+ [Test, Ignore("not yet implemented (depends on distuishing types and expressions in the DOM)")]
public void PropertyNameAmbiguousWithTypeName()
{
string program = @"class A {
diff --git a/ICSharpCode.NRefactory/CSharp/Dom/GeneralScope/UsingDeclaration.cs b/ICSharpCode.NRefactory/CSharp/Dom/GeneralScope/UsingDeclaration.cs
index 4d584a0696..b96a733e9b 100644
--- a/ICSharpCode.NRefactory/CSharp/Dom/GeneralScope/UsingDeclaration.cs
+++ b/ICSharpCode.NRefactory/CSharp/Dom/GeneralScope/UsingDeclaration.cs
@@ -55,16 +55,15 @@ namespace ICSharpCode.NRefactory.CSharp
MemberType m = import as MemberType;
if (m != null && !m.TypeArguments.Any()) {
AppendName(b, m.Target);
- b.Append('.');
+ if (m.IsDoubleColon)
+ b.Append("::");
+ else
+ b.Append('.');
b.Append(m.Identifier);
return true;
}
SimpleType t = import as SimpleType;
if (t != null && !t.TypeArguments.Any()) {
- if (t.IsQualifiedWithAlias) {
- b.Append(t.AliasIdentifier.Name);
- b.Append("::");
- }
b.Append(t.Identifier);
return true;
}
diff --git a/ICSharpCode.NRefactory/CSharp/Dom/MemberType.cs b/ICSharpCode.NRefactory/CSharp/Dom/MemberType.cs
index 8ef47f22a2..1af3de4b65 100644
--- a/ICSharpCode.NRefactory/CSharp/Dom/MemberType.cs
+++ b/ICSharpCode.NRefactory/CSharp/Dom/MemberType.cs
@@ -38,6 +38,8 @@ namespace ICSharpCode.NRefactory.CSharp
}
}
+ public bool IsDoubleColon { get; set; }
+
public DomNode Target {
get { return GetChildByRole(Roles.TargetExpression) ?? DomNode.Null; }
}
diff --git a/ICSharpCode.NRefactory/CSharp/Dom/SimpleType.cs b/ICSharpCode.NRefactory/CSharp/Dom/SimpleType.cs
index 23d51b8d20..fd8b1ed6b6 100644
--- a/ICSharpCode.NRefactory/CSharp/Dom/SimpleType.cs
+++ b/ICSharpCode.NRefactory/CSharp/Dom/SimpleType.cs
@@ -32,29 +32,12 @@ namespace ICSharpCode.NRefactory.CSharp
{
public class SimpleType : DomNode
{
- public const int AliasRole = 100;
-
public override NodeType NodeType {
get {
return NodeType.Type;
}
}
- ///
- /// Gets whether this simple type is qualified with an alias
- ///
- public bool IsQualifiedWithAlias {
- get {
- return GetChildByRole (AliasRole) != null;
- }
- }
-
- public Identifier AliasIdentifier {
- get {
- return (Identifier)GetChildByRole (AliasRole) ?? CSharp.Identifier.Null;
- }
- }
-
public Identifier IdentifierToken {
get {
return (Identifier)GetChildByRole (Roles.Identifier) ?? CSharp.Identifier.Null;
diff --git a/ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs b/ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs
index bf61792134..d8d026356c 100644
--- a/ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs
+++ b/ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs
@@ -123,16 +123,10 @@ namespace ICSharpCode.NRefactory.CSharp
DomNode ConvertImport (MemberName memberName)
{
- if (memberName.IsDoubleColon && memberName.Left != null) {
- // left::name
- SimpleType t = new SimpleType();
- t.AddChild (new Identifier (memberName.Left.Name, Convert(memberName.Location)), SimpleType.AliasRole);
- t.AddChild (new Identifier (memberName.Name, Convert(memberName.Location)), SimpleType.Roles.Identifier);
- // TODO type arguments
- return t;
- } else if (memberName.Left != null) {
+ if (memberName.Left != null) {
// left.name
MemberType t = new MemberType();
+ t.IsDoubleColon = memberName.IsDoubleColon;
t.AddChild (ConvertImport (memberName.Left), MemberType.Roles.TargetExpression);
t.AddChild (new Identifier (memberName.Name, Convert(memberName.Location)), MemberType.Roles.Identifier);
return t;
diff --git a/ICSharpCode.NRefactory/CSharp/Parser/TypeSystemConvertVisitor.cs b/ICSharpCode.NRefactory/CSharp/Parser/TypeSystemConvertVisitor.cs
index bafabf2d22..327b4305d3 100644
--- a/ICSharpCode.NRefactory/CSharp/Parser/TypeSystemConvertVisitor.cs
+++ b/ICSharpCode.NRefactory/CSharp/Parser/TypeSystemConvertVisitor.cs
@@ -513,20 +513,15 @@ namespace ICSharpCode.NRefactory.CSharp
foreach (var ta in s.TypeArguments) {
typeArguments.Add(ConvertType(ta, parentTypeDefinition, parentMethodDefinition, parentUsingScope, isInUsingDeclaration));
}
- if (s.IsQualifiedWithAlias) {
- AliasNamespaceReference ar = new AliasNamespaceReference(s.AliasIdentifier.Name, parentUsingScope);
- return new MemberTypeOrNamespaceReference(ar, s.Identifier, typeArguments, parentTypeDefinition, parentUsingScope);
- } else {
- if (typeArguments.Count == 0 && parentMethodDefinition != null) {
- // SimpleTypeOrNamespaceReference doesn't support method type parameters,
- // so we directly handle them here.
- foreach (ITypeParameter tp in parentMethodDefinition.TypeParameters) {
- if (tp.Name == s.Identifier)
- return tp;
- }
+ if (typeArguments.Count == 0 && parentMethodDefinition != null) {
+ // SimpleTypeOrNamespaceReference doesn't support method type parameters,
+ // so we directly handle them here.
+ foreach (ITypeParameter tp in parentMethodDefinition.TypeParameters) {
+ if (tp.Name == s.Identifier)
+ return tp;
}
- return new SimpleTypeOrNamespaceReference(s.Identifier, typeArguments, parentTypeDefinition, parentUsingScope, isInUsingDeclaration);
}
+ return new SimpleTypeOrNamespaceReference(s.Identifier, typeArguments, parentTypeDefinition, parentUsingScope, isInUsingDeclaration);
}
PrimitiveType p = node as PrimitiveType;
if (p != null) {
@@ -567,7 +562,17 @@ namespace ICSharpCode.NRefactory.CSharp
}
MemberType m = node as MemberType;
if (m != null) {
- ITypeOrNamespaceReference t = ConvertType(m.Target, parentTypeDefinition, parentMethodDefinition, parentUsingScope, isInUsingDeclaration) as ITypeOrNamespaceReference;
+ ITypeOrNamespaceReference t;
+ if (m.IsDoubleColon) {
+ SimpleType st = m.Target as SimpleType;
+ if (st != null) {
+ t = new AliasNamespaceReference(st.Identifier, parentUsingScope);
+ } else {
+ t = null;
+ }
+ } else {
+ t = ConvertType(m.Target, parentTypeDefinition, parentMethodDefinition, parentUsingScope, isInUsingDeclaration) as ITypeOrNamespaceReference;
+ }
if (t == null)
return SharedTypes.UnknownType;
List typeArguments = new List();