xref: /OpenGrok/opengrok-indexer/src/test/resources/analysis/csharp/sample.cs (revision eeb7e5b33d1bcc524fcc9d1d560447b044e286a4)
1*eeb7e5b3SAdam Hornáček /*
2*eeb7e5b3SAdam Hornáček PowerShell 6.0
3*eeb7e5b3SAdam Hornáček 
4*eeb7e5b3SAdam Hornáček Copyright (c) Microsoft Corporation. All rights reserved.
5*eeb7e5b3SAdam Hornáček 
6*eeb7e5b3SAdam Hornáček All rights reserved.
7*eeb7e5b3SAdam Hornáček 
8*eeb7e5b3SAdam Hornáček MIT License
9*eeb7e5b3SAdam Hornáček 
10*eeb7e5b3SAdam Hornáček Permission is hereby granted, free of charge, to any person obtaining a copy
11*eeb7e5b3SAdam Hornáček of this software and associated documentation files (the ""Software""), to deal
12*eeb7e5b3SAdam Hornáček in the Software without restriction, including without limitation the rights
13*eeb7e5b3SAdam Hornáček to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14*eeb7e5b3SAdam Hornáček copies of the Software, and to permit persons to whom the Software is
15*eeb7e5b3SAdam Hornáček furnished to do so, subject to the following conditions:
16*eeb7e5b3SAdam Hornáček 
17*eeb7e5b3SAdam Hornáček The above copyright notice and this permission notice shall be included in all
18*eeb7e5b3SAdam Hornáček copies or substantial portions of the Software.
19*eeb7e5b3SAdam Hornáček 
20*eeb7e5b3SAdam Hornáček THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21*eeb7e5b3SAdam Hornáček IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22*eeb7e5b3SAdam Hornáček FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23*eeb7e5b3SAdam Hornáček AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24*eeb7e5b3SAdam Hornáček LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25*eeb7e5b3SAdam Hornáček OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26*eeb7e5b3SAdam Hornáček SOFTWARE.
27*eeb7e5b3SAdam Hornáček */
28*eeb7e5b3SAdam Hornáček 
29*eeb7e5b3SAdam Hornáček /********************************************************************++
30*eeb7e5b3SAdam Hornáček Copyright (c) Microsoft Corporation. All rights reserved.
31*eeb7e5b3SAdam Hornáček --********************************************************************/
32*eeb7e5b3SAdam Hornáček 
33*eeb7e5b3SAdam Hornáček using System;
34*eeb7e5b3SAdam Hornáček using System.IO;
35*eeb7e5b3SAdam Hornáček using System.Management.Automation;
36*eeb7e5b3SAdam Hornáček using System.Xml;
37*eeb7e5b3SAdam Hornáček 
38*eeb7e5b3SAdam Hornáček 
39*eeb7e5b3SAdam Hornáček using Dbg = System.Management.Automation.Diagnostics;
40*eeb7e5b3SAdam Hornáček 
41*eeb7e5b3SAdam Hornáček 
42*eeb7e5b3SAdam Hornáček 
43*eeb7e5b3SAdam Hornáček namespace Microsoft.PowerShell
44*eeb7e5b3SAdam Hornáček {
45*eeb7e5b3SAdam Hornáček     /// <summary>
46*eeb7e5b3SAdam Hornáček     ///
47*eeb7e5b3SAdam Hornáček     /// Wraps Hitesh's xml serializer in such a way that it will select the proper serializer based on the data
48*eeb7e5b3SAdam Hornáček     /// format.
49*eeb7e5b3SAdam Hornáček     ///
50*eeb7e5b3SAdam Hornáček     /// </summary>
51*eeb7e5b3SAdam Hornáček 
52*eeb7e5b3SAdam Hornáček     internal class Serialization
53*eeb7e5b3SAdam Hornáček     {
54*eeb7e5b3SAdam Hornáček         /// <summary>
55*eeb7e5b3SAdam Hornáček         ///
56*eeb7e5b3SAdam Hornáček         /// Describes the format of the data streamed between minishells, e.g. the allowed arguments to the minishell
57*eeb7e5b3SAdam Hornáček         /// -outputformat and -inputformat command line parameters.
58*eeb7e5b3SAdam Hornáček         ///
59*eeb7e5b3SAdam Hornáček         /// </summary>
60*eeb7e5b3SAdam Hornáček 
61*eeb7e5b3SAdam Hornáček         internal enum DataFormat
62*eeb7e5b3SAdam Hornáček         {
63*eeb7e5b3SAdam Hornáček             /// <summary>
64*eeb7e5b3SAdam Hornáček             ///
65*eeb7e5b3SAdam Hornáček             /// text format -- i.e. stream text just as out-default would display it.
66*eeb7e5b3SAdam Hornáček             ///
67*eeb7e5b3SAdam Hornáček             /// </summary>
68*eeb7e5b3SAdam Hornáček 
69*eeb7e5b3SAdam Hornáček             Text = 0,
70*eeb7e5b3SAdam Hornáček 
71*eeb7e5b3SAdam Hornáček             /// <summary>
72*eeb7e5b3SAdam Hornáček             ///
73*eeb7e5b3SAdam Hornáček             /// XML-serialized format
74*eeb7e5b3SAdam Hornáček             ///
75*eeb7e5b3SAdam Hornáček             /// </summary>
76*eeb7e5b3SAdam Hornáček 
77*eeb7e5b3SAdam Hornáček             XML = 0xFF,
78*eeb7e5b3SAdam Hornáček 
79*eeb7e5b3SAdam Hornáček             /// <summary>
80*eeb7e5b3SAdam Hornáček             ///
81*eeb7e5b3SAdam Hornáček             /// Indicates that the data should be discarded instead of processed.
82*eeb7e5b3SAdam Hornáček             ///
83*eeb7e5b3SAdam Hornáček             /// </summary>
84*eeb7e5b3SAdam Hornáček             None = 2
85*eeb7e5b3SAdam Hornáček         }
86*eeb7e5b3SAdam Hornáček 
87*eeb7e5b3SAdam Hornáček 
88*eeb7e5b3SAdam Hornáček 
89*eeb7e5b3SAdam Hornáček         protected
Serialization(DataFormat dataFormat, string streamName)90*eeb7e5b3SAdam Hornáček         Serialization(DataFormat dataFormat, string streamName)
91*eeb7e5b3SAdam Hornáček         {
92*eeb7e5b3SAdam Hornáček             Dbg.Assert(!string.IsNullOrEmpty(streamName), "stream needs a name");
93*eeb7e5b3SAdam Hornáček 
94*eeb7e5b3SAdam Hornáček             format = dataFormat;
95*eeb7e5b3SAdam Hornáček             this.streamName = streamName;
96*eeb7e5b3SAdam Hornáček         }
97*eeb7e5b3SAdam Hornáček 
98*eeb7e5b3SAdam Hornáček 
99*eeb7e5b3SAdam Hornáček 
100*eeb7e5b3SAdam Hornáček         protected static string XmlCliTag = "#< CLIXML";
101*eeb7e5b3SAdam Hornáček 
102*eeb7e5b3SAdam Hornáček         protected string streamName;
103*eeb7e5b3SAdam Hornáček         protected DataFormat format;
104*eeb7e5b3SAdam Hornáček     }
105*eeb7e5b3SAdam Hornáček 
106*eeb7e5b3SAdam Hornáček 
107*eeb7e5b3SAdam Hornáček 
108*eeb7e5b3SAdam Hornáček     internal
109*eeb7e5b3SAdam Hornáček     class WrappedSerializer : Serialization
110*eeb7e5b3SAdam Hornáček     {
111*eeb7e5b3SAdam Hornáček         internal
WrappedSerializer(DataFormat dataFormat, string streamName, TextWriter output)112*eeb7e5b3SAdam Hornáček         WrappedSerializer(DataFormat dataFormat, string streamName, TextWriter output)
113*eeb7e5b3SAdam Hornáček             :
114*eeb7e5b3SAdam Hornáček             base(dataFormat, streamName)
115*eeb7e5b3SAdam Hornáček         {
116*eeb7e5b3SAdam Hornáček             Dbg.Assert(output != null, "output should have a value");
117*eeb7e5b3SAdam Hornáček 
118*eeb7e5b3SAdam Hornáček             textWriter = output;
119*eeb7e5b3SAdam Hornáček             switch (format)
120*eeb7e5b3SAdam Hornáček             {
121*eeb7e5b3SAdam Hornáček                 case DataFormat.XML:
122*eeb7e5b3SAdam Hornáček                     XmlWriterSettings settings = new XmlWriterSettings();
123*eeb7e5b3SAdam Hornáček                     settings.CheckCharacters = false;
124*eeb7e5b3SAdam Hornáček                     settings.OmitXmlDeclaration = true;
125*eeb7e5b3SAdam Hornáček                     _xmlWriter = XmlWriter.Create(textWriter, settings);
126*eeb7e5b3SAdam Hornáček                     _xmlSerializer = new Serializer(_xmlWriter);
127*eeb7e5b3SAdam Hornáček                     break;
128*eeb7e5b3SAdam Hornáček                 case DataFormat.Text:
129*eeb7e5b3SAdam Hornáček                 default:
130*eeb7e5b3SAdam Hornáček                     // do nothing; we'll just write to the TextWriter
131*eeb7e5b3SAdam Hornáček                     // or discard it.
132*eeb7e5b3SAdam Hornáček 
133*eeb7e5b3SAdam Hornáček                     break;
134*eeb7e5b3SAdam Hornáček             }
135*eeb7e5b3SAdam Hornáček         }
136*eeb7e5b3SAdam Hornáček 
137*eeb7e5b3SAdam Hornáček 
138*eeb7e5b3SAdam Hornáček 
139*eeb7e5b3SAdam Hornáček         internal
140*eeb7e5b3SAdam Hornáček         void
Serialize(object o)141*eeb7e5b3SAdam Hornáček         Serialize(object o)
142*eeb7e5b3SAdam Hornáček         {
143*eeb7e5b3SAdam Hornáček             Serialize(o, this.streamName);
144*eeb7e5b3SAdam Hornáček         }
145*eeb7e5b3SAdam Hornáček 
146*eeb7e5b3SAdam Hornáček         internal
147*eeb7e5b3SAdam Hornáček         void
Serialize(object o, string streamName)148*eeb7e5b3SAdam Hornáček         Serialize(object o, string streamName)
149*eeb7e5b3SAdam Hornáček         {
150*eeb7e5b3SAdam Hornáček             switch (format)
151*eeb7e5b3SAdam Hornáček             {
152*eeb7e5b3SAdam Hornáček                 case DataFormat.None:
153*eeb7e5b3SAdam Hornáček                     break;
154*eeb7e5b3SAdam Hornáček                 case DataFormat.XML:
155*eeb7e5b3SAdam Hornáček                     if (_firstCall)
156*eeb7e5b3SAdam Hornáček                     {
157*eeb7e5b3SAdam Hornáček                         _firstCall = false;
158*eeb7e5b3SAdam Hornáček                         textWriter.WriteLine(Serialization.XmlCliTag);
159*eeb7e5b3SAdam Hornáček                     }
160*eeb7e5b3SAdam Hornáček                     _xmlSerializer.Serialize(o, streamName);
161*eeb7e5b3SAdam Hornáček                     break;
162*eeb7e5b3SAdam Hornáček                 case DataFormat.Text:
163*eeb7e5b3SAdam Hornáček                 default:
164*eeb7e5b3SAdam Hornáček                     textWriter.Write(o.ToString());
165*eeb7e5b3SAdam Hornáček                     break;
166*eeb7e5b3SAdam Hornáček             }
167*eeb7e5b3SAdam Hornáček         }
168*eeb7e5b3SAdam Hornáček 
169*eeb7e5b3SAdam Hornáček 
170*eeb7e5b3SAdam Hornáček         internal
171*eeb7e5b3SAdam Hornáček         void
End()172*eeb7e5b3SAdam Hornáček         End()
173*eeb7e5b3SAdam Hornáček         {
174*eeb7e5b3SAdam Hornáček             switch (format)
175*eeb7e5b3SAdam Hornáček             {
176*eeb7e5b3SAdam Hornáček                 case DataFormat.None:
177*eeb7e5b3SAdam Hornáček                     // do nothing
178*eeb7e5b3SAdam Hornáček                     break;
179*eeb7e5b3SAdam Hornáček 
180*eeb7e5b3SAdam Hornáček                 case DataFormat.XML:
181*eeb7e5b3SAdam Hornáček                     _xmlSerializer.Done();
182*eeb7e5b3SAdam Hornáček                     _xmlSerializer = null;
183*eeb7e5b3SAdam Hornáček                     break;
184*eeb7e5b3SAdam Hornáček 
185*eeb7e5b3SAdam Hornáček                 case DataFormat.Text:
186*eeb7e5b3SAdam Hornáček                 default:
187*eeb7e5b3SAdam Hornáček                     // do nothing
188*eeb7e5b3SAdam Hornáček 
189*eeb7e5b3SAdam Hornáček                     break;
190*eeb7e5b3SAdam Hornáček             }
191*eeb7e5b3SAdam Hornáček         }
192*eeb7e5b3SAdam Hornáček 
193*eeb7e5b3SAdam Hornáček 
194*eeb7e5b3SAdam Hornáček         internal TextWriter textWriter;
195*eeb7e5b3SAdam Hornáček         private XmlWriter _xmlWriter;
196*eeb7e5b3SAdam Hornáček         private Serializer _xmlSerializer;
197*eeb7e5b3SAdam Hornáček         private bool _firstCall = true;
198*eeb7e5b3SAdam Hornáček     }
199*eeb7e5b3SAdam Hornáček 
200*eeb7e5b3SAdam Hornáček 
201*eeb7e5b3SAdam Hornáček 
202*eeb7e5b3SAdam Hornáček     internal
203*eeb7e5b3SAdam Hornáček     class WrappedDeserializer : Serialization
204*eeb7e5b3SAdam Hornáček     {
205*eeb7e5b3SAdam Hornáček         internal
WrappedDeserializer(DataFormat dataFormat, string streamName, TextReader input)206*eeb7e5b3SAdam Hornáček         WrappedDeserializer(DataFormat dataFormat, string streamName, TextReader input)
207*eeb7e5b3SAdam Hornáček             :
208*eeb7e5b3SAdam Hornáček             base(dataFormat, streamName)
209*eeb7e5b3SAdam Hornáček         {
210*eeb7e5b3SAdam Hornáček             Dbg.Assert(input != null, "input should have a value");
211*eeb7e5b3SAdam Hornáček 
212*eeb7e5b3SAdam Hornáček             // If the data format is none - do nothing...
213*eeb7e5b3SAdam Hornáček             if (dataFormat == DataFormat.None)
214*eeb7e5b3SAdam Hornáček                 return;
215*eeb7e5b3SAdam Hornáček 
216*eeb7e5b3SAdam Hornáček             textReader = input;
217*eeb7e5b3SAdam Hornáček             _firstLine = textReader.ReadLine();
218*eeb7e5b3SAdam Hornáček             if (String.Compare(_firstLine, Serialization.XmlCliTag, StringComparison.OrdinalIgnoreCase) == 0)
219*eeb7e5b3SAdam Hornáček             {
220*eeb7e5b3SAdam Hornáček                 // format should be XML
221*eeb7e5b3SAdam Hornáček 
222*eeb7e5b3SAdam Hornáček                 dataFormat = DataFormat.XML;
223*eeb7e5b3SAdam Hornáček             }
224*eeb7e5b3SAdam Hornáček 
225*eeb7e5b3SAdam Hornáček             switch (format)
226*eeb7e5b3SAdam Hornáček             {
227*eeb7e5b3SAdam Hornáček                 case DataFormat.XML:
228*eeb7e5b3SAdam Hornáček                     _xmlReader = XmlReader.Create(textReader,  new XmlReaderSettings { XmlResolver = null });
229*eeb7e5b3SAdam Hornáček                     _xmlDeserializer = new Deserializer(_xmlReader);
230*eeb7e5b3SAdam Hornáček                     break;
231*eeb7e5b3SAdam Hornáček                 case DataFormat.Text:
232*eeb7e5b3SAdam Hornáček                 default:
233*eeb7e5b3SAdam Hornáček                     // do nothing; we'll just read from the TextReader
234*eeb7e5b3SAdam Hornáček 
235*eeb7e5b3SAdam Hornáček                     break;
236*eeb7e5b3SAdam Hornáček             }
237*eeb7e5b3SAdam Hornáček         }
238*eeb7e5b3SAdam Hornáček 
239*eeb7e5b3SAdam Hornáček 
240*eeb7e5b3SAdam Hornáček 
241*eeb7e5b3SAdam Hornáček         internal
242*eeb7e5b3SAdam Hornáček         object
Deserialize()243*eeb7e5b3SAdam Hornáček         Deserialize()
244*eeb7e5b3SAdam Hornáček         {
245*eeb7e5b3SAdam Hornáček             object o;
246*eeb7e5b3SAdam Hornáček             switch (format)
247*eeb7e5b3SAdam Hornáček             {
248*eeb7e5b3SAdam Hornáček                 case DataFormat.None:
249*eeb7e5b3SAdam Hornáček                     _atEnd = true;
250*eeb7e5b3SAdam Hornáček                     return null;
251*eeb7e5b3SAdam Hornáček 
252*eeb7e5b3SAdam Hornáček                 case DataFormat.XML:
253*eeb7e5b3SAdam Hornáček                     string unused;
254*eeb7e5b3SAdam Hornáček                     o = _xmlDeserializer.Deserialize(out unused);
255*eeb7e5b3SAdam Hornáček                     break;
256*eeb7e5b3SAdam Hornáček 
257*eeb7e5b3SAdam Hornáček                 case DataFormat.Text:
258*eeb7e5b3SAdam Hornáček                 default:
259*eeb7e5b3SAdam Hornáček                     if (_atEnd)
260*eeb7e5b3SAdam Hornáček                     {
261*eeb7e5b3SAdam Hornáček                         return null;
262*eeb7e5b3SAdam Hornáček                     }
263*eeb7e5b3SAdam Hornáček                     if (_firstLine != null)
264*eeb7e5b3SAdam Hornáček                     {
265*eeb7e5b3SAdam Hornáček                         o = _firstLine;
266*eeb7e5b3SAdam Hornáček                         _firstLine = null;
267*eeb7e5b3SAdam Hornáček                     }
268*eeb7e5b3SAdam Hornáček                     else
269*eeb7e5b3SAdam Hornáček                     {
270*eeb7e5b3SAdam Hornáček                         o = textReader.ReadLine();
271*eeb7e5b3SAdam Hornáček                         if (o == null)
272*eeb7e5b3SAdam Hornáček                         {
273*eeb7e5b3SAdam Hornáček                             _atEnd = true;
274*eeb7e5b3SAdam Hornáček                         }
275*eeb7e5b3SAdam Hornáček                     }
276*eeb7e5b3SAdam Hornáček                     break;
277*eeb7e5b3SAdam Hornáček             }
278*eeb7e5b3SAdam Hornáček             return o;
279*eeb7e5b3SAdam Hornáček         }
280*eeb7e5b3SAdam Hornáček 
281*eeb7e5b3SAdam Hornáček 
282*eeb7e5b3SAdam Hornáček 
283*eeb7e5b3SAdam Hornáček         internal
284*eeb7e5b3SAdam Hornáček         bool
285*eeb7e5b3SAdam Hornáček         AtEnd
286*eeb7e5b3SAdam Hornáček         {
287*eeb7e5b3SAdam Hornáček             get
288*eeb7e5b3SAdam Hornáček             {
289*eeb7e5b3SAdam Hornáček                 bool result = false;
290*eeb7e5b3SAdam Hornáček                 switch (format)
291*eeb7e5b3SAdam Hornáček                 {
292*eeb7e5b3SAdam Hornáček                     case DataFormat.None:
293*eeb7e5b3SAdam Hornáček                         _atEnd = true;
294*eeb7e5b3SAdam Hornáček                         result = true;
295*eeb7e5b3SAdam Hornáček                         break;
296*eeb7e5b3SAdam Hornáček 
297*eeb7e5b3SAdam Hornáček                     case DataFormat.XML:
298*eeb7e5b3SAdam Hornáček                         result = _xmlDeserializer.Done();
299*eeb7e5b3SAdam Hornáček                         break;
300*eeb7e5b3SAdam Hornáček 
301*eeb7e5b3SAdam Hornáček                     case DataFormat.Text:
302*eeb7e5b3SAdam Hornáček                     default:
303*eeb7e5b3SAdam Hornáček                         result = _atEnd;
304*eeb7e5b3SAdam Hornáček                         break;
305*eeb7e5b3SAdam Hornáček                 }
306*eeb7e5b3SAdam Hornáček                 return result;
307*eeb7e5b3SAdam Hornáček             }
308*eeb7e5b3SAdam Hornáček         }
309*eeb7e5b3SAdam Hornáček 
310*eeb7e5b3SAdam Hornáček 
311*eeb7e5b3SAdam Hornáček 
312*eeb7e5b3SAdam Hornáček         internal
313*eeb7e5b3SAdam Hornáček         void
End()314*eeb7e5b3SAdam Hornáček         End()
315*eeb7e5b3SAdam Hornáček         {
316*eeb7e5b3SAdam Hornáček             switch (format)
317*eeb7e5b3SAdam Hornáček             {
318*eeb7e5b3SAdam Hornáček                 case DataFormat.None:
319*eeb7e5b3SAdam Hornáček                 case DataFormat.XML:
320*eeb7e5b3SAdam Hornáček                 case DataFormat.Text:
321*eeb7e5b3SAdam Hornáček                 default:
322*eeb7e5b3SAdam Hornáček                     // do nothing
323*eeb7e5b3SAdam Hornáček 
324*eeb7e5b3SAdam Hornáček                     break;
325*eeb7e5b3SAdam Hornáček             }
326*eeb7e5b3SAdam Hornáček         }
327*eeb7e5b3SAdam Hornáček 
328*eeb7e5b3SAdam Hornáček 
329*eeb7e5b3SAdam Hornáček         internal TextReader textReader;
330*eeb7e5b3SAdam Hornáček         private XmlReader _xmlReader;
331*eeb7e5b3SAdam Hornáček         private Deserializer _xmlDeserializer;
332*eeb7e5b3SAdam Hornáček         private string _firstLine;
333*eeb7e5b3SAdam Hornáček         private bool _atEnd;
334*eeb7e5b3SAdam Hornáček     }
335*eeb7e5b3SAdam Hornáček }   // namespace
336*eeb7e5b3SAdam Hornáček /*http://example.com*/
337