1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
6
using System.CodeDom.Compiler;
8
using System.Security.Permissions;
10
namespace ICSharpCode.NRefactory.Visitors
12
[PermissionSet(SecurityAction.InheritanceDemand, Name = "FullTrust")]
13
[PermissionSet(SecurityAction.LinkDemand, Name = "FullTrust")]
14
public class CodeDomVerboseOutputGenerator : System.CodeDom.Compiler.CodeGenerator
16
#region System.CodeDom.Compiler.CodeGenerator abstract class implementation
17
protected override string NullToken {
23
protected override void OutputType(CodeTypeReference typeRef)
25
Output.Write("[CodeTypeReference: {0}", typeRef.BaseType);
26
if (typeRef.ArrayRank > 0) {
27
Output.Write(" Rank:" + typeRef.ArrayRank);
32
protected override void GenerateArrayCreateExpression(CodeArrayCreateExpression e)
34
Output.Write("[CodeArrayCreateExpression: {0}]", e.ToString());
37
protected override void GenerateBaseReferenceExpression(CodeBaseReferenceExpression e)
39
Output.Write("[CodeBaseReferenceExpression: {0}]", e.ToString());
42
protected override void GenerateCastExpression(CodeCastExpression e)
44
Output.Write("[CodeCastExpression: {0}]", e.ToString());
47
protected override void GenerateDelegateCreateExpression(CodeDelegateCreateExpression e)
49
Output.Write("[CodeDelegateCreateExpression: {0}]", e.ToString());
52
protected override void GenerateFieldReferenceExpression(CodeFieldReferenceExpression e)
54
Output.Write("[CodeFieldReferenceExpression: Name={0}, Target=", e.FieldName);
55
this.GenerateExpression(e.TargetObject);
59
protected override void GenerateMethodReferenceExpression(CodeMethodReferenceExpression e)
61
Output.Write("[CodeMethodReferenceExpression: Name={0}, Target=", e.MethodName);
62
this.GenerateExpression(e.TargetObject);
66
protected override void GenerateEventReferenceExpression(CodeEventReferenceExpression e)
68
Output.Write("[CodeEventReferenceExpression: Name={0}, Target=", e.EventName);
69
this.GenerateExpression(e.TargetObject);
73
protected override void GenerateArgumentReferenceExpression(CodeArgumentReferenceExpression e)
75
Output.Write("[CodeArgumentReferenceExpression: {0}]", e.ToString());
78
protected override void GenerateVariableReferenceExpression(CodeVariableReferenceExpression e)
80
Output.Write("[CodeVariableReferenceExpression: Name={0}]", e.VariableName);
83
protected override void GenerateIndexerExpression(CodeIndexerExpression e)
85
Output.Write("[CodeIndexerExpression: {0}]", e.ToString());
88
protected override void GenerateArrayIndexerExpression(CodeArrayIndexerExpression e)
90
Output.Write("[CodeArrayIndexerExpression: {0}]", e.ToString());
93
protected override void GenerateSnippetExpression(CodeSnippetExpression e)
95
Output.Write("[CodeSnippetExpression: {0}]", e.ToString());
98
protected override void GenerateMethodInvokeExpression(CodeMethodInvokeExpression e)
100
Output.Write("[CodeMethodInvokeExpression: Method=");
101
GenerateMethodReferenceExpression(e.Method);
102
Output.Write(", Parameters=");
104
foreach (CodeExpression expr in e.Parameters) {
105
if (first) first = false; else Output.Write(", ");
106
this.GenerateExpression(expr);
111
protected override void GenerateDelegateInvokeExpression(CodeDelegateInvokeExpression e)
113
Output.Write("[CodeDelegateInvokeExpression: {0}]", e.ToString());
116
protected override void GenerateObjectCreateExpression(CodeObjectCreateExpression e)
118
Output.Write("[CodeObjectCreateExpression: Type={0}, Parameters=", e.CreateType.BaseType);
120
foreach (CodeExpression expr in e.Parameters) {
121
if (first) first = false; else Output.Write(", ");
122
this.GenerateExpression(expr);
127
protected override void GeneratePropertyReferenceExpression(CodePropertyReferenceExpression e)
129
Output.Write("[CodePropertyReferenceExpression: Name={0}, Target=", e.PropertyName);
130
this.GenerateExpression(e.TargetObject);
134
protected override void GeneratePropertySetValueReferenceExpression(CodePropertySetValueReferenceExpression e)
136
Output.Write("[CodePropertySetValueReferenceExpression: {0}]", e.ToString());
139
protected override void GenerateThisReferenceExpression(CodeThisReferenceExpression e)
141
Output.Write("[CodeThisReferenceExpression]");
144
protected override void GenerateExpressionStatement(CodeExpressionStatement e)
146
Output.Write("[CodeExpressionStatement:");
147
base.GenerateExpression(e.Expression);
148
Output.WriteLine("]");
151
protected override void GenerateIterationStatement(CodeIterationStatement e)
153
Output.WriteLine("[CodeIterationStatement: {0}]", e.ToString());
156
protected override void GenerateThrowExceptionStatement(CodeThrowExceptionStatement e)
158
Output.WriteLine("[CodeThrowExceptionStatement: {0}]", e.ToString());
161
protected override void GenerateComment(CodeComment e)
163
Output.WriteLine("[CodeComment: {0}]", e.ToString());
166
protected override void GenerateMethodReturnStatement(CodeMethodReturnStatement e)
168
Output.WriteLine("[CodeMethodReturnStatement: {0}]", e.ToString());
171
protected override void GenerateConditionStatement(CodeConditionStatement e)
173
Output.WriteLine("[GenerateConditionStatement: {0}]", e.ToString());
176
protected override void GenerateTryCatchFinallyStatement(CodeTryCatchFinallyStatement e)
178
Output.WriteLine("[CodeTryCatchFinallyStatement: {0}]", e.ToString());
181
protected override void GenerateAssignStatement(CodeAssignStatement e)
183
Output.Write("[CodeAssignStatement: Left=");
184
base.GenerateExpression(e.Left);
185
Output.Write(", Right=");
186
base.GenerateExpression(e.Right);
187
Output.WriteLine("]");
190
protected override void GenerateAttachEventStatement(CodeAttachEventStatement e)
192
Output.WriteLine("[CodeAttachEventStatement: {0}]", e.ToString());
195
protected override void GenerateRemoveEventStatement(CodeRemoveEventStatement e)
197
Output.WriteLine("[CodeRemoveEventStatement: {0}]", e.ToString());
200
protected override void GenerateGotoStatement(CodeGotoStatement e)
202
Output.WriteLine("[CodeGotoStatement: {0}]", e.ToString());
205
protected override void GenerateLabeledStatement(CodeLabeledStatement e)
207
Output.WriteLine("[CodeLabeledStatement: {0}]", e.ToString());
210
protected override void GenerateVariableDeclarationStatement(CodeVariableDeclarationStatement e)
212
Output.WriteLine("[CodeVariableDeclarationStatement: {0}]", e.ToString());
215
protected override void GenerateLinePragmaStart(CodeLinePragma e)
217
Output.WriteLine("[CodeLinePragma: {0}]", e.ToString());
220
protected override void GenerateLinePragmaEnd(CodeLinePragma e)
222
Output.WriteLine("[CodeLinePragma: {0}]", e.ToString());
225
protected override void GenerateEvent(CodeMemberEvent e, CodeTypeDeclaration c)
227
Output.WriteLine("[CodeMemberEvent: {0}]", e.ToString());
230
protected override void GenerateField(CodeMemberField e)
232
Output.Write("[CodeMemberField: Name={0}, Type=", e.Name);
233
Output.Write(e.Type.BaseType);
234
Output.WriteLine("]");
237
protected override void GenerateSnippetMember(CodeSnippetTypeMember e)
239
Output.WriteLine("[CodeSnippetTypeMember: {0}]", e.ToString());
242
protected override void GenerateEntryPointMethod(CodeEntryPointMethod e, CodeTypeDeclaration c)
244
Output.WriteLine("[CodeEntryPointMethod: {0}]", e.ToString());
247
public void PublicGenerateCodeFromStatement(CodeStatement e, TextWriter w, CodeGeneratorOptions o)
249
((ICodeGenerator)this).GenerateCodeFromStatement(e, w, o);
252
protected override void GenerateMethod(CodeMemberMethod e, CodeTypeDeclaration c)
254
Output.WriteLine("[CodeMemberMethod: Name={0}, Parameterns={1}]", e.Name, e.Parameters.Count);
256
GenerateStatements(e.Statements);
260
protected override void GenerateProperty(CodeMemberProperty e, CodeTypeDeclaration c)
262
Output.WriteLine("[CodeMemberProperty : {0}]", e.ToString());
265
protected override void GenerateConstructor(CodeConstructor e, CodeTypeDeclaration c)
267
Output.WriteLine("[CodeConstructor : {0}]", e.ToString());
269
GenerateStatements(e.Statements);
273
protected override void GenerateTypeConstructor(CodeTypeConstructor e)
275
Output.WriteLine("[CodeTypeConstructor : {0}]", e.ToString());
278
protected override void GenerateTypeStart(CodeTypeDeclaration e)
280
Output.WriteLine("[CodeTypeDeclaration : {0}]", e.ToString());
283
protected override void GenerateTypeEnd(CodeTypeDeclaration e)
285
Output.WriteLine("[CodeTypeDeclaration: {0}]", e.ToString());
288
protected override void GenerateNamespaceStart(CodeNamespace e)
290
Output.WriteLine("[CodeNamespaceStart: {0}]", e.ToString());
293
protected override void GenerateNamespaceEnd(CodeNamespace e)
295
Output.WriteLine("[CodeNamespaceEnd: {0}]", e.ToString());
298
protected override void GenerateNamespaceImport(CodeNamespaceImport e)
300
Output.WriteLine("[CodeNamespaceImport: {0}]", e.ToString());
303
protected override void GenerateAttributeDeclarationsStart(CodeAttributeDeclarationCollection attributes)
305
Output.WriteLine("[CodeAttributeDeclarationCollection: {0}]", attributes.ToString());
308
protected override void GenerateAttributeDeclarationsEnd(CodeAttributeDeclarationCollection attributes)
310
Output.WriteLine("[CodeAttributeDeclarationCollection: {0}]", attributes.ToString());
313
protected override void GeneratePrimitiveExpression(CodePrimitiveExpression e)
315
if (e.Value == null) {
316
Output.WriteLine("[CodePrimitiveExpression: null]");
318
Output.Write("[CodePrimitiveExpression: ");
319
base.GeneratePrimitiveExpression(e);
320
Output.WriteLine(" (" + e.Value.GetType().Name + ")]");
324
protected override bool Supports(GeneratorSupport support)
329
protected override bool IsValidIdentifier(string value)
334
protected override string CreateEscapedIdentifier(string value)
339
protected override string CreateValidIdentifier(string value)
344
protected override string GetTypeOutput(CodeTypeReference value)
346
return value.ToString();
349
protected override string QuoteSnippetString(string value)
351
return "\"" + value + "\"";