X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FIKVM.Reflection%2FConstructorInfo.cs;h=11d18a7a8433c4f6a31cfd6cd2807dde49bae23b;hb=3af50114d986e9ffcd1544aa7ff13f7472992687;hp=69e2b4df6fae1ec97abd24cd57ed8295d4a2b658;hpb=5b558abeeb255a3179d4ca6a85617e051c6abd38;p=mono.git diff --git a/mcs/class/IKVM.Reflection/ConstructorInfo.cs b/mcs/class/IKVM.Reflection/ConstructorInfo.cs index 69e2b4df6fa..11d18a7a843 100644 --- a/mcs/class/IKVM.Reflection/ConstructorInfo.cs +++ b/mcs/class/IKVM.Reflection/ConstructorInfo.cs @@ -1,5 +1,5 @@ /* - Copyright (C) 2009 Jeroen Frijters + Copyright (C) 2009-2012 Jeroen Frijters This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -23,11 +23,22 @@ */ using System; using System.Collections.Generic; +using System.Diagnostics; namespace IKVM.Reflection { public abstract class ConstructorInfo : MethodBase { + // prevent external subclasses + internal ConstructorInfo() + { + } + + public sealed override string ToString() + { + return GetMethodInfo().ToString(); + } + public static readonly string ConstructorName = ".ctor"; public static readonly string TypeConstructorName = ".cctor"; @@ -38,16 +49,31 @@ namespace IKVM.Reflection return new ConstructorInfoImpl((MethodInfo)GetMethodInfo().BindTypeParameters(type)); } + public sealed override MethodBase __GetMethodOnTypeDefinition() + { + return new ConstructorInfoImpl((MethodInfo)GetMethodInfo().__GetMethodOnTypeDefinition()); + } + public sealed override MemberTypes MemberType { get { return MemberTypes.Constructor; } } - public override bool ContainsGenericParameters + public sealed override int __MethodRVA + { + get { return GetMethodInfo().__MethodRVA; } + } + + public sealed override bool ContainsGenericParameters { get { return GetMethodInfo().ContainsGenericParameters; } } + public ParameterInfo __ReturnParameter + { + get { return new ParameterInfoWrapper(this, GetMethodInfo().ReturnParameter); } + } + public sealed override ParameterInfo[] GetParameters() { ParameterInfo[] parameters = GetMethodInfo().GetParameters(); @@ -58,167 +84,156 @@ namespace IKVM.Reflection return parameters; } - private sealed class ParameterInfoWrapper : ParameterInfo + public sealed override CallingConventions CallingConvention { - private readonly ConstructorInfo ctor; - private readonly ParameterInfo forward; - - internal ParameterInfoWrapper(ConstructorInfo ctor, ParameterInfo forward) - { - this.ctor = ctor; - this.forward = forward; - } - - public override string Name - { - get { return forward.Name; } - } - - public override Type ParameterType - { - get { return forward.ParameterType; } - } - - public override ParameterAttributes Attributes - { - get { return forward.Attributes; } - } - - public override int Position - { - get { return forward.Position; } - } + get { return GetMethodInfo().CallingConvention; } + } - public override object RawDefaultValue - { - get { return forward.RawDefaultValue; } - } + public sealed override MethodAttributes Attributes + { + get { return GetMethodInfo().Attributes; } + } - public override Type[] GetOptionalCustomModifiers() - { - return forward.GetOptionalCustomModifiers(); - } + public sealed override MethodImplAttributes GetMethodImplementationFlags() + { + return GetMethodInfo().GetMethodImplementationFlags(); + } - public override Type[] GetRequiredCustomModifiers() - { - return forward.GetRequiredCustomModifiers(); - } + public sealed override Type DeclaringType + { + get { return GetMethodInfo().DeclaringType; } + } - public override MemberInfo Member - { - get { return ctor; } - } + public sealed override string Name + { + get { return GetMethodInfo().Name; } + } - public override int MetadataToken - { - get { return forward.MetadataToken; } - } + public sealed override int MetadataToken + { + get { return GetMethodInfo().MetadataToken; } + } - internal override Module Module - { - get { return ctor.Module; } - } + public sealed override Module Module + { + get { return GetMethodInfo().Module; } + } - internal override IList GetCustomAttributesData(Type attributeType) - { - return forward.GetCustomAttributesData(attributeType); - } + public sealed override MethodBody GetMethodBody() + { + return GetMethodInfo().GetMethodBody(); } - } - sealed class ConstructorInfoImpl : ConstructorInfo - { - private readonly MethodInfo method; + public sealed override bool __IsMissing + { + get { return GetMethodInfo().__IsMissing; } + } - internal ConstructorInfoImpl(MethodInfo method) + internal sealed override int ParameterCount { - this.method = method; + get { return GetMethodInfo().ParameterCount; } } - public override bool Equals(object obj) + internal sealed override MemberInfo SetReflectedType(Type type) { - ConstructorInfoImpl other = obj as ConstructorInfoImpl; - return other != null && other.method.Equals(method); + return new ConstructorInfoWithReflectedType(type, this); } - public override int GetHashCode() + internal sealed override int GetCurrentToken() { - return method.GetHashCode(); + return GetMethodInfo().GetCurrentToken(); } - public override MethodBody GetMethodBody() + internal sealed override List GetPseudoCustomAttributes(Type attributeType) { - return method.GetMethodBody(); + return GetMethodInfo().GetPseudoCustomAttributes(attributeType); } - public override CallingConventions CallingConvention + internal sealed override bool IsBaked { - get { return method.CallingConvention; } + get { return GetMethodInfo().IsBaked; } } - public override MethodAttributes Attributes + internal sealed override MethodSignature MethodSignature { - get { return method.Attributes; } + get { return GetMethodInfo().MethodSignature; } } - public override MethodImplAttributes GetMethodImplementationFlags() + internal sealed override int ImportTo(Emit.ModuleBuilder module) { - return method.GetMethodImplementationFlags(); + return GetMethodInfo().ImportTo(module); } + } - internal override int ParameterCount + sealed class ConstructorInfoImpl : ConstructorInfo + { + private readonly MethodInfo method; + + internal ConstructorInfoImpl(MethodInfo method) { - get { return method.ParameterCount; } + this.method = method; } - public override Type DeclaringType + public override bool Equals(object obj) { - get { return method.DeclaringType; } + ConstructorInfoImpl other = obj as ConstructorInfoImpl; + return other != null && other.method.Equals(method); } - public override string Name + public override int GetHashCode() { - get { return method.Name; } + return method.GetHashCode(); } - public override string ToString() + internal override MethodInfo GetMethodInfo() { - return method.ToString(); + return method; } - public override Module Module + internal override MethodInfo GetMethodOnTypeDefinition() { - get { return method.Module; } + return method.GetMethodOnTypeDefinition(); } + } + + sealed class ConstructorInfoWithReflectedType : ConstructorInfo + { + private readonly Type reflectedType; + private readonly ConstructorInfo ctor; - public override int MetadataToken + internal ConstructorInfoWithReflectedType(Type reflectedType, ConstructorInfo ctor) { - get { return method.MetadataToken; } + Debug.Assert(reflectedType != ctor.DeclaringType); + this.reflectedType = reflectedType; + this.ctor = ctor; } - internal override MethodInfo GetMethodInfo() + public override bool Equals(object obj) { - return method; + ConstructorInfoWithReflectedType other = obj as ConstructorInfoWithReflectedType; + return other != null + && other.reflectedType == reflectedType + && other.ctor == ctor; } - internal override IList GetCustomAttributesData(Type attributeType) + public override int GetHashCode() { - return method.GetCustomAttributesData(attributeType); + return reflectedType.GetHashCode() ^ ctor.GetHashCode(); } - internal override MethodInfo GetMethodOnTypeDefinition() + public override Type ReflectedType { - return method.GetMethodOnTypeDefinition(); + get { return reflectedType; } } - internal override MethodSignature MethodSignature + internal override MethodInfo GetMethodInfo() { - get { return method.MethodSignature; } + return ctor.GetMethodInfo(); } - internal override int ImportTo(Emit.ModuleBuilder module) + internal override MethodInfo GetMethodOnTypeDefinition() { - return method.ImportTo(module); + return ctor.GetMethodOnTypeDefinition(); } } }