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 TypeBuilder _tb;
43 private FieldBuilder _underlyingField;
44 private Type _underlyingType;
46 internal EnumBuilder (ModuleBuilder mb, string name, TypeAttributes visibility, Type underlyingType)
48 _tb = new TypeBuilder (mb, name, (visibility | TypeAttributes.Sealed),
49 typeof(Enum), null, PackingSize.Unspecified, 0, null);
50 _underlyingType = underlyingType;
51 _underlyingField = _tb.DefineField ("value__", underlyingType,
52 (FieldAttributes.SpecialName | FieldAttributes.Private));
53 setup_enum_type (_tb);
56 internal TypeBuilder GetTypeBuilder ()
61 public override Assembly Assembly {
67 public override string AssemblyQualifiedName {
69 return _tb.AssemblyQualifiedName;
73 public override Type BaseType {
79 public override Type DeclaringType {
81 return _tb.DeclaringType;
85 public override string FullName {
91 public override Guid GUID {
97 public override Module Module {
103 public override string Name {
109 public override string Namespace {
111 return _tb.Namespace;
115 public override Type ReflectedType {
117 return _tb.ReflectedType;
121 public override RuntimeTypeHandle TypeHandle {
123 return _tb.TypeHandle;
127 public TypeToken TypeToken {
129 return _tb.TypeToken;
133 public FieldBuilder UnderlyingField {
135 return _underlyingField;
139 public override Type UnderlyingSystemType {
141 return _underlyingType;
145 public Type CreateType ()
147 Type res = _tb.CreateType ();
151 [MethodImplAttribute(MethodImplOptions.InternalCall)]
152 private extern void setup_enum_type (Type t);
154 public FieldBuilder DefineLiteral (string literalName, object literalValue)
156 FieldBuilder fieldBuilder = _tb.DefineField (literalName,
157 _underlyingType, (FieldAttributes.Literal |
158 (FieldAttributes.Static | FieldAttributes.Public)));
159 fieldBuilder.SetConstant (literalValue);
163 protected override TypeAttributes GetAttributeFlagsImpl ()
168 protected override ConstructorInfo GetConstructorImpl (
169 BindingFlags bindingAttr, Binder binder, CallingConventions cc,
170 Type[] types, ParameterModifier[] modifiers)
172 return _tb.GetConstructor (bindingAttr, binder, cc, types,
176 public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
178 return _tb.GetConstructors (bindingAttr);
181 public override object[] GetCustomAttributes(bool inherit)
183 return _tb.GetCustomAttributes (inherit);
186 public override object[] GetCustomAttributes(Type attributeType, bool inherit)
188 return _tb.GetCustomAttributes (attributeType, inherit);
191 public override Type GetElementType()
193 return _tb.GetElementType ();
196 public override EventInfo GetEvent( string name, BindingFlags bindingAttr)
198 return _tb.GetEvent (name, bindingAttr);
201 public override EventInfo[] GetEvents()
203 return _tb.GetEvents ();
206 public override EventInfo[] GetEvents( BindingFlags bindingAttr)
208 return _tb.GetEvents (bindingAttr);
211 public override FieldInfo GetField( string name, BindingFlags bindingAttr)
213 return _tb.GetField (name, bindingAttr);
216 public override FieldInfo[] GetFields( BindingFlags bindingAttr)
218 return _tb.GetFields (bindingAttr);
221 public override Type GetInterface (string name, bool ignoreCase)
223 return _tb.GetInterface (name, ignoreCase);
226 public override InterfaceMapping GetInterfaceMap (Type interfaceType)
228 return _tb.GetInterfaceMap (interfaceType);
231 public override Type[] GetInterfaces()
233 return _tb.GetInterfaces ();
236 public override MemberInfo[] GetMember (string name, MemberTypes type, BindingFlags bindingAttr)
238 return _tb.GetMember (name, type, bindingAttr);
241 public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
243 return _tb.GetMembers (bindingAttr);
246 protected override MethodInfo GetMethodImpl (
247 string name, BindingFlags bindingAttr, Binder binder,
248 CallingConventions callConvention, Type[] types,
249 ParameterModifier[] modifiers)
252 return _tb.GetMethod (name, bindingAttr);
255 return _tb.GetMethod (name, bindingAttr, binder,
256 callConvention, types, modifiers);
259 public override MethodInfo[] GetMethods (BindingFlags bindingAttr)
261 return _tb.GetMethods (bindingAttr);
264 public override Type GetNestedType (string name, BindingFlags bindingAttr)
266 return _tb.GetNestedType (name, bindingAttr);
269 public override Type[] GetNestedTypes (BindingFlags bindingAttr)
271 return _tb.GetNestedTypes (bindingAttr);
274 public override PropertyInfo[] GetProperties (BindingFlags bindingAttr)
276 return _tb.GetProperties (bindingAttr);
279 protected override PropertyInfo GetPropertyImpl (
280 string name, BindingFlags bindingAttr, Binder binder,
281 Type returnType, Type[] types,
282 ParameterModifier[] modifiers)
284 throw CreateNotSupportedException ();
287 protected override bool HasElementTypeImpl ()
289 return _tb.HasElementType;
292 public override object InvokeMember (
293 string name, BindingFlags invokeAttr, Binder binder,
294 object target, object[] args,
295 ParameterModifier[] modifiers, CultureInfo culture,
296 string[] namedParameters)
298 return _tb.InvokeMember (name, invokeAttr, binder, target,
299 args, modifiers, culture, namedParameters);
302 protected override bool IsArrayImpl()
307 protected override bool IsByRefImpl()
312 protected override bool IsCOMObjectImpl()
317 protected override bool IsPointerImpl()
322 protected override bool IsPrimitiveImpl()
327 protected override bool IsValueTypeImpl()
332 public override bool IsDefined (Type attributeType, bool inherit)
334 return _tb.IsDefined (attributeType, inherit);
337 public void SetCustomAttribute (CustomAttributeBuilder customBuilder)
339 _tb.SetCustomAttribute (customBuilder);
342 public void SetCustomAttribute (ConstructorInfo con, byte[] binaryAttribute)
344 SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute));
347 #if NET_2_0 || BOOTSTRAP_NET_2_0
349 public override Type[] GetGenericArguments ()
351 throw new NotImplementedException ();
355 public override bool HasGenericArguments {
357 throw new NotImplementedException ();
362 public override bool ContainsGenericParameters {
364 throw new NotImplementedException ();
369 public override bool IsGenericParameter {
371 throw new NotImplementedException ();
376 public override int GenericParameterPosition {
378 throw new NotImplementedException ();
383 public override MethodInfo DeclaringMethod {
385 throw new NotImplementedException ();
390 private Exception CreateNotSupportedException ()
392 return new NotSupportedException ("The invoked member is not supported in a dynamic module.");