Moved ProviderCollectionTest.cs from System assembly to System.Configuration.
[mono.git] / mcs / class / corlib / System.Reflection / Module.cs
index 6c136534127aeb479c74f57eea919b285d050a2e..935a0a08d3d9c2a99db623d64cfe79f308476d86 100644 (file)
@@ -53,6 +53,7 @@ namespace System.Reflection {
                public static readonly TypeFilter FilterTypeName;
                public static readonly TypeFilter FilterTypeNameIgnoreCase;
        
+#pragma warning disable 649    
                private IntPtr _impl; /* a pointer to a MonoImage */
                internal Assembly assembly;
                internal string fqname;
@@ -60,6 +61,7 @@ namespace System.Reflection {
                internal string scopename;
                internal bool is_resource;
                internal int token;
+#pragma warning restore 649            
        
                const BindingFlags defaultBindingFlags = 
                        BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance;
@@ -107,10 +109,16 @@ namespace System.Reflection {
                        get;
                }
 
-               public extern int MDStreamVersion {
-                       [MethodImplAttribute (MethodImplOptions.InternalCall)]
-                       get;
+               public int MDStreamVersion {
+                       get {
+                               if (_impl == IntPtr.Zero)
+                                       throw new NotSupportedException ();
+                               return GetMDStreamVersion (_impl);
+                       }
                }
+
+               [MethodImplAttribute (MethodImplOptions.InternalCall)]
+               internal static extern int GetMDStreamVersion (IntPtr module_handle);
 #endif
        
                public virtual Type[] FindTypes(TypeFilter filter, object filterCriteria) 
@@ -142,13 +150,13 @@ namespace System.Reflection {
                        return (globalType != null) ? globalType.GetField (name, BindingFlags.Public | BindingFlags.Static) : null;
                }
        
-               public FieldInfo GetField (string name, BindingFlags flags
+               public FieldInfo GetField (string name, BindingFlags bindingAttr
                {
                        if (IsResource ())
                                return null;
 
                        Type globalType = GetGlobalType ();
-                       return (globalType != null) ? globalType.GetField (name, flags) : null;
+                       return (globalType != null) ? globalType.GetField (name, bindingAttr) : null;
                }
        
                public FieldInfo[] GetFields () 
@@ -199,21 +207,21 @@ namespace System.Reflection {
                }
 
 #if NET_2_0
-               public MethodInfo[] GetMethods (BindingFlags flags) {
+               public MethodInfo[] GetMethods (BindingFlags bindingFlags) {
                        if (IsResource ())
                                return new MethodInfo [0];
 
                        Type globalType = GetGlobalType ();
-                       return (globalType != null) ? globalType.GetMethods (flags) : new MethodInfo [0];
+                       return (globalType != null) ? globalType.GetMethods (bindingFlags) : new MethodInfo [0];
                }
 
-               public FieldInfo[] GetFields (BindingFlags flags) 
+               public FieldInfo[] GetFields (BindingFlags bindingFlags)
                {
                        if (IsResource ())
                                return new FieldInfo [0];
 
                        Type globalType = GetGlobalType ();
-                       return (globalType != null) ? globalType.GetFields (flags) : new FieldInfo [0];
+                       return (globalType != null) ? globalType.GetFields (bindingFlags) : new FieldInfo [0];
                }
 #endif
        
@@ -314,10 +322,28 @@ namespace System.Reflection {
                                return new ArgumentException (String.Format ("Token 0x{0:x} is not a valid {1} token in the scope of module {2}", metadataToken, tokenType, name), "metadataToken");
                }
 
+               private IntPtr[] ptrs_from_types (Type[] types) {
+                       if (types == null)
+                               return null;
+                       else {
+                               IntPtr[] res = new IntPtr [types.Length];
+                               for (int i = 0; i < types.Length; ++i) {
+                                       if (types [i] == null)
+                                               throw new ArgumentException ();
+                                       res [i] = types [i].TypeHandle.Value;
+                               }
+                               return res;
+                       }
+               }
+
                public FieldInfo ResolveField (int metadataToken) {
+                       return ResolveField (metadataToken, null, null);
+               }
+
+               public FieldInfo ResolveField (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) {
                        ResolveTokenError error;
 
-                       IntPtr handle = ResolveFieldToken (_impl, metadataToken, out error);
+                       IntPtr handle = ResolveFieldToken (_impl, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error);
                        if (handle == IntPtr.Zero)
                                throw resolve_token_exception (metadataToken, error, "Field");
                        else
@@ -325,9 +351,14 @@ namespace System.Reflection {
                }
 
                public MemberInfo ResolveMember (int metadataToken) {
+                       return ResolveMember (metadataToken, null, null);
+               }
+
+               public MemberInfo ResolveMember (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) {
+
                        ResolveTokenError error;
 
-                       MemberInfo m = ResolveMemberToken (_impl, metadataToken, out error);
+                       MemberInfo m = ResolveMemberToken (_impl, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error);
                        if (m == null)
                                throw resolve_token_exception (metadataToken, error, "MemberInfo");
                        else
@@ -335,9 +366,13 @@ namespace System.Reflection {
                }
 
                public MethodBase ResolveMethod (int metadataToken) {
+                       return ResolveMethod (metadataToken, null, null);
+               }
+
+               public MethodBase ResolveMethod (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) {
                        ResolveTokenError error;
 
-                       IntPtr handle = ResolveMethodToken (_impl, metadataToken, out error);
+                       IntPtr handle = ResolveMethodToken (_impl, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error);
                        if (handle == IntPtr.Zero)
                                throw resolve_token_exception (metadataToken, error, "MethodBase");
                        else
@@ -355,18 +390,27 @@ namespace System.Reflection {
                }
 
                public Type ResolveType (int metadataToken) {
+                       return ResolveType (metadataToken, null, null);
+               }
+
+               public Type ResolveType (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) {
                        ResolveTokenError error;
 
-                       IntPtr handle = ResolveTypeToken (_impl, metadataToken, out error);
+                       IntPtr handle = ResolveTypeToken (_impl, metadataToken, ptrs_from_types (genericTypeArguments), ptrs_from_types (genericMethodArguments), out error);
                        if (handle == IntPtr.Zero)
                                throw resolve_token_exception (metadataToken, error, "Type");
                        else
                                return Type.GetTypeFromHandle (new RuntimeTypeHandle (handle));
                }
 
-               [MonoTODO]
                public byte[] ResolveSignature (int metadataToken) {
-                       throw new NotImplementedException ();
+                       ResolveTokenError error;
+
+                   byte[] res = ResolveSignature (_impl, metadataToken, out error);
+                       if (res == null)
+                               throw resolve_token_exception (metadataToken, error, "signature");
+                       else
+                               return res;
                }
 #endif
 
@@ -374,7 +418,7 @@ namespace System.Reflection {
                {
                        ResolveTokenError error;
 
-                       IntPtr handle = ResolveTypeToken (module._impl, token, out error);
+                       IntPtr handle = ResolveTypeToken (module._impl, token, null, null, out error);
                        if (handle == IntPtr.Zero)
                                return null;
                        else
@@ -403,6 +447,9 @@ namespace System.Reflection {
                                return String.Compare (m.Name, s, true) == 0;
                }
 
+               [MethodImplAttribute (MethodImplOptions.InternalCall)]
+               internal extern IntPtr GetHINSTANCE ();
+
                [MethodImplAttribute (MethodImplOptions.InternalCall)]
                private extern string GetGuidInternal ();
 
@@ -410,19 +457,22 @@ namespace System.Reflection {
                private extern Type GetGlobalType ();
 
                [MethodImplAttribute (MethodImplOptions.InternalCall)]
-               internal static extern IntPtr ResolveTypeToken (IntPtr module, int token, out ResolveTokenError error);
+               internal static extern IntPtr ResolveTypeToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error);
 
                [MethodImplAttribute (MethodImplOptions.InternalCall)]
-               internal static extern IntPtr ResolveMethodToken (IntPtr module, int token, out ResolveTokenError error);
+               internal static extern IntPtr ResolveMethodToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error);
 
                [MethodImplAttribute (MethodImplOptions.InternalCall)]
-               internal static extern IntPtr ResolveFieldToken (IntPtr module, int token, out ResolveTokenError error);
+               internal static extern IntPtr ResolveFieldToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error);
 
                [MethodImplAttribute (MethodImplOptions.InternalCall)]
                internal static extern string ResolveStringToken (IntPtr module, int token, out ResolveTokenError error);
 
                [MethodImplAttribute (MethodImplOptions.InternalCall)]
-               internal static extern MemberInfo ResolveMemberToken (IntPtr module, int token, out ResolveTokenError error);
+               internal static extern MemberInfo ResolveMemberToken (IntPtr module, int token, IntPtr[] type_args, IntPtr[] method_args, out ResolveTokenError error);
+
+               [MethodImplAttribute (MethodImplOptions.InternalCall)]
+               internal static extern byte[] ResolveSignature (IntPtr module, int metadataToken, out ResolveTokenError error);
 
                [MethodImplAttribute (MethodImplOptions.InternalCall)]
                internal static extern void GetPEKind (IntPtr module, out PortableExecutableKinds peKind, out ImageFileMachine machine);