Update mcs/class/System.Core/System/TimeZoneInfo.cs
[mono.git] / mcs / class / IKVM.Reflection / GenericWrappers.cs
index 4f4d784e46c79300a5e5ea04e737e339b5e2f3cd..1122ff29c4a2635999202e396ebd72ae5b46ff4c 100644 (file)
@@ -128,6 +128,11 @@ namespace IKVM.Reflection
                        throw new NotSupportedException();
                }
 
+               public override int __MethodRVA
+               {
+                       get { return method.__MethodRVA; }
+               }
+
                public override MethodInfo MakeGenericMethod(params Type[] typeArguments)
                {
                        return new GenericMethodInstance(declaringType, method, typeArguments);
@@ -173,7 +178,7 @@ namespace IKVM.Reflection
                                {
                                        return this;
                                }
-                               else if (declaringType.IsGenericTypeInstance)
+                               else if (declaringType.IsConstructedGenericType)
                                {
                                        return new GenericMethodInstance(declaringType, method, null);
                                }
@@ -219,11 +224,6 @@ namespace IKVM.Reflection
                        return method.GetGenericMethodArgumentCount();
                }
 
-               internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
-               {
-                       return method.GetCustomAttributesData(attributeType);
-               }
-
                internal override MethodInfo GetMethodOnTypeDefinition()
                {
                        return method.GetMethodOnTypeDefinition();
@@ -237,20 +237,7 @@ namespace IKVM.Reflection
                        }
                        else
                        {
-                               Writer.ByteBuffer spec = new Writer.ByteBuffer(10);
-                               Signature.WriteMethodSpec(module, spec, methodArgs);
-                               Metadata.MethodSpecTable.Record rec = new Metadata.MethodSpecTable.Record();
-                               Emit.MethodBuilder mb = method as Emit.MethodBuilder;
-                               if (mb != null && mb.ModuleBuilder == module && !declaringType.IsGenericType)
-                               {
-                                       rec.Method = mb.MetadataToken;
-                               }
-                               else
-                               {
-                                       rec.Method = module.ImportMember(GetGenericMethodDefinition());
-                               }
-                               rec.Instantiation = module.Blobs.Add(spec);
-                               return 0x2B000000 | module.MethodSpec.FindOrAddRecord(rec);
+                               return module.ImportMethodSpec(declaringType, method, methodArgs);
                        }
                }
 
@@ -269,6 +256,26 @@ namespace IKVM.Reflection
                {
                        get { return method.HasThis; }
                }
+
+               public override MethodInfo[] __GetMethodImpls()
+               {
+                       MethodInfo[] methods = method.__GetMethodImpls();
+                       for (int i = 0; i < methods.Length; i++)
+                       {
+                               methods[i] = (MethodInfo)methods[i].BindTypeParameters(declaringType);
+                       }
+                       return methods;
+               }
+
+               internal override int GetCurrentToken()
+               {
+                       return method.GetCurrentToken();
+               }
+
+               internal override bool IsBaked
+               {
+                       get { return method.IsBaked; }
+               }
        }
 
        sealed class GenericFieldInstance : FieldInfo
@@ -333,14 +340,14 @@ namespace IKVM.Reflection
                        get { return field.__FieldRVA; }
                }
 
-               public override FieldInfo __GetFieldOnTypeDefinition()
+               public override bool __TryGetFieldOffset(out int offset)
                {
-                       return field;
+                       return field.__TryGetFieldOffset(out offset);
                }
 
-               internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
+               public override FieldInfo __GetFieldOnTypeDefinition()
                {
-                       return field.GetCustomAttributesData(attributeType);
+                       return field;
                }
 
                internal override FieldSignature FieldSignature
@@ -357,6 +364,16 @@ namespace IKVM.Reflection
                {
                        return new GenericFieldInstance(declaringType.BindTypeParameters(type), field);
                }
+
+               internal override int GetCurrentToken()
+               {
+                       return field.GetCurrentToken();
+               }
+
+               internal override bool IsBaked
+               {
+                       get { return field.IsBaked; }
+               }
        }
 
        sealed class GenericParameterInfoImpl : ParameterInfo
@@ -400,6 +417,11 @@ namespace IKVM.Reflection
                        return parameterInfo.__GetCustomModifiers().Bind(method);
                }
 
+               public override bool __TryGetFieldMarshal(out FieldMarshal fieldMarshal)
+               {
+                       return parameterInfo.__TryGetFieldMarshal(out fieldMarshal);
+               }
+
                public override MemberInfo Member
                {
                        get { return method; }
@@ -492,6 +514,11 @@ namespace IKVM.Reflection
                        get { return property.IsPublic; }
                }
 
+               internal override bool IsNonPrivate
+               {
+                       get { return property.IsNonPrivate; }
+               }
+
                internal override bool IsStatic
                {
                        get { return property.IsStatic; }
@@ -522,14 +549,19 @@ namespace IKVM.Reflection
                        get { return property.MetadataToken; }
                }
 
-               internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
+               internal override PropertyInfo BindTypeParameters(Type type)
                {
-                       return property.GetCustomAttributesData(attributeType);
+                       return new GenericPropertyInfo(typeInstance.BindTypeParameters(type), property);
                }
 
-               internal override PropertyInfo BindTypeParameters(Type type)
+               internal override bool IsBaked
                {
-                       return new GenericPropertyInfo(typeInstance.BindTypeParameters(type), property);
+                       get { return property.IsBaked; }
+               }
+
+               internal override int GetCurrentToken()
+               {
+                       return property.GetCurrentToken();
                }
        }
 
@@ -629,11 +661,6 @@ namespace IKVM.Reflection
                        get { return eventInfo.MetadataToken; }
                }
 
-               internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
-               {
-                       return eventInfo.GetCustomAttributesData(attributeType);
-               }
-
                internal override EventInfo BindTypeParameters(Type type)
                {
                        return new GenericEventInfo(typeInstance.BindTypeParameters(type), eventInfo);
@@ -644,9 +671,24 @@ namespace IKVM.Reflection
                        get { return eventInfo.IsPublic; }
                }
 
+               internal override bool IsNonPrivate
+               {
+                       get { return eventInfo.IsNonPrivate; }
+               }
+
                internal override bool IsStatic
                {
                        get { return eventInfo.IsStatic; }
                }
+
+               internal override bool IsBaked
+               {
+                       get { return eventInfo.IsBaked; }
+               }
+
+               internal override int GetCurrentToken()
+               {
+                       return eventInfo.GetCurrentToken();
+               }
        }
 }