Merge pull request #439 from mono-soc-2012/garyb/iconfix
[mono.git] / mcs / class / IKVM.Reflection / ParameterInfo.cs
index ddd949f1f4dd8fa1d9fbb269da8b093ce8f0cc67..fa704ad764bcdbf4616e2f5626fdeeea9a66c5cf 100644 (file)
@@ -58,12 +58,22 @@ namespace IKVM.Reflection
                public abstract ParameterAttributes Attributes { get; }
                public abstract int Position { get; }
                public abstract object RawDefaultValue { get; }
-               public abstract Type[] GetOptionalCustomModifiers();
-               public abstract Type[] GetRequiredCustomModifiers();
+               public abstract CustomModifiers __GetCustomModifiers();
+               public abstract bool __TryGetFieldMarshal(out FieldMarshal fieldMarshal);
                public abstract MemberInfo Member { get; }
                public abstract int MetadataToken { get; }
                internal abstract Module Module { get; }
 
+               public Type[] GetOptionalCustomModifiers()
+               {
+                       return __GetCustomModifiers().GetOptional();
+               }
+
+               public Type[] GetRequiredCustomModifiers()
+               {
+                       return __GetCustomModifiers().GetRequired();
+               }
+
                public bool IsIn
                {
                        get { return (Attributes & ParameterAttributes.In) != 0; }
@@ -98,10 +108,67 @@ namespace IKVM.Reflection
                {
                        return CustomAttributeData.__GetCustomAttributes(this, attributeType, inherit);
                }
+       }
+
+       sealed class ParameterInfoWrapper : ParameterInfo
+       {
+               private readonly MemberInfo member;
+               private readonly ParameterInfo forward;
+
+               internal ParameterInfoWrapper(MemberInfo member, ParameterInfo forward)
+               {
+                       this.member = member;
+                       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; }
+               }
+
+               public override object RawDefaultValue
+               {
+                       get { return forward.RawDefaultValue; }
+               }
+
+               public override CustomModifiers __GetCustomModifiers()
+               {
+                       return forward.__GetCustomModifiers();
+               }
+
+               public override bool __TryGetFieldMarshal(out FieldMarshal fieldMarshal)
+               {
+                       return forward.__TryGetFieldMarshal(out fieldMarshal);
+               }
+
+               public override MemberInfo Member
+               {
+                       get { return member; }
+               }
+
+               public override int MetadataToken
+               {
+                       get { return forward.MetadataToken; }
+               }
 
-               internal virtual IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
+               internal override Module Module
                {
-                       return this.Module.GetCustomAttributes(this.MetadataToken, attributeType);
+                       get { return member.Module; }
                }
        }
 }