Check for missing Assembly.Location
[mono.git] / mcs / class / System / System.CodeDom / CodeArrayCreateExpression.cs
1 //
2 // System.CodeDom CodeArrayCreateExpression Class implementation
3 //
4 // Author:
5 //   Miguel de Icaza (miguel@ximian.com)
6 //   Daniel Stodden (stodden@in.tum.de)
7 //
8 // (C) 2001 Ximian, Inc.
9 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 // 
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 // 
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30
31 using System.Runtime.InteropServices;
32
33 namespace System.CodeDom {
34
35         [Serializable]
36         [ClassInterface(ClassInterfaceType.AutoDispatch)]
37         [ComVisible(true)]
38         public class CodeArrayCreateExpression
39                 : CodeExpression 
40         {
41                 private CodeTypeReference createType;
42                 private CodeExpressionCollection initializers;
43                 private CodeExpression sizeExpression;
44                 private int size;
45                 
46                 //
47                 // Constructors
48                 //
49                 public CodeArrayCreateExpression ()
50                 {
51                 }
52
53                 public CodeArrayCreateExpression (CodeTypeReference createType, 
54                                                   CodeExpression size )
55                 {
56                         this.createType = createType;
57                         this.sizeExpression = size;
58                 }
59
60                 public CodeArrayCreateExpression (CodeTypeReference createType, 
61                                                   params CodeExpression[] initializers )
62                 {
63                         this.createType = createType;
64                         this.Initializers.AddRange( initializers );
65                 }
66
67                 public CodeArrayCreateExpression (CodeTypeReference createType, 
68                                                   int size)
69                 {
70                         this.createType = createType;
71                         this.size = size;
72                 }
73
74
75                 public CodeArrayCreateExpression (string createType, 
76                                                   CodeExpression size)
77                 {
78                         this.createType = new CodeTypeReference( createType );
79                         this.sizeExpression = size;
80                 }
81
82                 public CodeArrayCreateExpression (string createType, 
83                                                   params CodeExpression[] initializers)
84                 {
85                         this.createType = new CodeTypeReference( createType );
86                         this.Initializers.AddRange( initializers );
87                 }
88
89                 public CodeArrayCreateExpression (string createType, 
90                                                   int size)
91                 {
92                         this.createType = new CodeTypeReference( createType );
93                         this.size = size;
94                 }
95
96
97                 public CodeArrayCreateExpression (Type createType, 
98                                                   CodeExpression size)
99                 {
100                         this.createType = new CodeTypeReference( createType );
101                         this.sizeExpression = size;
102                 }
103                         
104                 public CodeArrayCreateExpression (Type createType, 
105                                                   params CodeExpression[] initializers)
106                 {
107                         this.createType = new CodeTypeReference( createType );
108                         this.Initializers.AddRange( initializers );
109                 }
110
111                 public CodeArrayCreateExpression (Type createType, 
112                                                   int size)
113                 {
114                         this.createType = new CodeTypeReference( createType );
115                         this.size = size;
116                 }
117
118                 //
119                 // Properties
120                 //
121                 public CodeTypeReference CreateType {
122                         get {
123                                 if (createType == null) {
124                                         createType = new CodeTypeReference (typeof (void));
125                                 }
126                                 return createType;
127                         }
128                         set {
129                                 createType = value;
130                         }
131                 }
132
133                 public CodeExpressionCollection Initializers {
134                         get {
135                                 if ( initializers == null )
136                                         initializers = new CodeExpressionCollection();
137                                         
138                                 return initializers;
139                         }
140                 }
141
142                 public CodeExpression SizeExpression {
143                         get {
144                                 return sizeExpression;
145                         }
146                         set {
147                                 sizeExpression = value;
148                         }
149                 }
150
151                 public int Size {
152                         get {
153                                 return size;
154                         }
155                         set {
156                                 size = value;
157                                 // NOTE: Setting Size in ms.Net does
158                                 // not supersede SizeExpression
159                                 // values. Instead, the CodeGenerator
160                                 // seems to always prefer
161                                 // SizeExpression if set to a value !=
162                                 // null.
163                         }
164                 }
165
166                 //
167                 // ICodeDomVisitor method
168                 //
169                 internal override void Accept (ICodeDomVisitor visitor)
170                 {
171                         visitor.Visit (this);
172                 }
173         }
174 }
175