[System] Process.WaitForExit now triggers event Exited.
[mono.git] / mcs / class / System / System.CodeDom / CodeTypeDeclaration.cs
1 //
2 // System.CodeDom CodeTypeDeclaration Class implementation
3 //
4 // Author:
5 //   Sean MacIsaac (macisaac@ximian.com)
6 //   Daniel Stodden (stodden@in.tum.de)
7 //   Marek Safar (marek.safar@seznam.cz)
8 //
9 // (C) 2001 Ximian, Inc.
10 //
11
12 //
13 // Permission is hereby granted, free of charge, to any person obtaining
14 // a copy of this software and associated documentation files (the
15 // "Software"), to deal in the Software without restriction, including
16 // without limitation the rights to use, copy, modify, merge, publish,
17 // distribute, sublicense, and/or sell copies of the Software, and to
18 // permit persons to whom the Software is furnished to do so, subject to
19 // the following conditions:
20 // 
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
23 // 
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 //
32
33 using System.Runtime.InteropServices;
34 using System.Reflection;
35
36 namespace System.CodeDom
37 {
38         [Serializable]
39         [ClassInterface(ClassInterfaceType.AutoDispatch)]
40         [ComVisible(true)]
41         public class CodeTypeDeclaration
42                 : CodeTypeMember
43         {
44                 private CodeTypeReferenceCollection baseTypes;
45                 private CodeTypeMemberCollection members;
46                 private TypeAttributes attributes = TypeAttributes.Public;
47                 private bool isEnum;
48                 private bool isStruct;
49                 //int populated;
50
51                 bool isPartial;
52                 CodeTypeParameterCollection typeParameters;
53
54                 //
55                 // Constructors
56                 //
57
58                 public CodeTypeDeclaration()
59                 {
60                 }
61                 
62                 public CodeTypeDeclaration( string name )
63                 {
64                         this.Name = name;
65                 }
66
67                 /* by default, it's a class */
68
69                 //
70                 // Properties
71                 //
72                 public CodeTypeReferenceCollection BaseTypes {
73                         get {
74                                 if ( baseTypes == null ) {
75                                         baseTypes = new CodeTypeReferenceCollection();
76                                         if ( PopulateBaseTypes != null )
77                                                 PopulateBaseTypes( this, EventArgs.Empty );
78                                 }
79                                 return baseTypes;
80                         }
81                 }
82
83                 public bool IsClass {
84                         get {
85                                 if ( (attributes & TypeAttributes.Interface) != 0 )
86                                         return false;
87                                 if ( isEnum )
88                                         return false;
89                                 if ( isStruct )
90                                         return false;
91                                 return true;
92                         }
93                         set {
94                                 if ( value ) {
95                                         attributes &= ~TypeAttributes.Interface;
96                                         isEnum = false;
97                                         isStruct = false;
98                                 }
99                         }
100                 }
101                 
102                 public bool IsEnum {
103                         get {
104                                 return isEnum;
105                         }
106                         set {
107                                 if ( value ) {
108                                         attributes &= ~TypeAttributes.Interface;
109                                         isEnum = true;
110                                         isStruct = false;
111                                 }
112                         }
113                 }
114
115                 public bool IsInterface {
116                         get {
117                                 return (attributes & TypeAttributes.Interface) != 0;
118                         }
119                         set {
120                                 if ( value ) {
121                                         attributes |= TypeAttributes.Interface;
122                                         isEnum = false;
123                                         isStruct = false;
124                                 }
125                         }
126                 }
127
128                 public bool IsStruct {
129                         get {
130                                 return isStruct;
131                         }
132                         set {
133                                 if ( value ) {
134                                         attributes &= ~TypeAttributes.Interface;
135                                         isEnum = false;
136                                         isStruct = true;
137                                 }
138                         }
139                 }
140
141                 public CodeTypeMemberCollection Members {
142                         get {
143                                 if ( members == null ) {
144                                         members = new CodeTypeMemberCollection();
145                                         if ( PopulateMembers != null )
146                                                 PopulateMembers( this, EventArgs.Empty );
147                                 }
148                                 return members;
149                         }
150                 }
151
152                 public TypeAttributes TypeAttributes {
153                         get {
154                                 return attributes;
155                         }
156                         set {
157                                 attributes = value;
158 #if FALSE
159                                 /* MS does not seem to do this, so don't I */
160                                 if ( (attributes & TypeAttributes.Interface) != 0 ) {
161                                         isEnum = false;
162                                         isStruct = false;
163                                 }
164 #endif
165                         }
166                 }
167
168                 public bool IsPartial {
169                         get {
170                                 return isPartial;
171                         }
172                         set {
173                                 isPartial = value;
174                         }
175                 }
176
177                 [ComVisible (false)]
178                 public CodeTypeParameterCollection TypeParameters {
179                         get {
180                                 if (typeParameters == null)
181                                         typeParameters = new CodeTypeParameterCollection ();
182                                 return typeParameters;
183                         }
184                 }
185
186                 //
187                 // Events
188                 // 
189                 public event EventHandler PopulateBaseTypes;
190
191                 public event EventHandler PopulateMembers;
192         }
193 }