In Test/System.Windows.Forms:
[mono-project.git] / mcs / class / corlib / System.Reflection.Emit / EnumBuilder.cs
blobada68401f881acaa32d4812c03a664042ce89fc0
2 //
3 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
4 //
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:
12 //
13 // The above copyright notice and this permission notice shall be
14 // included in all copies or substantial portions of the Software.
15 //
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
28 // Author:
29 // Paolo Molaro (lupus@ximian.com)
31 // (C) 2001 Ximian, Inc. http://www.ximian.com
34 using System;
35 using System.Reflection;
36 using System.Reflection.Emit;
37 using System.Globalization;
38 using System.Runtime.CompilerServices;
39 using System.Runtime.InteropServices;
41 namespace System.Reflection.Emit {
42 #if NET_2_0
43 [ComVisible (true)]
44 [ComDefaultInterface (typeof (_EnumBuilder))]
45 #endif
46 [ClassInterface (ClassInterfaceType.None)]
47 public sealed class EnumBuilder : Type, _EnumBuilder {
48 private TypeBuilder _tb;
49 private FieldBuilder _underlyingField;
50 private Type _underlyingType;
52 internal EnumBuilder (ModuleBuilder mb, string name, TypeAttributes visibility, Type underlyingType)
54 _tb = new TypeBuilder (mb, name, (visibility | TypeAttributes.Sealed),
55 typeof(Enum), null, PackingSize.Unspecified, 0, null);
56 _underlyingType = underlyingType;
57 _underlyingField = _tb.DefineField ("value__", underlyingType,
58 (FieldAttributes.SpecialName | FieldAttributes.Private | FieldAttributes.RTSpecialName));
59 setup_enum_type (_tb);
62 internal TypeBuilder GetTypeBuilder ()
64 return _tb;
67 public override Assembly Assembly {
68 get {
69 return _tb.Assembly;
73 public override string AssemblyQualifiedName {
74 get {
75 return _tb.AssemblyQualifiedName;
79 public override Type BaseType {
80 get {
81 return _tb.BaseType;
85 public override Type DeclaringType {
86 get {
87 return _tb.DeclaringType;
91 public override string FullName {
92 get {
93 return _tb.FullName;
97 public override Guid GUID {
98 get {
99 return _tb.GUID;
103 public override Module Module {
104 get {
105 return _tb.Module;
109 public override string Name {
110 get {
111 return _tb.Name;
115 public override string Namespace {
116 get {
117 return _tb.Namespace;
121 public override Type ReflectedType {
122 get {
123 return _tb.ReflectedType;
127 public override RuntimeTypeHandle TypeHandle {
128 get {
129 return _tb.TypeHandle;
133 public TypeToken TypeToken {
134 get {
135 return _tb.TypeToken;
139 public FieldBuilder UnderlyingField {
140 get {
141 return _underlyingField;
145 public override Type UnderlyingSystemType {
146 get {
147 return _underlyingType;
151 public Type CreateType ()
153 Type res = _tb.CreateType ();
154 return res;
157 [MethodImplAttribute(MethodImplOptions.InternalCall)]
158 private extern void setup_enum_type (Type t);
160 public FieldBuilder DefineLiteral (string literalName, object literalValue)
162 #if NET_2_0
163 Type fieldType = this;
164 #else
165 Type fieldType = _underlyingType;
166 #endif
167 FieldBuilder fieldBuilder = _tb.DefineField (literalName,
168 fieldType, (FieldAttributes.Literal |
169 (FieldAttributes.Static | FieldAttributes.Public)));
170 fieldBuilder.SetConstant (literalValue);
171 return fieldBuilder;
174 protected override TypeAttributes GetAttributeFlagsImpl ()
176 return _tb.attrs;
179 protected override ConstructorInfo GetConstructorImpl (
180 BindingFlags bindingAttr, Binder binder, CallingConventions cc,
181 Type[] types, ParameterModifier[] modifiers)
183 return _tb.GetConstructor (bindingAttr, binder, cc, types,
184 modifiers);
187 public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
189 return _tb.GetConstructors (bindingAttr);
192 public override object[] GetCustomAttributes(bool inherit)
194 return _tb.GetCustomAttributes (inherit);
197 public override object[] GetCustomAttributes(Type attributeType, bool inherit)
199 return _tb.GetCustomAttributes (attributeType, inherit);
202 public override Type GetElementType()
204 return _tb.GetElementType ();
207 public override EventInfo GetEvent( string name, BindingFlags bindingAttr)
209 return _tb.GetEvent (name, bindingAttr);
212 public override EventInfo[] GetEvents()
214 return _tb.GetEvents ();
217 public override EventInfo[] GetEvents( BindingFlags bindingAttr)
219 return _tb.GetEvents (bindingAttr);
222 public override FieldInfo GetField( string name, BindingFlags bindingAttr)
224 return _tb.GetField (name, bindingAttr);
227 public override FieldInfo[] GetFields( BindingFlags bindingAttr)
229 return _tb.GetFields (bindingAttr);
232 public override Type GetInterface (string name, bool ignoreCase)
234 return _tb.GetInterface (name, ignoreCase);
237 public override InterfaceMapping GetInterfaceMap (Type interfaceType)
239 return _tb.GetInterfaceMap (interfaceType);
242 public override Type[] GetInterfaces()
244 return _tb.GetInterfaces ();
247 public override MemberInfo[] GetMember (string name, MemberTypes type, BindingFlags bindingAttr)
249 return _tb.GetMember (name, type, bindingAttr);
252 public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
254 return _tb.GetMembers (bindingAttr);
257 protected override MethodInfo GetMethodImpl (
258 string name, BindingFlags bindingAttr, Binder binder,
259 CallingConventions callConvention, Type[] types,
260 ParameterModifier[] modifiers)
262 if (types == null) {
263 return _tb.GetMethod (name, bindingAttr);
266 return _tb.GetMethod (name, bindingAttr, binder,
267 callConvention, types, modifiers);
270 public override MethodInfo[] GetMethods (BindingFlags bindingAttr)
272 return _tb.GetMethods (bindingAttr);
275 public override Type GetNestedType (string name, BindingFlags bindingAttr)
277 return _tb.GetNestedType (name, bindingAttr);
280 public override Type[] GetNestedTypes (BindingFlags bindingAttr)
282 return _tb.GetNestedTypes (bindingAttr);
285 public override PropertyInfo[] GetProperties (BindingFlags bindingAttr)
287 return _tb.GetProperties (bindingAttr);
290 protected override PropertyInfo GetPropertyImpl (
291 string name, BindingFlags bindingAttr, Binder binder,
292 Type returnType, Type[] types,
293 ParameterModifier[] modifiers)
295 throw CreateNotSupportedException ();
298 protected override bool HasElementTypeImpl ()
300 return _tb.HasElementType;
303 public override object InvokeMember (
304 string name, BindingFlags invokeAttr, Binder binder,
305 object target, object[] args,
306 ParameterModifier[] modifiers, CultureInfo culture,
307 string[] namedParameters)
309 return _tb.InvokeMember (name, invokeAttr, binder, target,
310 args, modifiers, culture, namedParameters);
313 protected override bool IsArrayImpl()
315 return false;
318 protected override bool IsByRefImpl()
320 return false;
323 protected override bool IsCOMObjectImpl()
325 return false;
328 protected override bool IsPointerImpl()
330 return false;
333 protected override bool IsPrimitiveImpl()
335 return false;
338 protected override bool IsValueTypeImpl()
340 return true;
343 public override bool IsDefined (Type attributeType, bool inherit)
345 return _tb.IsDefined (attributeType, inherit);
348 public void SetCustomAttribute (CustomAttributeBuilder customBuilder)
350 _tb.SetCustomAttribute (customBuilder);
353 #if NET_2_0
354 [ComVisible (true)]
355 #endif
356 public void SetCustomAttribute (ConstructorInfo con, byte[] binaryAttribute)
358 SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute));
361 #if NET_2_0 || BOOTSTRAP_NET_2_0
362 [MonoTODO("Not implemented")]
363 public override Type[] GetGenericArguments ()
365 throw new NotImplementedException ();
368 [MonoTODO("Not implemented")]
369 public override bool ContainsGenericParameters {
370 get {
371 throw new NotImplementedException ();
375 [MonoTODO]
376 public override bool IsGenericParameter {
377 get {
378 throw new NotImplementedException ();
382 [MonoTODO]
383 public override int GenericParameterPosition {
384 get {
385 throw new NotImplementedException ();
388 #endif
390 private Exception CreateNotSupportedException ()
392 return new NotSupportedException ("The invoked member is not supported in a dynamic module.");
395 void _EnumBuilder.GetIDsOfNames ([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId)
397 throw new NotImplementedException ();
400 void _EnumBuilder.GetTypeInfo (uint iTInfo, uint lcid, IntPtr ppTInfo)
402 throw new NotImplementedException ();
405 void _EnumBuilder.GetTypeInfoCount (out uint pcTInfo)
407 throw new NotImplementedException ();
410 void _EnumBuilder.Invoke (uint dispIdMember, [In] ref Guid riid, uint lcid, short wFlags, IntPtr pDispParams, IntPtr pVarResult, IntPtr pExcepInfo, IntPtr puArgErr)
412 throw new NotImplementedException ();