X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2Fcorlib%2FSystem.Reflection%2FMonoModule.cs;h=f5498565260c528bdb0e57fec3fec7ff6ed0fc26;hb=394eb0d670265a6b7fa8e76a0e723abde7e0cbcc;hp=a99b5b15b1d717452b7c4a950f964fd049479f99;hpb=04fc560729e1d3014872bc763bf7a10c4f48e314;p=mono.git diff --git a/mcs/class/corlib/System.Reflection/MonoModule.cs b/mcs/class/corlib/System.Reflection/MonoModule.cs index a99b5b15b1d..f5498565260 100644 --- a/mcs/class/corlib/System.Reflection/MonoModule.cs +++ b/mcs/class/corlib/System.Reflection/MonoModule.cs @@ -28,8 +28,12 @@ using System; using System.Collections; +using System.Collections.Generic; using System.Globalization; using System.Runtime.InteropServices; +using System.Security.Cryptography.X509Certificates; +using System.Security; +using System.Security.Permissions; namespace System.Reflection { @@ -44,6 +48,70 @@ namespace System.Reflection { public partial class Module { #endif + public +#if NET_4_0 + override +#endif + Assembly Assembly { + get { return assembly; } + } + + public +#if NET_4_0 + override +#endif + // Note: we do not ask for PathDiscovery because no path is returned here. + // However MS Fx requires it (see FDBK23572 for details). + string Name { + get { return name; } + } + + public +#if NET_4_0 + override +#endif + string ScopeName { + get { return scopename; } + } + + public +#if NET_4_0 + override +#endif + int MDStreamVersion { + get { + if (_impl == IntPtr.Zero) + throw new NotSupportedException (); + return GetMDStreamVersion (_impl); + } + } + + public +#if NET_4_0 + override +#endif + Guid ModuleVersionId { + get { + return GetModuleVersionId (); + } + } + +#if NET_4_0 + public override +#else + public virtual +#endif + string FullyQualifiedName { + get { +#if !NET_2_1 + if (SecurityManager.SecurityEnabled) { + new FileIOPermission (FileIOPermissionAccess.PathDiscovery, fqname).Demand (); + } +#endif + return fqname; + } + } + public #if NET_4_0 override @@ -52,5 +120,258 @@ namespace System.Reflection { { return is_resource; } + +#if NET_4_0 + public override +#else + public virtual +#endif + Type[] FindTypes(TypeFilter filter, object filterCriteria) + { + var filtered = new List (); + Type[] types = GetTypes (); + foreach (Type t in types) + if (filter (t, filterCriteria)) + filtered.Add (t); + return filtered.ToArray (); + } + +#if NET_4_0 + public override +#else + public virtual +#endif + object[] GetCustomAttributes(bool inherit) + { + return MonoCustomAttrs.GetCustomAttributes (this, inherit); + } + +#if NET_4_0 + public override +#else + public virtual +#endif + object[] GetCustomAttributes(Type attributeType, bool inherit) + { + return MonoCustomAttrs.GetCustomAttributes (this, attributeType, inherit); + } + +#if NET_4_0 + public override +#else + public virtual +#endif + FieldInfo GetField (string name, BindingFlags bindingAttr) + { + if (IsResource ()) + return null; + + Type globalType = GetGlobalType (); + return (globalType != null) ? globalType.GetField (name, bindingAttr) : null; + } + +#if NET_4_0 + public override +#else + public virtual +#endif + FieldInfo[] GetFields (BindingFlags bindingFlags) + { + if (IsResource ()) + return new FieldInfo [0]; + + Type globalType = GetGlobalType (); + return (globalType != null) ? globalType.GetFields (bindingFlags) : new FieldInfo [0]; + } + +#if NET_4_0 + public override +#else + public virtual +#endif + int MetadataToken { + get { return get_MetadataToken (this); } + } + protected +#if NET_4_0 + override +#else + virtual +#endif + MethodInfo GetMethodImpl (string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers) + { + if (IsResource ()) + return null; + + Type globalType = GetGlobalType (); + if (globalType == null) + return null; + if (types == null) + return globalType.GetMethod (name); + return globalType.GetMethod (name, bindingAttr, binder, callConvention, types, modifiers); + } + + public +#if NET_4_0 + override +#endif + MethodInfo[] GetMethods (BindingFlags bindingFlags) { + if (IsResource ()) + return new MethodInfo [0]; + + Type globalType = GetGlobalType (); + return (globalType != null) ? globalType.GetMethods (bindingFlags) : new MethodInfo [0]; + } + +#if NET_4_0 + public override +#else + public virtual +#endif + void GetPEKind (out PortableExecutableKinds peKind, out ImageFileMachine machine) { + ModuleHandle.GetPEKind (out peKind, out machine); + } + +#if NET_4_0 + public override +#else + public virtual +#endif + Type GetType(string className, bool throwOnError, bool ignoreCase) + { + if (className == null) + throw new ArgumentNullException ("className"); + if (className == String.Empty) + throw new ArgumentException ("Type name can't be empty"); + return assembly.InternalGetType (this, className, throwOnError, ignoreCase); + } + +#if NET_4_0 + public override +#else + public virtual +#endif + bool IsDefined (Type attributeType, bool inherit) + { + return MonoCustomAttrs.IsDefined (this, attributeType, inherit); + } + + public +#if NET_4_0 + override +#endif + FieldInfo ResolveField (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + ResolveTokenError 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 + return FieldInfo.GetFieldFromHandle (new RuntimeFieldHandle (handle)); + } + + public +#if NET_4_0 + override +#endif + MemberInfo ResolveMember (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + + ResolveTokenError 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; + } + + public +#if NET_4_0 + override +#endif + MethodBase ResolveMethod (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + ResolveTokenError 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 + return MethodBase.GetMethodFromHandleNoGenericCheck (new RuntimeMethodHandle (handle)); + } + + public +#if NET_4_0 + override +#endif + string ResolveString (int metadataToken) { + ResolveTokenError error; + + string s = ResolveStringToken (_impl, metadataToken, out error); + if (s == null) + throw resolve_token_exception (metadataToken, error, "string"); + else + return s; + } + + public +#if NET_4_0 + override +#endif + Type ResolveType (int metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) { + ResolveTokenError 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 +#if NET_4_0 + override +#endif + 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; + } + +#if !NET_2_1 + + public +#if NET_4_0 + override +#endif + X509Certificate GetSignerCertificate () + { + try { + return X509Certificate.CreateFromSignedFile (assembly.Location); + } + catch { + return null; + } + } +#endif + +#if NET_4_0 + public override +#else + public virtual +#endif + Type[] GetTypes() + { + return InternalGetTypes (); + } + +#if NET_4_0 + public override IList GetCustomAttributesData () { + return CustomAttributeData.GetCustomAttributes (this); + } +#endif } }