2009-12-16 Rodrigo Kumpera <rkumpera@novell.com>
[mono.git] / mcs / class / corlib / System.Reflection.Emit / FieldOnTypeBuilderInst.cs
1 //
2 // System.Reflection.Emit/FieldOnTypeBuilderInst.cs
3 //
4 // Author:
5 //   Zoltan Varga (vargaz@gmail.com)
6 //
7 //
8 // Copyright (C) 2008 Novell, Inc (http://www.novell.com)
9 //
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
17 // 
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
20 // 
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 //
29
30 using System;
31 using System.Globalization;
32 using System.Reflection;
33
34 namespace System.Reflection.Emit
35 {
36         /*
37          * This class represents a field of an instantiation of a generic type builder.
38          */
39         internal class FieldOnTypeBuilderInst : FieldInfo
40         {
41                 #region Keep in sync with object-internals.h
42                 internal MonoGenericClass instantiation;
43                 internal FieldInfo fb;
44                 #endregion
45
46                 public FieldOnTypeBuilderInst (MonoGenericClass instantiation, FieldInfo fb) {
47                         this.instantiation = instantiation;
48                         this.fb = fb;
49                 }
50
51                 //
52                 // MemberInfo members
53                 //
54                 
55                 public override Type DeclaringType {
56                         get {
57                                 return instantiation;
58                         }
59                 }
60
61                 public override string Name {
62                         get {
63                                 return fb.Name;
64                         }
65                 }
66
67                 public override Type ReflectedType {
68                         get {
69                                 return instantiation;
70                         }
71                 }
72
73                 public override bool IsDefined (Type attributeType, bool inherit)
74                 {
75                         if (!instantiation.IsCompilerContext)
76                                 throw new NotSupportedException ();
77                         return fb.IsDefined (attributeType, inherit);
78                 }
79
80                 public override object [] GetCustomAttributes (bool inherit)
81                 {
82                         if (!instantiation.IsCompilerContext)
83                                 throw new NotSupportedException ();
84                         return fb.GetCustomAttributes (inherit);
85                 }
86
87                 public override object [] GetCustomAttributes (Type attributeType, bool inherit)
88                 {
89                         if (!instantiation.IsCompilerContext)
90                                 throw new NotSupportedException ();
91                         return fb.GetCustomAttributes (attributeType, inherit);
92                 }
93
94                 public override string ToString ()
95                 {
96                         if (!instantiation.IsCompilerContext)
97                                 return fb.FieldType.ToString () + " " + Name;
98                         return FieldType.ToString () + " " + Name;
99                 }
100                 //
101                 // FieldInfo members
102                 //
103
104                 public override FieldAttributes Attributes {
105                         get {
106                                 return fb.Attributes;
107                         }
108                 }
109
110                 public override RuntimeFieldHandle FieldHandle {
111                         get {
112                                 throw new NotSupportedException ();
113                         }
114                 }
115
116                 public override int MetadataToken {
117                         get {
118                                 if (!instantiation.IsCompilerContext)
119                                         throw new InvalidOperationException ();
120                                 return fb.MetadataToken;
121                         } 
122                 }
123
124                 public override Type FieldType {
125                         get {
126                                 if (!instantiation.IsCompilerContext)
127                                         throw new NotSupportedException ();
128                                 return instantiation.InflateType (fb.FieldType);
129                         }
130                 }
131
132                 public override object GetValue(object obj) {
133                         throw new NotSupportedException ();
134                 }
135
136                 public override void SetValue (object obj, object value, BindingFlags invokeAttr, Binder binder, CultureInfo culture) {
137                         throw new NotSupportedException ();
138                 }
139         }
140 }