Update mcs/class/Commons.Xml.Relaxng/Commons.Xml.Relaxng/RelaxngPattern.cs
[mono.git] / mcs / class / IKVM.Reflection / Missing.cs
index 7b3b4257e3ed7f0ead15427cc8d4da5ff357cac3..dfc7791b1404b376beca0471f1bb3364191103d0 100644 (file)
@@ -1,5 +1,5 @@
-/*
-  Copyright (C) 2011 Jeroen Frijters
+/*
+  Copyright (C) 2011-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
@@ -96,29 +96,56 @@ namespace IKVM.Reflection
                }
        }
 
+       public struct MissingGenericMethodBuilder
+       {
+               private readonly MissingMethod method;
+
+               public MissingGenericMethodBuilder(Type declaringType, CallingConventions callingConvention, string name, int genericParameterCount)
+               {
+                       method = new MissingMethod(declaringType, name, new MethodSignature(null, null, new PackedCustomModifiers(), callingConvention, genericParameterCount));
+               }
+
+               public Type[] GetGenericArguments()
+               {
+                       return method.GetGenericArguments();
+               }
+
+               public void SetSignature(Type returnType, CustomModifiers returnTypeCustomModifiers, Type[] parameterTypes, CustomModifiers[] parameterTypeCustomModifiers)
+               {
+                       method.signature = new MethodSignature(
+                               returnType ?? method.Module.universe.System_Void,
+                               Util.Copy(parameterTypes),
+                               PackedCustomModifiers.CreateFromExternal(returnTypeCustomModifiers, parameterTypeCustomModifiers, parameterTypes.Length),
+                               method.signature.CallingConvention,
+                               method.signature.GenericParameterCount);
+               }
+
+               [Obsolete("Please use SetSignature(Type, CustomModifiers, Type[], CustomModifiers[]) instead.")]
+               public void SetSignature(Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers, Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers)
+               {
+                       method.signature = new MethodSignature(
+                               returnType ?? method.Module.universe.System_Void,
+                               Util.Copy(parameterTypes),
+                               PackedCustomModifiers.CreateFromExternal(returnTypeOptionalCustomModifiers, returnTypeRequiredCustomModifiers, parameterTypeOptionalCustomModifiers, parameterTypeRequiredCustomModifiers, parameterTypes.Length),
+                               method.signature.CallingConvention,
+                               method.signature.GenericParameterCount);
+               }
+
+               public MethodInfo Finish()
+               {
+                       return method;
+               }
+       }
+
        sealed class MissingAssembly : Assembly
        {
-               private readonly Dictionary<string, Type> types = new Dictionary<string, Type>();
                private readonly MissingModule module;
-               private readonly string name;
 
                internal MissingAssembly(Universe universe, string name)
                        : base(universe)
                {
                        module = new MissingModule(this);
-                       this.name = name;
-               }
-
-               internal override Type ResolveType(string ns, string name)
-               {
-                       string fullName = ns == null ? name : ns + "." + name;
-                       Type type;
-                       if (!types.TryGetValue(fullName, out type))
-                       {
-                               type = new MissingType(module, null, ns, name);
-                               types.Add(fullName, type);
-                       }
-                       return type;
+                       this.fullName = name;
                }
 
                public override Type[] GetTypes()
@@ -126,14 +153,9 @@ namespace IKVM.Reflection
                        throw new MissingAssemblyException(this);
                }
 
-               public override string FullName
-               {
-                       get { return name; }
-               }
-
                public override AssemblyName GetName()
                {
-                       return new AssemblyName(name);
+                       return new AssemblyName(fullName);
                }
 
                public override string ImageRuntimeVersion
@@ -196,9 +218,14 @@ namespace IKVM.Reflection
                        get { return true; }
                }
 
-               internal override Type GetTypeImpl(string typeName)
+               internal override Type FindType(TypeName typeName)
                {
-                       throw new MissingAssemblyException(this);
+                       return null;
+               }
+
+               internal override Type FindTypeIgnoreCase(TypeName lowerCaseName)
+               {
+                       return null;
                }
 
                internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
@@ -207,7 +234,7 @@ namespace IKVM.Reflection
                }
        }
 
-       sealed class MissingModule : Module
+       sealed class MissingModule : NonPEModule
        {
                private readonly MissingAssembly assembly;
 
@@ -242,62 +269,22 @@ namespace IKVM.Reflection
                        get { throw new MissingModuleException(this); }
                }
 
-               public override Type ResolveType(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
-               {
-                       throw new MissingModuleException(this);
-               }
-
-               public override MethodBase ResolveMethod(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
-               {
-                       throw new MissingModuleException(this);
-               }
-
-               public override FieldInfo ResolveField(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
-               {
-                       throw new MissingModuleException(this);
-               }
-
-               public override MemberInfo ResolveMember(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
-               {
-                       throw new MissingModuleException(this);
-               }
-
-               public override string ResolveString(int metadataToken)
-               {
-                       throw new MissingModuleException(this);
-               }
-
-               public override Type[] __ResolveOptionalParameterTypes(int metadataToken)
-               {
-                       throw new MissingModuleException(this);
-               }
-
                public override string ScopeName
                {
                        get { throw new MissingModuleException(this); }
                }
 
-               internal override Type GetTypeImpl(string typeName)
+               internal override Type FindType(TypeName typeName)
                {
-                       throw new MissingModuleException(this);
+                       return null;
                }
 
-               internal override void GetTypesImpl(System.Collections.Generic.List<Type> list)
-               {
-                       throw new MissingModuleException(this);
-               }
-
-               public override AssemblyName[] __GetReferencedAssemblies()
+               internal override Type FindTypeIgnoreCase(TypeName lowerCaseName)
                {
-                       throw new MissingModuleException(this);
+                       return null;
                }
 
-               internal override Type GetModuleType()
-               {
-                       throw new MissingModuleException(this);
-               }
-
-               internal override IKVM.Reflection.Reader.ByteReader GetBlob(int blobIndex)
+               internal override void GetTypesImpl(System.Collections.Generic.List<Type> list)
                {
                        throw new MissingModuleException(this);
                }
@@ -346,6 +333,21 @@ namespace IKVM.Reflection
                {
                        throw new MissingModuleException(this);
                }
+
+               protected override Exception InvalidOperationException()
+               {
+                       return new MissingModuleException(this);
+               }
+
+               protected override Exception NotSupportedException()
+               {
+                       return new MissingModuleException(this);
+               }
+
+               protected override Exception ArgumentOutOfRangeException()
+               {
+                       return new MissingModuleException(this);
+               }
        }
 
        sealed class MissingType : Type
@@ -354,7 +356,8 @@ namespace IKVM.Reflection
                private readonly Type declaringType;
                private readonly string ns;
                private readonly string name;
-               private Dictionary<string, Type> types;
+               private Type[] typeArgs;
+               private int token;
 
                internal MissingType(Module module, Type declaringType, string ns, string name)
                {
@@ -362,22 +365,37 @@ namespace IKVM.Reflection
                        this.declaringType = declaringType;
                        this.ns = ns;
                        this.name = name;
+                       MarkEnumOrValueType(ns, name);
                }
 
-               internal override Type ResolveNestedType(string ns, string name)
+               internal override MethodBase FindMethod(string name, MethodSignature signature)
                {
-                       if (types == null)
-                       {
-                               types = new Dictionary<string, Type>();
-                       }
-                       string fullName = ns == null ? name : ns + "." + name;
-                       Type type;
-                       if (!types.TryGetValue(fullName, out type))
+                       MethodInfo method = new MissingMethod(this, name, signature);
+                       if (name == ".ctor")
                        {
-                               type = new MissingType(module, this, ns, name);
-                               types.Add(fullName, type);
+                               return new ConstructorInfoImpl(method);
                        }
-                       return type;
+                       return method;
+               }
+
+               internal override FieldInfo FindField(string name, FieldSignature signature)
+               {
+                       return new MissingField(this, name, signature);
+               }
+
+               internal override Type FindNestedType(TypeName name)
+               {
+                       return null;
+               }
+
+               internal override Type FindNestedTypeIgnoreCase(TypeName lowerCaseName)
+               {
+                       return null;
+               }
+
+               public override bool __IsMissing
+               {
+                       get { return true; }
                }
 
                public override Type DeclaringType
@@ -410,6 +428,35 @@ namespace IKVM.Reflection
                        get { return module; }
                }
 
+               public override int MetadataToken
+               {
+                       get { return token; }
+               }
+
+               public override bool IsValueType
+               {
+                       get
+                       {
+                               switch (typeFlags & (TypeFlags.ValueType | TypeFlags.NotValueType))
+                               {
+                                       case TypeFlags.ValueType:
+                                               return true;
+                                       case TypeFlags.NotValueType:
+                                               return false;
+                                       default:
+                                               if (module.universe.ResolveMissingTypeIsValueType(this))
+                                               {
+                                                       typeFlags |= TypeFlags.ValueType;
+                                               }
+                                               else
+                                               {
+                                                       typeFlags |= TypeFlags.NotValueType;
+                                               }
+                                               return (typeFlags & TypeFlags.ValueType) != 0;
+                               }
+                       }
+               }
+
                public override Type BaseType
                {
                        get { throw new MissingMemberException(this); }
@@ -455,54 +502,636 @@ namespace IKVM.Reflection
                        throw new MissingMemberException(this);
                }
 
-               public override Type[] __GetRequiredCustomModifiers()
+               public override CustomModifiers __GetCustomModifiers()
                {
                        throw new MissingMemberException(this);
                }
 
-               public override Type[] __GetOptionalCustomModifiers()
+               public override Type[] GetGenericArguments()
+               {
+                       throw new MissingMemberException(this);
+               }
+
+               public override CustomModifiers[] __GetGenericArgumentsCustomModifiers()
+               {
+                       throw new MissingMemberException(this);
+               }
+
+               public override StructLayoutAttribute StructLayoutAttribute
+               {
+                       get { throw new MissingMemberException(this); }
+               }
+
+               public override bool IsGenericType
+               {
+                       get { throw new MissingMemberException(this); }
+               }
+
+               public override bool IsGenericTypeDefinition
+               {
+                       get { throw new MissingMemberException(this); }
+               }
+
+               internal override Type GetGenericTypeArgument(int index)
+               {
+                       if (typeArgs == null)
+                       {
+                               typeArgs = new Type[index + 1];
+                       }
+                       else if (typeArgs.Length <= index)
+                       {
+                               Array.Resize(ref typeArgs, index + 1);
+                       }
+                       return typeArgs[index] ?? (typeArgs[index] = new MissingTypeParameter(this, index));
+               }
+
+               internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
                {
                        throw new MissingMemberException(this);
                }
 
+               internal override Type BindTypeParameters(IGenericBinder binder)
+               {
+                       return this;
+               }
+
+               internal override Type SetMetadataTokenForMissing(int token)
+               {
+                       this.token = token;
+                       return this;
+               }
+       }
+
+       sealed class MissingTypeParameter : IKVM.Reflection.Reader.TypeParameterType
+       {
+               private readonly MemberInfo owner;
+               private readonly int index;
+
+               internal MissingTypeParameter(MemberInfo owner, int index)
+               {
+                       this.owner = owner;
+                       this.index = index;
+               }
+
+               public override Module Module
+               {
+                       get { return owner.Module; }
+               }
+
+               public override string Name
+               {
+                       get { return null; }
+               }
+
+               public override int GenericParameterPosition
+               {
+                       get { return index; }
+               }
+
+               public override MethodBase DeclaringMethod
+               {
+                       get { return owner as MethodBase; }
+               }
+
+               public override Type DeclaringType
+               {
+                       get { return owner as Type; }
+               }
+
+               internal override Type BindTypeParameters(IGenericBinder binder)
+               {
+                       if (owner is MethodBase)
+                       {
+                               return binder.BindMethodParameter(this);
+                       }
+                       else
+                       {
+                               return binder.BindTypeParameter(this);
+                       }
+               }
+       }
+
+       sealed class MissingMethod : MethodInfo
+       {
+               private readonly Type declaringType;
+               private readonly string name;
+               internal MethodSignature signature;
+               private MethodInfo forwarder;
+               private Type[] typeArgs;
+
+               internal MissingMethod(Type declaringType, string name, MethodSignature signature)
+               {
+                       this.declaringType = declaringType;
+                       this.name = name;
+                       this.signature = signature;
+               }
+
+               private MethodInfo Forwarder
+               {
+                       get
+                       {
+                               MethodInfo method = TryGetForwarder();
+                               if (method == null)
+                               {
+                                       throw new MissingMemberException(this);
+                               }
+                               return method;
+                       }
+               }
+
+               private MethodInfo TryGetForwarder()
+               {
+                       if (forwarder == null && !declaringType.__IsMissing)
+                       {
+                               MethodBase mb = declaringType.FindMethod(name, signature);
+                               ConstructorInfo ci = mb as ConstructorInfo;
+                               if (ci != null)
+                               {
+                                       forwarder = ci.GetMethodInfo();
+                               }
+                               else
+                               {
+                                       forwarder = (MethodInfo)mb;
+                               }
+                       }
+                       return forwarder;
+               }
+
+               public override bool __IsMissing
+               {
+                       get { return TryGetForwarder() == null; }
+               }
+
+               public override Type ReturnType
+               {
+                       get { return signature.GetReturnType(this); }
+               }
+
+               public override ParameterInfo ReturnParameter
+               {
+                       get { return new ParameterInfoImpl(this, -1); }
+               }
+
+               internal override MethodSignature MethodSignature
+               {
+                       get { return signature; }
+               }
+
+               internal override int ParameterCount
+               {
+                       get { return signature.GetParameterCount(); }
+               }
+
+               private sealed class ParameterInfoImpl : ParameterInfo
+               {
+                       private readonly MissingMethod method;
+                       private readonly int index;
+
+                       internal ParameterInfoImpl(MissingMethod method, int index)
+                       {
+                               this.method = method;
+                               this.index = index;
+                       }
+
+                       private ParameterInfo Forwarder
+                       {
+                               get { return index == -1 ? method.Forwarder.ReturnParameter : method.Forwarder.GetParameters()[index]; }
+                       }
+
+                       public override string Name
+                       {
+                               get { return Forwarder.Name; }
+                       }
+
+                       public override Type ParameterType
+                       {
+                               get { return index == -1 ? method.signature.GetReturnType(method) : method.signature.GetParameterType(method, index); }
+                       }
+
+                       public override ParameterAttributes Attributes
+                       {
+                               get { return Forwarder.Attributes; }
+                       }
+
+                       public override int Position
+                       {
+                               get { return index; }
+                       }
+
+                       public override object RawDefaultValue
+                       {
+                               get { return Forwarder.RawDefaultValue; }
+                       }
+
+                       public override CustomModifiers __GetCustomModifiers()
+                       {
+                               return index == -1
+                                       ? method.signature.GetReturnTypeCustomModifiers(method)
+                                       : method.signature.GetParameterCustomModifiers(method, index);
+                       }
+
+                       public override MemberInfo Member
+                       {
+                               get { return method; }
+                       }
+
+                       public override int MetadataToken
+                       {
+                               get { return Forwarder.MetadataToken; }
+                       }
+
+                       internal override Module Module
+                       {
+                               get { return method.Module; }
+                       }
+
+                       internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
+                       {
+                               return Forwarder.GetCustomAttributesData(attributeType);
+                       }
+
+                       public override string ToString()
+                       {
+                               return Forwarder.ToString();
+                       }
+               }
+
+               public override ParameterInfo[] GetParameters()
+               {
+                       ParameterInfo[] parameters = new ParameterInfo[signature.GetParameterCount()];
+                       for (int i = 0; i < parameters.Length; i++)
+                       {
+                               parameters[i] = new ParameterInfoImpl(this, i);
+                       }
+                       return parameters;
+               }
+
+               public override MethodAttributes Attributes
+               {
+                       get { return Forwarder.Attributes; }
+               }
+
+               public override MethodImplAttributes GetMethodImplementationFlags()
+               {
+                       return Forwarder.GetMethodImplementationFlags();
+               }
+
+               public override MethodBody GetMethodBody()
+               {
+                       return Forwarder.GetMethodBody();
+               }
+
+               public override int __MethodRVA
+               {
+                       get { return Forwarder.__MethodRVA; }
+               }
+
+               public override CallingConventions CallingConvention
+               {
+                       get { return signature.CallingConvention; }
+               }
+
+               internal override int ImportTo(IKVM.Reflection.Emit.ModuleBuilder module)
+               {
+                       MethodInfo method = TryGetForwarder();
+                       if (method != null)
+                       {
+                               return method.ImportTo(module);
+                       }
+                       return module.ImportMethodOrField(declaringType, this.Name, this.MethodSignature);
+               }
+
+               public override string Name
+               {
+                       get { return name; }
+               }
+
+               public override Type DeclaringType
+               {
+                       get { return declaringType.IsModulePseudoType ? null : declaringType; }
+               }
+
+               public override Module Module
+               {
+                       get { return declaringType.Module; }
+               }
+
+               public override bool Equals(object obj)
+               {
+                       MissingMethod other = obj as MissingMethod;
+                       return other != null
+                               && other.declaringType == declaringType
+                               && other.name == name
+                               && other.signature.Equals(signature);
+               }
+
+               public override int GetHashCode()
+               {
+                       return declaringType.GetHashCode() ^ name.GetHashCode() ^ signature.GetHashCode();
+               }
+
+               internal override MethodBase BindTypeParameters(Type type)
+               {
+                       MethodInfo forwarder = TryGetForwarder();
+                       if (forwarder != null)
+                       {
+                               return forwarder.BindTypeParameters(type);
+                       }
+                       return new GenericMethodInstance(type, this, null);
+               }
+
+               public override bool ContainsGenericParameters
+               {
+                       get { return Forwarder.ContainsGenericParameters; }
+               }
+
+               internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
+               {
+                       return Forwarder.GetCustomAttributesData(attributeType);
+               }
+
                public override Type[] GetGenericArguments()
+               {
+                       MethodInfo method = TryGetForwarder();
+                       if (method != null)
+                       {
+                               return Forwarder.GetGenericArguments();
+                       }
+                       if (typeArgs == null)
+                       {
+                               typeArgs = new Type[signature.GenericParameterCount];
+                               for (int i = 0; i < typeArgs.Length; i++)
+                               {
+                                       typeArgs[i] = new MissingTypeParameter(this, i);
+                               }
+                       }
+                       return Util.Copy(typeArgs);
+               }
+
+               internal override Type GetGenericMethodArgument(int index)
+               {
+                       return GetGenericArguments()[index];
+               }
+
+               internal override int GetGenericMethodArgumentCount()
+               {
+                       return Forwarder.GetGenericMethodArgumentCount();
+               }
+
+               public override MethodInfo GetGenericMethodDefinition()
+               {
+                       return Forwarder.GetGenericMethodDefinition();
+               }
+
+               internal override MethodInfo GetMethodOnTypeDefinition()
+               {
+                       return Forwarder.GetMethodOnTypeDefinition();
+               }
+
+               internal override bool HasThis
+               {
+                       get { return (signature.CallingConvention & (CallingConventions.HasThis | CallingConventions.ExplicitThis)) == CallingConventions.HasThis; }
+               }
+
+               public override bool IsGenericMethod
+               {
+                       get { return IsGenericMethodDefinition; }
+               }
+
+               public override bool IsGenericMethodDefinition
+               {
+                       get { return signature.GenericParameterCount != 0; }
+               }
+
+               public override MethodInfo MakeGenericMethod(params Type[] typeArguments)
+               {
+                       MethodInfo method = TryGetForwarder();
+                       if (method != null)
+                       {
+                               return method.MakeGenericMethod(typeArguments);
+                       }
+                       return new GenericMethodInstance(declaringType, this, typeArguments);
+               }
+
+               public override int MetadataToken
+               {
+                       get { return Forwarder.MetadataToken; }
+               }
+       }
+
+       sealed class MissingField : FieldInfo
+       {
+               private readonly Type declaringType;
+               private readonly string name;
+               private readonly FieldSignature signature;
+               private FieldInfo forwarder;
+
+               internal MissingField(Type declaringType, string name, FieldSignature signature)
+               {
+                       this.declaringType = declaringType;
+                       this.name = name;
+                       this.signature = signature;
+               }
+
+               private FieldInfo Forwarder
+               {
+                       get
+                       {
+                               FieldInfo field = TryGetForwarder();
+                               if (field == null)
+                               {
+                                       throw new MissingMemberException(this);
+                               }
+                               return field;
+                       }
+               }
+
+               private FieldInfo TryGetForwarder()
+               {
+                       if (forwarder == null && !declaringType.__IsMissing)
+                       {
+                               forwarder = declaringType.FindField(name, signature);
+                       }
+                       return forwarder;
+               }
+
+               public override bool __IsMissing
+               {
+                       get { return TryGetForwarder() == null; }
+               }
+
+               public override FieldAttributes Attributes
+               {
+                       get { return Forwarder.Attributes; }
+               }
+
+               public override void __GetDataFromRVA(byte[] data, int offset, int length)
+               {
+                       Forwarder.__GetDataFromRVA(data, offset, length);
+               }
+
+               public override int __FieldRVA
+               {
+                       get { return Forwarder.__FieldRVA; }
+               }
+
+               public override object GetRawConstantValue()
+               {
+                       return Forwarder.GetRawConstantValue();
+               }
+
+               internal override FieldSignature FieldSignature
+               {
+                       get { return signature; }
+               }
+
+               internal override int ImportTo(IKVM.Reflection.Emit.ModuleBuilder module)
+               {
+                       FieldInfo field = TryGetForwarder();
+                       if (field != null)
+                       {
+                               return field.ImportTo(module);
+                       }
+                       return module.ImportMethodOrField(declaringType, this.Name, this.FieldSignature);
+               }
+
+               public override string Name
+               {
+                       get { return name; }
+               }
+
+               public override Type DeclaringType
+               {
+                       get { return declaringType.IsModulePseudoType ? null : declaringType; }
+               }
+
+               public override Module Module
+               {
+                       get { return declaringType.Module; }
+               }
+
+               internal override FieldInfo BindTypeParameters(Type type)
+               {
+                       FieldInfo forwarder = TryGetForwarder();
+                       if (forwarder != null)
+                       {
+                               return forwarder.BindTypeParameters(type);
+                       }
+                       return new GenericFieldInstance(type, this);
+               }
+
+               internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
+               {
+                       return Forwarder.GetCustomAttributesData(attributeType);
+               }
+
+               public override int MetadataToken
+               {
+                       get { return Forwarder.MetadataToken; }
+               }
+
+               public override bool Equals(object obj)
+               {
+                       MissingField other = obj as MissingField;
+                       return other != null
+                               && other.declaringType == declaringType
+                               && other.name == name
+                               && other.signature.Equals(signature);
+               }
+
+               public override int GetHashCode()
+               {
+                       return declaringType.GetHashCode() ^ name.GetHashCode() ^ signature.GetHashCode();
+               }
+
+               public override string ToString()
+               {
+                       return this.FieldType.Name + " " + this.Name;
+               }
+       }
+
+       // NOTE this is currently only used by CustomAttributeData (because there is no other way to refer to a property)
+       sealed class MissingProperty : PropertyInfo
+       {
+               private readonly Type declaringType;
+               private readonly string name;
+               private readonly PropertySignature signature;
+
+               internal MissingProperty(Type declaringType, string name, PropertySignature signature)
+               {
+                       this.declaringType = declaringType;
+                       this.name = name;
+                       this.signature = signature;
+               }
+
+               public override PropertyAttributes Attributes
+               {
+                       get { throw new MissingMemberException(this); }
+               }
+
+               public override bool CanRead
+               {
+                       get { throw new MissingMemberException(this); }
+               }
+
+               public override bool CanWrite
+               {
+                       get { throw new MissingMemberException(this); }
+               }
+
+               public override MethodInfo GetGetMethod(bool nonPublic)
                {
                        throw new MissingMemberException(this);
                }
 
-               public override Type[][] __GetGenericArgumentsRequiredCustomModifiers()
+               public override MethodInfo GetSetMethod(bool nonPublic)
                {
                        throw new MissingMemberException(this);
                }
 
-               public override Type[][] __GetGenericArgumentsOptionalCustomModifiers()
+               public override MethodInfo[] GetAccessors(bool nonPublic)
                {
                        throw new MissingMemberException(this);
                }
 
-               public override StructLayoutAttribute StructLayoutAttribute
+               public override object GetRawConstantValue()
+               {
+                       throw new MissingMemberException(this);
+               }
+
+               internal override bool IsPublic
                {
                        get { throw new MissingMemberException(this); }
                }
 
-               public override bool IsGenericType
+               internal override bool IsNonPrivate
                {
                        get { throw new MissingMemberException(this); }
                }
 
-               public override bool IsGenericTypeDefinition
+               internal override bool IsStatic
                {
                        get { throw new MissingMemberException(this); }
                }
 
-               internal override IList<CustomAttributeData> GetCustomAttributesData(Type attributeType)
+               internal override PropertySignature PropertySignature
                {
-                       throw new MissingMemberException(this);
+                       get { return signature; }
                }
 
-               internal override Type BindTypeParameters(IGenericBinder binder)
+               public override string Name
                {
-                       return this;
+                       get { return name; }
+               }
+
+               public override Type DeclaringType
+               {
+                       get { return declaringType; }
+               }
+
+               public override Module Module
+               {
+                       get { return declaringType.Module; }
                }
        }
 }