Browse Source

Fixed bug with GetElementType.

ArrayType yields System.Collections.IEnumerable as base type before
the more specific System.Colloctions.Generic.IEnumerable.
newNRvisualizers
Mike Krüger 14 years ago
parent
commit
3be8d6cd91
  1. 6
      ICSharpCode.NRefactory/CSharp/Resolver/ResolveVisitor.cs

6
ICSharpCode.NRefactory/CSharp/Resolver/ResolveVisitor.cs

@ -1096,6 +1096,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -1096,6 +1096,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
IType GetElementType(IType result)
{
bool foundSimpleIEnumerable = false;
foreach (IType baseType in result.GetAllBaseTypes(storedContext.Context)) {
ITypeDefinition baseTypeDef = baseType.GetDefinition();
if (baseTypeDef != null && baseTypeDef.Name == "IEnumerable") {
@ -1105,10 +1106,13 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -1105,10 +1106,13 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
return pt.TypeArguments[0];
}
} else if (baseTypeDef.Namespace == "System.Collections" && baseTypeDef.TypeParameterCount == 0) {
return KnownTypeReference.Object.Resolve(storedContext.Context);
foundSimpleIEnumerable = true;
}
}
}
// System.Collections.IEnumerable found in type hierarchy -> Object is element type.
if (foundSimpleIEnumerable)
return KnownTypeReference.Object.Resolve(storedContext.Context);
return SharedTypes.UnknownType;
}

Loading…
Cancel
Save