Merge pull request #5288 from lambdageek/bug-58454
[mono.git] / mcs / class / corlib / System.Reflection.Emit / GenericTypeParameterBuilder.cs
index 7f51aea6a38358ba693439081df86db3bc2f724d..9bbe8d0d92b32f73ee8976d3aa23780a54250672 100644 (file)
@@ -29,6 +29,7 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+#if !FULL_AOT_RUNTIME
 using System.Reflection;
 using System.Reflection.Emit;
 using System.Collections;
@@ -41,7 +42,8 @@ namespace System.Reflection.Emit
 {
        [ComVisible (true)]
        [StructLayout (LayoutKind.Sequential)]
-       public sealed class GenericTypeParameterBuilder : Type
+       public sealed class GenericTypeParameterBuilder : 
+               TypeInfo
        {
        #region Sync with reflection.h
                private TypeBuilder tbuilder;
@@ -80,17 +82,21 @@ namespace System.Reflection.Emit
                        this.mbuilder = mbuilder;
                        this.name = name;
                        this.index = index;
-
-                       initialize ();
                }
 
                internal override Type InternalResolve ()
                {
-                       return tbuilder.InternalResolve ().GetGenericArguments () [index]; 
+                       if (mbuilder != null)
+                               return MethodBase.GetMethodFromHandle (mbuilder.MethodHandleInternal, mbuilder.TypeBuilder.InternalResolve ().TypeHandle).GetGenericArguments () [index];
+                       return tbuilder.InternalResolve ().GetGenericArguments () [index];
                }
 
-               [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               private extern void initialize ();
+               internal override Type RuntimeResolve ()
+               {
+                       if (mbuilder != null)
+                               return MethodBase.GetMethodFromHandle (mbuilder.MethodHandleInternal, mbuilder.TypeBuilder.RuntimeResolve ().TypeHandle).GetGenericArguments () [index];
+                       return tbuilder.RuntimeResolve ().GetGenericArguments () [index];
+               }
 
                [ComVisible (true)]
                public override bool IsSubclassOf (Type c)
@@ -100,11 +106,7 @@ namespace System.Reflection.Emit
 
                protected override TypeAttributes GetAttributeFlagsImpl ()
                {
-#if NET_4_0
                        return TypeAttributes.Public;
-#else
-                       throw not_supported ();
-#endif
                }
 
                protected override ConstructorInfo GetConstructorImpl (BindingFlags bindingAttr,
@@ -213,6 +215,14 @@ namespace System.Reflection.Emit
                        throw not_supported ();
                }
 
+               public override bool IsAssignableFrom (TypeInfo typeInfo)
+               {
+                       if (typeInfo == null)
+                               return false;
+
+                       return IsAssignableFrom (typeInfo.AsType ());
+               }
+
                public override bool IsInstanceOfType (object o)
                {
                        throw not_supported ();
@@ -438,10 +448,9 @@ namespace System.Reflection.Emit
                        return new ByRefType (this);
                }
 
-               [MonoTODO]
-               public override Type MakeGenericType (params Type [] typeArguments)
+               public override Type MakeGenericType (params Type[] typeArguments)
                {
-                       return base.MakeGenericType (typeArguments);
+                       throw new InvalidOperationException (Environment.GetResourceString ("Arg_NotGenericTypeDefinition"));
                }
 
                public override Type MakePointerType ()
@@ -456,3 +465,4 @@ namespace System.Reflection.Emit
                }
        }
 }
+#endif