3 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
5 // Permission is hereby granted, free of charge, to any person obtaining
6 // a copy of this software and associated documentation files (the
7 // "Software"), to deal in the Software without restriction, including
8 // without limitation the rights to use, copy, modify, merge, publish,
9 // distribute, sublicense, and/or sell copies of the Software, and to
10 // permit persons to whom the Software is furnished to do so, subject to
11 // the following conditions:
13 // The above copyright notice and this permission notice shall be
14 // included in all copies or substantial portions of the Software.
16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 // System.Reflection.Emit/EnumBuilder.cs
29 // Paolo Molaro (lupus@ximian.com)
31 // (C) 2001 Ximian, Inc. http://www.ximian.com
35 using System.Reflection;
36 using System.Reflection.Emit;
37 using System.Globalization;
38 using System.Runtime.CompilerServices;
40 namespace System.Reflection.Emit {
41 public sealed class EnumBuilder : Type {
42 private CustomAttributeBuilder[] cattrs;
43 private TypeBuilder _tb;
44 private FieldBuilder _underlyingField;
45 private Type _underlyingType;
47 internal EnumBuilder (ModuleBuilder mb, string name, TypeAttributes visibility, Type underlyingType)
49 _tb = new TypeBuilder (mb, name, (visibility | TypeAttributes.Sealed),
50 typeof(Enum), null, PackingSize.Unspecified, 0, null);
51 _underlyingType = underlyingType;
52 _underlyingField = _tb.DefineField ("value__", underlyingType,
53 (FieldAttributes.SpecialName | FieldAttributes.Private));
56 public override Assembly Assembly {
62 public override string AssemblyQualifiedName {
64 return _tb.AssemblyQualifiedName;
68 public override Type BaseType {
74 public override Type DeclaringType {
76 return _tb.DeclaringType;
80 public override string FullName {
86 public override Guid GUID {
92 public override Module Module {
98 public override string Name {
104 public override string Namespace {
106 return _tb.Namespace;
110 public override Type ReflectedType {
112 return _tb.ReflectedType;
116 public override RuntimeTypeHandle TypeHandle {
118 return _tb.TypeHandle;
122 public TypeToken TypeToken {
124 return _tb.TypeToken;
128 public FieldBuilder UnderlyingField {
130 return _underlyingField;
134 public override Type UnderlyingSystemType {
136 return _underlyingType;
140 public Type CreateType ()
142 return _tb.CreateType ();
145 public FieldBuilder DefineLiteral (string literalName, object literalValue)
147 FieldBuilder fieldBuilder = _tb.DefineField (literalName,
148 _underlyingType, (FieldAttributes.Literal |
149 (FieldAttributes.Static | FieldAttributes.Public)));
150 fieldBuilder.SetConstant (literalValue);
154 protected override TypeAttributes GetAttributeFlagsImpl ()
159 protected override ConstructorInfo GetConstructorImpl (
160 BindingFlags bindingAttr, Binder binder, CallingConventions cc,
161 Type[] types, ParameterModifier[] modifiers)
163 return _tb.GetConstructor (bindingAttr, binder, cc, types,
167 public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
169 return _tb.GetConstructors (bindingAttr);
172 public override object[] GetCustomAttributes(bool inherit)
174 return _tb.GetCustomAttributes (inherit);
177 public override object[] GetCustomAttributes(Type attributeType, bool inherit)
179 return _tb.GetCustomAttributes (attributeType, inherit);
182 public override Type GetElementType()
184 return _tb.GetElementType ();
187 public override EventInfo GetEvent( string name, BindingFlags bindingAttr)
189 return _tb.GetEvent (name, bindingAttr);
192 public override EventInfo[] GetEvents()
194 return _tb.GetEvents ();
197 public override EventInfo[] GetEvents( BindingFlags bindingAttr)
199 return _tb.GetEvents (bindingAttr);
202 public override FieldInfo GetField( string name, BindingFlags bindingAttr)
204 return _tb.GetField (name, bindingAttr);
207 public override FieldInfo[] GetFields( BindingFlags bindingAttr)
209 return _tb.GetFields (bindingAttr);
212 public override Type GetInterface (string name, bool ignoreCase)
214 return _tb.GetInterface (name, ignoreCase);
217 public override InterfaceMapping GetInterfaceMap (Type interfaceType)
219 return _tb.GetInterfaceMap (interfaceType);
222 public override Type[] GetInterfaces()
224 return _tb.GetInterfaces ();
227 public override MemberInfo[] GetMember (string name, MemberTypes type, BindingFlags bindingAttr)
229 return _tb.GetMember (name, type, bindingAttr);
232 public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
234 return _tb.GetMembers (bindingAttr);
237 protected override MethodInfo GetMethodImpl (
238 string name, BindingFlags bindingAttr, Binder binder,
239 CallingConventions callConvention, Type[] types,
240 ParameterModifier[] modifiers)
243 return _tb.GetMethod (name, bindingAttr);
246 return _tb.GetMethod (name, bindingAttr, binder,
247 callConvention, types, modifiers);
250 public override MethodInfo[] GetMethods (BindingFlags bindingAttr)
252 return _tb.GetMethods (bindingAttr);
255 public override Type GetNestedType (string name, BindingFlags bindingAttr)
257 return _tb.GetNestedType (name, bindingAttr);
260 public override Type[] GetNestedTypes (BindingFlags bindingAttr)
262 return _tb.GetNestedTypes (bindingAttr);
265 public override PropertyInfo[] GetProperties (BindingFlags bindingAttr)
267 return _tb.GetProperties (bindingAttr);
270 protected override PropertyInfo GetPropertyImpl (
271 string name, BindingFlags bindingAttr, Binder binder,
272 Type returnType, Type[] types,
273 ParameterModifier[] modifiers)
275 throw CreateNotSupportedException ();
278 protected override bool HasElementTypeImpl ()
280 return _tb.HasElementType;
283 public override object InvokeMember (
284 string name, BindingFlags invokeAttr, Binder binder,
285 object target, object[] args,
286 ParameterModifier[] modifiers, CultureInfo culture,
287 string[] namedParameters)
289 return _tb.InvokeMember (name, invokeAttr, binder, target,
290 args, modifiers, culture, namedParameters);
293 protected override bool IsArrayImpl()
298 protected override bool IsByRefImpl()
303 protected override bool IsCOMObjectImpl()
308 protected override bool IsPointerImpl()
313 protected override bool IsPrimitiveImpl()
318 protected override bool IsValueTypeImpl()
323 public override bool IsDefined (Type attributeType, bool inherit)
325 return _tb.IsDefined (attributeType, inherit);
328 public void SetCustomAttribute (CustomAttributeBuilder customBuilder)
330 if (cattrs != null) {
331 CustomAttributeBuilder[] new_array = new CustomAttributeBuilder [cattrs.Length + 1];
332 cattrs.CopyTo (new_array, 0);
333 new_array [cattrs.Length] = customBuilder;
336 cattrs = new CustomAttributeBuilder [1];
337 cattrs [0] = customBuilder;
341 public void SetCustomAttribute (ConstructorInfo con, byte[] binaryAttribute)
343 SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute));
346 #if NET_2_0 || BOOTSTRAP_NET_2_0
348 public override Type[] GetGenericArguments ()
350 throw new NotImplementedException ();
354 public override bool HasGenericArguments {
356 throw new NotImplementedException ();
361 public override bool ContainsGenericParameters {
363 throw new NotImplementedException ();
368 public override bool IsGenericParameter {
370 throw new NotImplementedException ();
375 public override int GenericParameterPosition {
377 throw new NotImplementedException ();
382 public override MethodInfo DeclaringMethod {
384 throw new NotImplementedException ();
389 private Exception CreateNotSupportedException ()
391 return new NotSupportedException ("The invoked member is not supported in a dynamic module.");