Moved ProviderCollectionTest.cs from System assembly to System.Configuration.
[mono.git] / mcs / class / corlib / System.Reflection / Module.cs
index 5ef144ba8f85cf3cf2697beba02287d3034dd784..935a0a08d3d9c2a99db623d64cfe79f308476d86 100644 (file)
@@ -44,15 +44,16 @@ namespace System.Reflection {
 
 #if NET_2_0
        [ComVisible (true)]
-       [ClassInterfaceAttribute (ClassInterfaceType.None)]
        [ComDefaultInterfaceAttribute (typeof (_Module))]
 #endif
        [Serializable]
-       public class Module : ISerializable, ICustomAttributeProvider {
+       [ClassInterfaceAttribute (ClassInterfaceType.None)]
+       public class Module : ISerializable, ICustomAttributeProvider, _Module {
        
                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;
@@ -105,7 +107,18 @@ namespace System.Reflection {
                public extern int MetadataToken {
                        [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) 
@@ -137,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 () 
@@ -157,7 +170,12 @@ namespace System.Reflection {
        
                public MethodInfo GetMethod (string name) 
                {
-                       return GetMethodImpl (name, defaultBindingFlags, null, CallingConventions.Any, Type.EmptyTypes, null);
+                       // Can't call the other overloads since they call Type.GetMethod () which does a null check on the 'types' array
+                       if (IsResource ())
+                               return null;
+
+                       Type globalType = GetGlobalType ();
+                       return (globalType != null) ? globalType.GetMethod (name) : null;
                }
        
                public MethodInfo GetMethod (string name, Type[] types) 
@@ -189,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
        
@@ -277,13 +295,7 @@ namespace System.Reflection {
                        return name;
                }
 
-#if NET_2_0
-               [Obsolete ("Please use ModuleVersionId instead - this will be removed before Whidbey ships.")]
-               public
-#else
-               internal 
-#endif
-               Guid MvId {
+               internal Guid MvId {
                        get {
                                return Mono_GetGuid (this);
                        }
@@ -310,11 +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");
                }
 
-               [Obsolete ("Please use ResolveField(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments) - this will be removed before Whidbey ships.")]
+               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
@@ -322,20 +351,28 @@ 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
                                return m;
                }
 
-               [Obsolete ("Please use ResolveMethod(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments) - this will be removed before Whidbey ships.")]
                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
@@ -352,23 +389,36 @@ namespace System.Reflection {
                                return s;
                }
 
-               [Obsolete ("Please use ResolveType(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments) - this will be removed before Whidbey ships.")]
                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));
                }
+
+               public byte[] ResolveSignature (int metadataToken) {
+                       ResolveTokenError error;
+
+                   byte[] res = ResolveSignature (_impl, metadataToken, out error);
+                       if (res == null)
+                               throw resolve_token_exception (metadataToken, error, "signature");
+                       else
+                               return res;
+               }
 #endif
 
                internal static Type MonoDebugger_ResolveType (Module module, int token)
                {
                        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
@@ -397,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 ();
 
@@ -404,21 +457,47 @@ 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);
+
+#if NET_1_1
+               void _Module.GetIDsOfNames ([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               void _Module.GetTypeInfo (uint iTInfo, uint lcid, IntPtr ppTInfo)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               void _Module.GetTypeInfoCount (out uint pcTInfo)
+               {
+                       throw new NotImplementedException ();
+               }
+
+               void _Module.Invoke (uint dispIdMember, [In] ref Guid riid, uint lcid, short wFlags, IntPtr pDispParams,
+                       IntPtr pVarResult, IntPtr pExcepInfo, IntPtr puArgErr)
+               {
+                       throw new NotImplementedException ();
+               }
+#endif
        }
 }