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
;
39 using System
.Runtime
.InteropServices
;
41 namespace System
.Reflection
.Emit
{
44 [ComDefaultInterface (typeof (_EnumBuilder
))]
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 ()
67 public override Assembly Assembly
{
73 public override string AssemblyQualifiedName
{
75 return _tb
.AssemblyQualifiedName
;
79 public override Type BaseType
{
85 public override Type DeclaringType
{
87 return _tb
.DeclaringType
;
91 public override string FullName
{
97 public override Guid GUID
{
103 public override Module Module
{
109 public override string Name
{
115 public override string Namespace
{
117 return _tb
.Namespace
;
121 public override Type ReflectedType
{
123 return _tb
.ReflectedType
;
127 public override RuntimeTypeHandle TypeHandle
{
129 return _tb
.TypeHandle
;
133 public TypeToken TypeToken
{
135 return _tb
.TypeToken
;
139 public FieldBuilder UnderlyingField
{
141 return _underlyingField
;
145 public override Type UnderlyingSystemType
{
147 return _underlyingType
;
151 public Type
CreateType ()
153 Type res
= _tb
.CreateType ();
157 [MethodImplAttribute(MethodImplOptions
.InternalCall
)]
158 private extern void setup_enum_type (Type t
);
160 public FieldBuilder
DefineLiteral (string literalName
, object literalValue
)
163 Type fieldType
= this;
165 Type fieldType
= _underlyingType
;
167 FieldBuilder fieldBuilder
= _tb
.DefineField (literalName
,
168 fieldType
, (FieldAttributes
.Literal
|
169 (FieldAttributes
.Static
| FieldAttributes
.Public
)));
170 fieldBuilder
.SetConstant (literalValue
);
174 protected override TypeAttributes
GetAttributeFlagsImpl ()
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
,
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
)
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()
318 protected override bool IsByRefImpl()
323 protected override bool IsCOMObjectImpl()
328 protected override bool IsPointerImpl()
333 protected override bool IsPrimitiveImpl()
338 protected override bool IsValueTypeImpl()
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
);
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
{
371 throw new NotImplementedException ();
376 public override bool IsGenericParameter
{
378 throw new NotImplementedException ();
383 public override int GenericParameterPosition
{
385 throw new NotImplementedException ();
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 ();