|
|
|
@ -867,110 +867,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
@@ -867,110 +867,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
|
|
|
|
|
#region Types
|
|
|
|
|
public static ITypeReference ConvertType(AstType type, SimpleNameLookupMode lookupMode = SimpleNameLookupMode.Type) |
|
|
|
|
{ |
|
|
|
|
SimpleType s = type as SimpleType; |
|
|
|
|
if (s != null) { |
|
|
|
|
List<ITypeReference> typeArguments = new List<ITypeReference>(); |
|
|
|
|
foreach (var ta in s.TypeArguments) { |
|
|
|
|
typeArguments.Add(ConvertType(ta, lookupMode)); |
|
|
|
|
} |
|
|
|
|
if (typeArguments.Count == 0 && string.IsNullOrEmpty(s.Identifier)) { |
|
|
|
|
// empty SimpleType is used for typeof(List<>).
|
|
|
|
|
return SpecialType.UnboundTypeArgument; |
|
|
|
|
} |
|
|
|
|
return new SimpleTypeOrNamespaceReference(s.Identifier, typeArguments, lookupMode); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
PrimitiveType p = type as PrimitiveType; |
|
|
|
|
if (p != null) { |
|
|
|
|
return ConvertPrimitiveType(p.Keyword); |
|
|
|
|
} |
|
|
|
|
MemberType m = type as MemberType; |
|
|
|
|
if (m != null) { |
|
|
|
|
TypeOrNamespaceReference t; |
|
|
|
|
if (m.IsDoubleColon) { |
|
|
|
|
SimpleType st = m.Target as SimpleType; |
|
|
|
|
if (st != null) { |
|
|
|
|
t = new AliasNamespaceReference(st.Identifier); |
|
|
|
|
} else { |
|
|
|
|
t = null; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
t = ConvertType(m.Target, lookupMode) as TypeOrNamespaceReference; |
|
|
|
|
} |
|
|
|
|
if (t == null) |
|
|
|
|
return SpecialType.UnknownType; |
|
|
|
|
List<ITypeReference> typeArguments = new List<ITypeReference>(); |
|
|
|
|
foreach (var ta in m.TypeArguments) { |
|
|
|
|
typeArguments.Add(ConvertType(ta, lookupMode)); |
|
|
|
|
} |
|
|
|
|
return new MemberTypeOrNamespaceReference(t, m.MemberName, typeArguments); |
|
|
|
|
} |
|
|
|
|
ComposedType c = type as ComposedType; |
|
|
|
|
if (c != null) { |
|
|
|
|
ITypeReference t = ConvertType(c.BaseType, lookupMode); |
|
|
|
|
if (c.HasNullableSpecifier) { |
|
|
|
|
t = NullableType.Create(t); |
|
|
|
|
} |
|
|
|
|
for (int i = 0; i < c.PointerRank; i++) { |
|
|
|
|
t = new PointerTypeReference(t); |
|
|
|
|
} |
|
|
|
|
foreach (var a in c.ArraySpecifiers.Reverse()) { |
|
|
|
|
t = new ArrayTypeReference(t, a.Dimensions); |
|
|
|
|
} |
|
|
|
|
return t; |
|
|
|
|
} |
|
|
|
|
if (!type.IsNull) |
|
|
|
|
Debug.WriteLine("Unknown node used as type: " + type); |
|
|
|
|
return SpecialType.UnknownType; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static ITypeReference ConvertPrimitiveType(string keyword) |
|
|
|
|
{ |
|
|
|
|
KnownTypeCode typeCode = GetTypeCodeForPrimitiveType(keyword); |
|
|
|
|
if (typeCode == KnownTypeCode.None) |
|
|
|
|
return new UnknownType(null, keyword); |
|
|
|
|
else |
|
|
|
|
return KnownTypeReference.Get(typeCode); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static KnownTypeCode GetTypeCodeForPrimitiveType(string keyword) |
|
|
|
|
{ |
|
|
|
|
switch (keyword) { |
|
|
|
|
case "string": |
|
|
|
|
return KnownTypeCode.String; |
|
|
|
|
case "int": |
|
|
|
|
return KnownTypeCode.Int32; |
|
|
|
|
case "uint": |
|
|
|
|
return KnownTypeCode.UInt32; |
|
|
|
|
case "object": |
|
|
|
|
return KnownTypeCode.Object; |
|
|
|
|
case "bool": |
|
|
|
|
return KnownTypeCode.Boolean; |
|
|
|
|
case "sbyte": |
|
|
|
|
return KnownTypeCode.SByte; |
|
|
|
|
case "byte": |
|
|
|
|
return KnownTypeCode.Byte; |
|
|
|
|
case "short": |
|
|
|
|
return KnownTypeCode.Int16; |
|
|
|
|
case "ushort": |
|
|
|
|
return KnownTypeCode.UInt16; |
|
|
|
|
case "long": |
|
|
|
|
return KnownTypeCode.Int64; |
|
|
|
|
case "ulong": |
|
|
|
|
return KnownTypeCode.UInt64; |
|
|
|
|
case "float": |
|
|
|
|
return KnownTypeCode.Single; |
|
|
|
|
case "double": |
|
|
|
|
return KnownTypeCode.Double; |
|
|
|
|
case "decimal": |
|
|
|
|
return KnownTypeCode.Decimal; |
|
|
|
|
case "char": |
|
|
|
|
return KnownTypeCode.Char; |
|
|
|
|
case "void": |
|
|
|
|
return KnownTypeCode.Void; |
|
|
|
|
default: |
|
|
|
|
return KnownTypeCode.None; |
|
|
|
|
} |
|
|
|
|
return type.ToTypeReference(lookupMode); |
|
|
|
|
} |
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|