// Paolo Molaro (lupus@ximian.com)
//
// (C) 2001 Ximian, Inc. http://www.ximian.com
-//
-
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-using System;
-using System.Reflection;
using System.Runtime.Serialization;
using System.Security.Cryptography.X509Certificates;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
+using System.Security;
+using System.Security.Permissions;
namespace System.Reflection {
Other
};
+#if NET_2_0
+ [ComVisible (true)]
+ [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;
FilterTypeNameIgnoreCase = new TypeFilter (filter_by_type_name_ignore_case);
}
- internal Module () { }
-
- ~Module () {
- Close ();
+ internal Module () {
}
-
+
public Assembly Assembly {
get { return assembly; }
}
public virtual string FullyQualifiedName {
- get { return fqname; }
+ get {
+ if (SecurityManager.SecurityEnabled) {
+ new FileIOPermission (FileIOPermissionAccess.PathDiscovery, fqname).Demand ();
+ }
+ return fqname;
+ }
}
-
+
+ // Note: we do not ask for PathDiscovery because no path is returned here.
+ // However MS Fx requires it (see FDBK23572 for details).
public string Name {
get { return name; }
}
public extern int MetadataToken {
[MethodImplAttribute (MethodImplOptions.InternalCall)]
get;
- }
+ }
+
+ public extern int MDStreamVersion {
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]
+ get;
+ }
#endif
public virtual Type[] FindTypes(TypeFilter filter, object filterCriteria)
if (IsResource ())
return null;
- return GetGlobalType ().GetField (name, BindingFlags.Public | BindingFlags.Static);
+ Type globalType = GetGlobalType ();
+ return (globalType != null) ? globalType.GetField (name, BindingFlags.Public | BindingFlags.Static) : null;
}
public FieldInfo GetField (string name, BindingFlags flags)
if (IsResource ())
return null;
- return GetGlobalType ().GetField (name, flags);
+ Type globalType = GetGlobalType ();
+ return (globalType != null) ? globalType.GetField (name, flags) : null;
}
public FieldInfo[] GetFields ()
if (IsResource ())
return new FieldInfo [0];
- return GetGlobalType ().GetFields (BindingFlags.Public | BindingFlags.Static);
+ Type globalType = GetGlobalType ();
+ return (globalType != null) ? globalType.GetFields (BindingFlags.Public | BindingFlags.Static) : new FieldInfo [0];
}
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)
if (IsResource ())
return null;
- return GetGlobalType ().GetMethod (name, bindingAttr, binder, callConvention, types, modifiers);
+ Type globalType = GetGlobalType ();
+ return (globalType != null) ? globalType.GetMethod (name, bindingAttr, binder, callConvention, types, modifiers) : null;
}
public MethodInfo[] GetMethods ()
if (IsResource ())
return new MethodInfo [0];
- return GetGlobalType ().GetMethods ();
+ Type globalType = GetGlobalType ();
+ return (globalType != null) ? globalType.GetMethods () : new MethodInfo [0];
}
#if NET_2_0
if (IsResource ())
return new MethodInfo [0];
- return GetGlobalType ().GetMethods (flags);
+ Type globalType = GetGlobalType ();
+ return (globalType != null) ? globalType.GetMethods (flags) : new MethodInfo [0];
}
public FieldInfo[] GetFields (BindingFlags flags)
if (IsResource ())
return new FieldInfo [0];
- return GetGlobalType ().GetFields (flags);
+ Type globalType = GetGlobalType ();
+ return (globalType != null) ? globalType.GetFields (flags) : new FieldInfo [0];
}
#endif
+ [SecurityPermission (SecurityAction.LinkDemand, SerializationFormatter = true)]
public virtual void GetObjectData (SerializationInfo info, StreamingContext context)
{
+ if (info == null)
+ throw new ArgumentNullException ("info");
+
UnitySerializationHolder.GetModuleData (this, info, context);
}
return null;
}
}
-
+
+#if NET_2_0
+ [ComVisible (true)]
+#endif
public virtual Type GetType(string className)
{
return GetType (className, false, false);
}
-
+
+#if NET_2_0
+ [ComVisible (true)]
+#endif
public virtual Type GetType(string className, bool ignoreCase)
{
return GetType (className, false, ignoreCase);
}
+#if NET_2_0
+ [ComVisible (true)]
+#endif
public virtual Type GetType(string className, bool throwOnError, bool ignoreCase)
{
if (className == null)
return name;
}
-#if NET_2_0 || BOOTSTRAP_NET_2_0
- public
-#else
- internal
-#endif
- Guid Mvid {
+ internal Guid MvId {
+ get {
+ return Mono_GetGuid (this);
+ }
+ }
+
+#if NET_2_0
+ public Guid ModuleVersionId {
get {
return Mono_GetGuid (this);
}
}
+ public void GetPEKind (out PortableExecutableKinds peKind, out ImageFileMachine machine) {
+ ModuleHandle.GetPEKind (out peKind, out machine);
+ }
+#endif
+
+
#if NET_2_0
private Exception resolve_token_exception (int metadataToken, ResolveTokenError error, string tokenType) {
if (error == ResolveTokenError.OutOfRange)
else
return Type.GetTypeFromHandle (new RuntimeTypeHandle (handle));
}
+
+ [MonoTODO]
+ public byte[] ResolveSignature (int metadataToken) {
+ throw new NotImplementedException ();
+ }
#endif
+ internal static Type MonoDebugger_ResolveType (Module module, int token)
+ {
+ ResolveTokenError error;
+
+ IntPtr handle = ResolveTypeToken (module._impl, token, out error);
+ if (handle == IntPtr.Zero)
+ return null;
+ else
+ return Type.GetTypeFromHandle (new RuntimeTypeHandle (handle));
+ }
+
// Mono Extension: returns the GUID of this module
internal static Guid Mono_GetGuid (Module module)
{
[MethodImplAttribute (MethodImplOptions.InternalCall)]
private extern Type GetGlobalType ();
- [MethodImplAttribute (MethodImplOptions.InternalCall)]
- private extern void Close ();
-
[MethodImplAttribute (MethodImplOptions.InternalCall)]
internal static extern IntPtr ResolveTypeToken (IntPtr module, int token, out ResolveTokenError error);
internal static extern MemberInfo ResolveMemberToken (IntPtr module, int token, out ResolveTokenError error);
[MethodImplAttribute (MethodImplOptions.InternalCall)]
- internal static extern void GetPEKind (IntPtr module, out PortableExecutableKind peKind, out ImageFileMachine machine);
+ 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
}
}