35 private readonly Type type;
36 private readonly Type[] args;
37 private readonly CustomModifiers[] mods;
38 private Type baseType;
41 internal static Type Make(Type type, Type[] typeArguments, CustomModifiers[] mods)
44 if (type is TypeBuilder || type is
BakedType || type.__IsMissing)
52 for (
int i = 0; i < typeArguments.Length; i++)
54 if (typeArguments[i] != type.GetGenericTypeArgument(i)
72 private static bool IsEmpty(CustomModifiers[] mods,
int i)
76 return mods ==
null || mods[i].IsEmpty;
86 public override bool Equals(
object o)
89 return gt !=
null && gt.type.Equals(type) &&
Util.ArrayEquals(gt.args, args)
90 &&
Util.ArrayEquals(gt.mods, mods);
95 return type.GetHashCode() * 3 ^
Util.GetHashCode(args);
103 return fn ==
null ? null : fn +
", " + type.Assembly.FullName;
111 if (baseType ==
null)
113 Type rawBaseType = type.BaseType;
114 if (rawBaseType ==
null)
116 baseType = rawBaseType;
120 baseType = rawBaseType.BindTypeParameters(
this);
129 get {
return type.IsValueType; }
138 foreach (Type arg
in args)
153 get {
return type.DeclaringType; }
158 get {
return type.Attributes; }
161 internal override void CheckBaked()
168 FieldInfo[] fields = type.__GetDeclaredFields();
169 for (
int i = 0; i < fields.Length; i++)
171 fields[i] = fields[i].BindTypeParameters(
this);
178 Type[] interfaces = type.__GetDeclaredInterfaces();
179 for (
int i = 0; i < interfaces.Length; i++)
181 interfaces[i] = interfaces[i].BindTypeParameters(
this);
188 MethodBase[] methods = type.__GetDeclaredMethods();
189 for (
int i = 0; i < methods.Length; i++)
191 methods[i] = methods[i].BindTypeParameters(
this);
198 return type.__GetDeclaredTypes();
203 EventInfo[] events = type.__GetDeclaredEvents();
204 for (
int i = 0; i < events.Length; i++)
206 events[i] = events[i].BindTypeParameters(
this);
213 PropertyInfo[] properties = type.__GetDeclaredProperties();
214 for (
int i = 0; i < properties.Length; i++)
216 properties[i] = properties[i].BindTypeParameters(
this);
223 __MethodImplMap map = type.__GetMethodImplMap();
224 map.TargetType =
this;
225 for (
int i = 0; i < map.MethodBodies.Length; i++)
227 map.MethodBodies[i] = (
MethodInfo)map.MethodBodies[i].BindTypeParameters(
this);
228 for (
int j = 0; j < map.MethodDeclarations[i].Length; j++)
230 Type interfaceType = map.MethodDeclarations[i][j].DeclaringType;
231 if (interfaceType.IsGenericType)
233 map.MethodDeclarations[i][j] = (
MethodInfo)map.MethodDeclarations[i][j].BindTypeParameters(
this);
242 get {
return type.Namespace; }
247 get {
return type.Name; }
258 StringBuilder sb =
new StringBuilder(this.type.FullName);
261 foreach (Type type
in args)
263 sb.Append(sep).Append(
'[').Append(type.FullName).Append(
", ").Append(type.Assembly.FullName.Replace(
"]",
"\\]")).Append(
']');
267 return sb.ToString();
273 StringBuilder sb =
new StringBuilder(type.FullName);
276 foreach (Type arg
in args)
283 return sb.ToString();
286 public override Module Module
288 get {
return type.Module; }
308 return Util.Copy(args);
313 return mods !=
null ? (CustomModifiers[])mods.Clone() :
new CustomModifiers[args.Length];
316 internal override Type GetGenericTypeArgument(
int index)
325 foreach (Type type
in args)
327 if (type.ContainsGenericParameters)
338 get {
return type.__ContainsMissingType || ContainsMissingType(args); }
341 public override bool __GetLayout(out
int packingSize, out
int typeSize)
343 return type.__GetLayout(out packingSize, out typeSize);
346 internal override int GetModuleBuilderToken()
350 token = ((ModuleBuilder)type.Module).ImportType(
this);
357 for (
int i = 0; i < args.Length; i++)
359 Type xarg = args[i].BindTypeParameters(binder);
360 if (!ReferenceEquals(xarg, args[i]))
362 Type[] xargs =
new Type[args.Length];
363 Array.Copy(args, xargs, i);
365 for (; i < args.Length; i++)
367 xargs[i] = args[i].BindTypeParameters(binder);
369 return Make(type, xargs,
null);
375 internal override int GetCurrentToken()
377 return type.GetCurrentToken();
380 internal override bool IsBaked
382 get {
return type.IsBaked; }
IKVM.Reflection.Type Type
IKVM.Reflection.MethodInfo MethodInfo
global::java.lang.invoke.LambdaForm.Name Name
override EventInfo[] __GetDeclaredEvents()
override PropertyInfo[] __GetDeclaredProperties()
override Type DeclaringType
override MethodBase[] __GetDeclaredMethods()
override __MethodImplMap __GetMethodImplMap()
override Type GetGenericTypeDefinition()
override TypeAttributes Attributes
override string Namespace
override Type[] __GetDeclaredTypes()
override CustomModifiers[] __GetGenericArgumentsCustomModifiers()
override string ToString()
override bool Equals(object o)
override bool IsGenericType
override Type[] __GetDeclaredInterfaces()
override Type[] GetGenericArguments()
override FieldInfo[] __GetDeclaredFields()
override bool IsConstructedGenericType
override bool ContainsMissingTypeImpl
override bool ContainsGenericParameters
override bool IsValueTypeImpl
override string AssemblyQualifiedName
override int GetHashCode()
override bool __GetLayout(out int packingSize, out int typeSize)