/*
- Copyright (C) 2009-2011 Jeroen Frijters
+ Copyright (C) 2009-2012 Jeroen Frijters
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
*/
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Text;
namespace IKVM.Reflection
return this == other;
}
+ internal TypeName ToLowerInvariant()
+ {
+ return new TypeName(ns == null ? null : ns.ToLowerInvariant(), name.ToLowerInvariant());
+ }
+
internal static TypeName Split(string name)
{
int dot = name.LastIndexOf('.');
}
}
- internal Type GetType(Universe universe, Assembly context, bool throwOnError, string originalName, bool resolve)
+ internal Type GetType(Universe universe, Assembly context, bool throwOnError, string originalName, bool resolve, bool ignoreCase)
{
+ Debug.Assert(!resolve || !ignoreCase);
TypeName name = TypeName.Split(this.name);
Type type;
if (assemblyName != null)
{
type = asm.ResolveType(name);
}
+ else if (ignoreCase)
+ {
+ type = asm.FindTypeIgnoreCase(name.ToLowerInvariant());
+ }
else
{
type = asm.FindType(name);
{
type = universe.Mscorlib.ResolveType(name);
}
+ else if (ignoreCase)
+ {
+ type = universe.Mscorlib.FindTypeIgnoreCase(name.ToLowerInvariant());
+ }
else
{
type = universe.Mscorlib.FindType(name);
}
else
{
- type = context.FindType(name);
+ if (ignoreCase)
+ {
+ name = name.ToLowerInvariant();
+ type = context.FindTypeIgnoreCase(name);
+ }
+ else
+ {
+ type = context.FindType(name);
+ }
if (type == null && context != universe.Mscorlib)
{
- type = universe.Mscorlib.FindType(name);
+ if (ignoreCase)
+ {
+ type = universe.Mscorlib.FindTypeIgnoreCase(name);
+ }
+ else
+ {
+ type = universe.Mscorlib.FindType(name);
+ }
}
if (type == null && resolve)
{
}
}
}
- return Expand(type, context, throwOnError, originalName, resolve);
+ return Expand(type, context, throwOnError, originalName, resolve, ignoreCase);
}
- internal Type Expand(Type type, Assembly context, bool throwOnError, string originalName, bool resolve)
+ internal Type Expand(Type type, Assembly context, bool throwOnError, string originalName, bool resolve, bool ignoreCase)
{
+ Debug.Assert(!resolve || !ignoreCase);
if (type == null)
{
if (throwOnError)
{
outer = type;
TypeName name = TypeName.Split(TypeNameParser.Unescape(nest));
- type = outer.FindNestedType(name);
+ type = ignoreCase
+ ? outer.FindNestedTypeIgnoreCase(name.ToLowerInvariant())
+ : outer.FindNestedType(name);
if (type == null)
{
if (resolve)
Type[] typeArgs = new Type[genericParameters.Length];
for (int i = 0; i < typeArgs.Length; i++)
{
- typeArgs[i] = genericParameters[i].GetType(type.Assembly.universe, context, throwOnError, originalName, resolve);
+ typeArgs[i] = genericParameters[i].GetType(type.Assembly.universe, context, throwOnError, originalName, resolve, ignoreCase);
if (typeArgs[i] == null)
{
return null;