157
public object VisitInnerClassTypeReference(InnerClassTypeReference innerClassTypeReference, object data)
179
public override object TrackedVisitInnerClassTypeReference(InnerClassTypeReference innerClassTypeReference, object data)
159
nodeTracker.TrackedVisit(innerClassTypeReference.BaseType, data);
181
TrackedVisit(innerClassTypeReference.BaseType, data);
160
182
outputFormatter.PrintToken(Tokens.Dot);
161
183
return VisitTypeReference((TypeReference)innerClassTypeReference, data);
164
186
#region Global scope
165
public object VisitAttributeSection(AttributeSection attributeSection, object data)
187
bool printAttributeSectionInline; // is set to true when printing parameter's attributes
189
public override object TrackedVisitAttributeSection(AttributeSection attributeSection, object data)
167
outputFormatter.Indent();
191
if (!printAttributeSectionInline)
192
outputFormatter.Indent();
168
193
outputFormatter.PrintText("<");
169
194
if (attributeSection.AttributeTarget != null && attributeSection.AttributeTarget.Length > 0) {
170
outputFormatter.PrintIdentifier(attributeSection.AttributeTarget);
195
outputFormatter.PrintText(char.ToUpperInvariant(attributeSection.AttributeTarget[0]) + attributeSection.AttributeTarget.Substring(1));
171
196
outputFormatter.PrintToken(Tokens.Colon);
172
197
outputFormatter.Space();
180
205
|| "module".Equals(attributeSection.AttributeTarget, StringComparison.InvariantCultureIgnoreCase)) {
181
206
outputFormatter.NewLine();
183
outputFormatter.PrintLineContinuation();
208
if (printAttributeSectionInline)
209
outputFormatter.Space();
211
outputFormatter.PrintLineContinuation();
189
public object VisitAttribute(ICSharpCode.NRefactory.Ast.Attribute attribute, object data)
217
public override object TrackedVisitAttribute(ICSharpCode.NRefactory.Ast.Attribute attribute, object data)
191
219
outputFormatter.PrintIdentifier(attribute.Name);
192
outputFormatter.PrintToken(Tokens.OpenParenthesis);
193
AppendCommaSeparatedList(attribute.PositionalArguments);
195
if (attribute.NamedArguments != null && attribute.NamedArguments.Count > 0) {
196
if (attribute.PositionalArguments.Count > 0) {
197
outputFormatter.PrintToken(Tokens.Comma);
198
outputFormatter.Space();
220
if (attribute.PositionalArguments.Count > 0 || attribute.NamedArguments.Count > 0) {
221
outputFormatter.PrintToken(Tokens.OpenParenthesis);
222
AppendCommaSeparatedList(attribute.PositionalArguments);
224
if (attribute.NamedArguments.Count > 0) {
225
if (attribute.PositionalArguments.Count > 0) {
226
outputFormatter.PrintToken(Tokens.Comma);
227
outputFormatter.Space();
229
AppendCommaSeparatedList(attribute.NamedArguments);
200
AppendCommaSeparatedList(attribute.NamedArguments);
231
outputFormatter.PrintToken(Tokens.CloseParenthesis);
202
outputFormatter.PrintToken(Tokens.CloseParenthesis);
206
public object VisitNamedArgumentExpression(NamedArgumentExpression namedArgumentExpression, object data)
236
public override object TrackedVisitNamedArgumentExpression(NamedArgumentExpression namedArgumentExpression, object data)
208
238
outputFormatter.PrintIdentifier(namedArgumentExpression.Name);
209
239
outputFormatter.Space();
210
240
outputFormatter.PrintToken(Tokens.Colon);
211
241
outputFormatter.PrintToken(Tokens.Assign);
212
242
outputFormatter.Space();
213
nodeTracker.TrackedVisit(namedArgumentExpression.Expression, data);
243
TrackedVisit(namedArgumentExpression.Expression, data);
217
public object VisitUsing(Using @using, object data)
247
public override object TrackedVisitUsing(Using @using, object data)
219
249
Debug.Fail("Should never be called. The usings should be handled in Visit(UsingDeclaration)");
223
public object VisitUsingDeclaration(UsingDeclaration usingDeclaration, object data)
253
public override object TrackedVisitUsingDeclaration(UsingDeclaration usingDeclaration, object data)
225
255
outputFormatter.Indent();
226
256
outputFormatter.PrintToken(Tokens.Imports);
782
public object VisitParameterDeclarationExpression(ParameterDeclarationExpression parameterDeclarationExpression, object data)
814
public override object TrackedVisitParameterDeclarationExpression(ParameterDeclarationExpression parameterDeclarationExpression, object data)
816
printAttributeSectionInline = true;
784
817
VisitAttributes(parameterDeclarationExpression.Attributes, data);
818
printAttributeSectionInline = false;
785
819
OutputModifier(parameterDeclarationExpression.ParamModifier, parameterDeclarationExpression.StartLocation);
786
820
outputFormatter.PrintIdentifier(parameterDeclarationExpression.ParameterName);
787
821
outputFormatter.Space();
788
822
outputFormatter.PrintToken(Tokens.As);
789
823
outputFormatter.Space();
790
nodeTracker.TrackedVisit(parameterDeclarationExpression.TypeReference, data);
824
TrackedVisit(parameterDeclarationExpression.TypeReference, data);
794
public object VisitMethodDeclaration(MethodDeclaration methodDeclaration, object data)
828
public override object TrackedVisitMethodDeclaration(MethodDeclaration methodDeclaration, object data)
796
830
VisitAttributes(methodDeclaration.Attributes, data);
831
if (methodDeclaration.IsExtensionMethod) {
832
outputFormatter.Indent();
833
outputFormatter.PrintText("<System.Runtime.CompilerServices.Extension> _");
834
outputFormatter.NewLine();
797
836
outputFormatter.Indent();
798
837
OutputModifier(methodDeclaration.Modifier);
818
857
outputFormatter.Space();
819
858
outputFormatter.PrintToken(Tokens.As);
820
859
outputFormatter.Space();
821
nodeTracker.TrackedVisit(methodDeclaration.TypeReference, data);
860
TrackedVisit(methodDeclaration.TypeReference, data);
824
863
PrintInterfaceImplementations(methodDeclaration.InterfaceImplementations);
865
if (methodDeclaration.HandlesClause.Count > 0) {
866
outputFormatter.Space();
867
outputFormatter.PrintToken(Tokens.Handles);
868
for (int i = 0; i < methodDeclaration.HandlesClause.Count; i++) {
870
outputFormatter.PrintToken(Tokens.Comma);
871
outputFormatter.Space();
872
outputFormatter.PrintText(methodDeclaration.HandlesClause[i]);
826
876
outputFormatter.NewLine();
828
878
if (!IsAbstract(methodDeclaration)) {
829
nodeTracker.BeginNode(methodDeclaration.Body);
879
outputFormatter.IsInMemberBody = true;
880
BeginVisit(methodDeclaration.Body);
830
881
++outputFormatter.IndentationLevel;
831
882
exitTokenStack.Push(isSub ? Tokens.Sub : Tokens.Function);
832
methodDeclaration.Body.AcceptVisitor(this, data);
883
// we're doing the tracking manually using BeginVisit/EndVisit, so call Tracked... directly
884
this.TrackedVisitBlockStatement(methodDeclaration.Body, data);
833
885
exitTokenStack.Pop();
834
886
--outputFormatter.IndentationLevel;
1231
1298
foreach (Statement stmt in statements) {
1232
1299
if (stmt is BlockStatement) {
1233
nodeTracker.TrackedVisit(stmt, null);
1300
TrackedVisit(stmt, null);
1235
1302
outputFormatter.Indent();
1236
nodeTracker.TrackedVisit(stmt, null);
1303
TrackedVisit(stmt, null);
1237
1304
outputFormatter.NewLine();
1242
public object VisitAddHandlerStatement(AddHandlerStatement addHandlerStatement, object data)
1309
public override object TrackedVisitAddHandlerStatement(AddHandlerStatement addHandlerStatement, object data)
1244
1311
outputFormatter.PrintToken(Tokens.AddHandler);
1245
1312
outputFormatter.Space();
1246
nodeTracker.TrackedVisit(addHandlerStatement.EventExpression, data);
1313
TrackedVisit(addHandlerStatement.EventExpression, data);
1247
1314
outputFormatter.PrintToken(Tokens.Comma);
1248
1315
outputFormatter.Space();
1249
nodeTracker.TrackedVisit(addHandlerStatement.HandlerExpression, data);
1316
TrackedVisit(addHandlerStatement.HandlerExpression, data);
1253
public object VisitRemoveHandlerStatement(RemoveHandlerStatement removeHandlerStatement, object data)
1320
public override object TrackedVisitRemoveHandlerStatement(RemoveHandlerStatement removeHandlerStatement, object data)
1255
1322
outputFormatter.PrintToken(Tokens.RemoveHandler);
1256
1323
outputFormatter.Space();
1257
nodeTracker.TrackedVisit(removeHandlerStatement.EventExpression, data);
1324
TrackedVisit(removeHandlerStatement.EventExpression, data);
1258
1325
outputFormatter.PrintToken(Tokens.Comma);
1259
1326
outputFormatter.Space();
1260
nodeTracker.TrackedVisit(removeHandlerStatement.HandlerExpression, data);
1327
TrackedVisit(removeHandlerStatement.HandlerExpression, data);
1264
public object VisitRaiseEventStatement(RaiseEventStatement raiseEventStatement, object data)
1331
public override object TrackedVisitRaiseEventStatement(RaiseEventStatement raiseEventStatement, object data)
1266
1333
outputFormatter.PrintToken(Tokens.RaiseEvent);
1267
1334
outputFormatter.Space();
1339
public object VisitEmptyStatement(EmptyStatement emptyStatement, object data)
1406
public override object TrackedVisitEmptyStatement(EmptyStatement emptyStatement, object data)
1341
1408
outputFormatter.NewLine();
1345
public virtual object VisitYieldStatement(YieldStatement yieldStatement, object data)
1412
public override object TrackedVisitYieldStatement(YieldStatement yieldStatement, object data)
1347
1414
UnsupportedNode(yieldStatement);
1351
public object VisitReturnStatement(ReturnStatement returnStatement, object data)
1418
public override object TrackedVisitReturnStatement(ReturnStatement returnStatement, object data)
1353
1420
outputFormatter.PrintToken(Tokens.Return);
1354
1421
if (!returnStatement.Expression.IsNull) {
1355
1422
outputFormatter.Space();
1356
nodeTracker.TrackedVisit(returnStatement.Expression, data);
1423
TrackedVisit(returnStatement.Expression, data);
1361
public object VisitIfElseStatement(IfElseStatement ifElseStatement, object data)
1428
public override object TrackedVisitIfElseStatement(IfElseStatement ifElseStatement, object data)
1363
1430
outputFormatter.PrintToken(Tokens.If);
1364
1431
outputFormatter.Space();
1365
nodeTracker.TrackedVisit(ifElseStatement.Condition, data);
1432
TrackedVisit(ifElseStatement.Condition, data);
1366
1433
outputFormatter.Space();
1367
1434
outputFormatter.PrintToken(Tokens.Then);
1368
1435
outputFormatter.NewLine();
1804
public object VisitThrowStatement(ThrowStatement throwStatement, object data)
1872
public override object TrackedVisitThrowStatement(ThrowStatement throwStatement, object data)
1806
1874
outputFormatter.PrintToken(Tokens.Throw);
1807
1875
if (!throwStatement.Expression.IsNull) {
1808
1876
outputFormatter.Space();
1809
nodeTracker.TrackedVisit(throwStatement.Expression, data);
1877
TrackedVisit(throwStatement.Expression, data);
1814
public object VisitFixedStatement(FixedStatement fixedStatement, object data)
1882
public override object TrackedVisitFixedStatement(FixedStatement fixedStatement, object data)
1816
1884
UnsupportedNode(fixedStatement);
1817
return nodeTracker.TrackedVisit(fixedStatement.EmbeddedStatement, data);
1885
return TrackedVisit(fixedStatement.EmbeddedStatement, data);
1820
public object VisitUnsafeStatement(UnsafeStatement unsafeStatement, object data)
1888
public override object TrackedVisitUnsafeStatement(UnsafeStatement unsafeStatement, object data)
1822
1890
UnsupportedNode(unsafeStatement);
1823
return nodeTracker.TrackedVisit(unsafeStatement.Block, data);
1891
return TrackedVisit(unsafeStatement.Block, data);
1826
public object VisitCheckedStatement(CheckedStatement checkedStatement, object data)
1894
public override object TrackedVisitCheckedStatement(CheckedStatement checkedStatement, object data)
1828
1896
UnsupportedNode(checkedStatement);
1829
return nodeTracker.TrackedVisit(checkedStatement.Block, data);
1897
return TrackedVisit(checkedStatement.Block, data);
1832
public object VisitUncheckedStatement(UncheckedStatement uncheckedStatement, object data)
1900
public override object TrackedVisitUncheckedStatement(UncheckedStatement uncheckedStatement, object data)
1834
1902
UnsupportedNode(uncheckedStatement);
1835
return nodeTracker.TrackedVisit(uncheckedStatement.Block, data);
1903
return TrackedVisit(uncheckedStatement.Block, data);
1838
public object VisitExitStatement(ExitStatement exitStatement, object data)
1906
public override object TrackedVisitExitStatement(ExitStatement exitStatement, object data)
1840
1908
outputFormatter.PrintToken(Tokens.Exit);
1841
1909
if (exitStatement.ExitType != ExitType.None) {
1935
2003
static string ConvertCharLiteral(char ch)
1937
2005
if (Char.IsControl(ch)) {
1938
return "Chr(" + ((int)ch) + ")";
2006
string charName = GetCharName(ch);
2007
if (charName != null)
2008
return "ControlChars." + charName;
2010
return "ChrW(" + ((int)ch).ToString() + ")";
2011
} else if (ch == '"') {
1943
return String.Concat("\"", ch.ToString(), "\"C");
2014
return "\"" + ch.ToString() + "\"C";
2018
static string GetCharName(char ch)
2034
return "VerticalTab";
1947
2040
static string ConvertString(string str)
1949
2042
StringBuilder sb = new StringBuilder();
2043
bool inString = false;
1950
2044
foreach (char ch in str) {
1951
2045
if (char.IsControl(ch)) {
1952
sb.Append("\" & Chr(" + ((int)ch) + ") & \"");
1953
} else if (ch == '"') {
2052
string charName = GetCharName(ch);
2053
if (charName != null)
2054
sb.Append("vb" + charName);
2056
sb.Append("ChrW(" + ((int)ch) + ")");
1959
2075
return sb.ToString();
1962
public object VisitPrimitiveExpression(PrimitiveExpression primitiveExpression, object data)
2078
public override object TrackedVisitPrimitiveExpression(PrimitiveExpression primitiveExpression, object data)
1964
2080
object val = primitiveExpression.Value;
1965
2081
if (val == null) {
2069
2193
op = Tokens.GreaterEqual;
2071
2195
case BinaryOperatorType.InEquality:
2072
nodeTracker.TrackedVisit(binaryOperatorExpression.Left, data);
2073
outputFormatter.Space();
2074
outputFormatter.PrintToken(Tokens.LessThan);
2075
outputFormatter.PrintToken(Tokens.GreaterThan);
2076
outputFormatter.Space();
2077
nodeTracker.TrackedVisit(binaryOperatorExpression.Right, data);
2196
op = Tokens.NotEqual;
2079
2198
case BinaryOperatorType.NullCoalescing:
2080
outputFormatter.PrintText("IIf(");
2081
nodeTracker.TrackedVisit(binaryOperatorExpression.Left, data);
2082
outputFormatter.PrintText(" Is Nothing, ");
2083
nodeTracker.TrackedVisit(binaryOperatorExpression.Right, data);
2199
outputFormatter.PrintText("If(");
2200
TrackedVisit(binaryOperatorExpression.Left, data);
2084
2201
outputFormatter.PrintToken(Tokens.Comma);
2085
2202
outputFormatter.Space();
2086
nodeTracker.TrackedVisit(binaryOperatorExpression.Left, data);
2203
TrackedVisit(binaryOperatorExpression.Right, data);
2087
2204
outputFormatter.PrintToken(Tokens.CloseParenthesis);
2206
case BinaryOperatorType.DictionaryAccess:
2208
PrimitiveExpression pright = binaryOperatorExpression.Right as PrimitiveExpression;
2209
TrackedVisit(binaryOperatorExpression.Left, data);
2210
if (pright != null && pright.Value is string) {
2211
outputFormatter.PrintText("!" + (string)pright.Value);
2213
outputFormatter.PrintToken(Tokens.OpenParenthesis);
2214
TrackedVisit(binaryOperatorExpression.Right, data);
2215
outputFormatter.PrintToken(Tokens.CloseParenthesis);
2089
2219
case BinaryOperatorType.LessThan:
2090
2220
op = Tokens.LessThan;
2097
nodeTracker.TrackedVisit(binaryOperatorExpression.Left, data);
2228
BinaryOperatorExpression childBoe = binaryOperatorExpression.Left as BinaryOperatorExpression;
2229
bool requireParenthesis = childBoe != null && OperatorPrecedence.ComparePrecedenceVB(binaryOperatorExpression.Op, childBoe.Op) > 0;
2230
if (requireParenthesis)
2231
outputFormatter.PrintToken(Tokens.OpenParenthesis);
2232
TrackedVisit(binaryOperatorExpression.Left, data);
2233
if (requireParenthesis)
2234
outputFormatter.PrintToken(Tokens.CloseParenthesis);
2098
2236
outputFormatter.Space();
2099
2237
outputFormatter.PrintToken(op);
2100
2238
outputFormatter.Space();
2101
nodeTracker.TrackedVisit(binaryOperatorExpression.Right, data);
2240
childBoe = binaryOperatorExpression.Right as BinaryOperatorExpression;
2241
requireParenthesis = childBoe != null && OperatorPrecedence.ComparePrecedenceVB(binaryOperatorExpression.Op, childBoe.Op) >= 0;
2242
if (requireParenthesis)
2243
outputFormatter.PrintToken(Tokens.OpenParenthesis);
2244
TrackedVisit(binaryOperatorExpression.Right, data);
2245
if (requireParenthesis)
2246
outputFormatter.PrintToken(Tokens.CloseParenthesis);
2106
public object VisitParenthesizedExpression(ParenthesizedExpression parenthesizedExpression, object data)
2251
public override object TrackedVisitParenthesizedExpression(ParenthesizedExpression parenthesizedExpression, object data)
2108
2253
outputFormatter.PrintToken(Tokens.OpenParenthesis);
2109
nodeTracker.TrackedVisit(parenthesizedExpression.Expression, data);
2254
TrackedVisit(parenthesizedExpression.Expression, data);
2110
2255
outputFormatter.PrintToken(Tokens.CloseParenthesis);
2114
public object VisitInvocationExpression(InvocationExpression invocationExpression, object data)
2259
public override object TrackedVisitInvocationExpression(InvocationExpression invocationExpression, object data)
2116
nodeTracker.TrackedVisit(invocationExpression.TargetObject, data);
2117
if (invocationExpression.TypeArguments != null && invocationExpression.TypeArguments.Count > 0) {
2118
outputFormatter.PrintToken(Tokens.OpenParenthesis);
2119
outputFormatter.PrintToken(Tokens.Of);
2120
outputFormatter.Space();
2121
AppendCommaSeparatedList(invocationExpression.TypeArguments);
2122
outputFormatter.PrintToken(Tokens.CloseParenthesis);
2261
TrackedVisit(invocationExpression.TargetObject, data);
2124
2262
outputFormatter.PrintToken(Tokens.OpenParenthesis);
2125
2263
AppendCommaSeparatedList(invocationExpression.Arguments);
2126
2264
outputFormatter.PrintToken(Tokens.CloseParenthesis);
2130
public object VisitIdentifierExpression(IdentifierExpression identifierExpression, object data)
2268
void PrintTypeArguments(List<TypeReference> typeArguments)
2270
if (typeArguments != null && typeArguments.Count > 0) {
2271
outputFormatter.PrintToken(Tokens.OpenParenthesis);
2272
outputFormatter.PrintToken(Tokens.Of);
2273
outputFormatter.Space();
2274
AppendCommaSeparatedList(typeArguments);
2275
outputFormatter.PrintToken(Tokens.CloseParenthesis);
2279
public override object TrackedVisitIdentifierExpression(IdentifierExpression identifierExpression, object data)
2132
2281
outputFormatter.PrintIdentifier(identifierExpression.Identifier);
2282
PrintTypeArguments(identifierExpression.TypeArguments);
2136
public object VisitTypeReferenceExpression(TypeReferenceExpression typeReferenceExpression, object data)
2286
public override object TrackedVisitTypeReferenceExpression(TypeReferenceExpression typeReferenceExpression, object data)
2138
nodeTracker.TrackedVisit(typeReferenceExpression.TypeReference, data);
2288
TrackedVisit(typeReferenceExpression.TypeReference, data);
2142
public object VisitUnaryOperatorExpression(UnaryOperatorExpression unaryOperatorExpression, object data)
2292
public override object TrackedVisitUnaryOperatorExpression(UnaryOperatorExpression unaryOperatorExpression, object data)
2144
2294
switch (unaryOperatorExpression.Op) {
2145
2295
case UnaryOperatorType.Not:
2146
2296
case UnaryOperatorType.BitNot:
2147
2297
outputFormatter.PrintToken(Tokens.Not);
2148
2298
outputFormatter.Space();
2149
nodeTracker.TrackedVisit(unaryOperatorExpression.Expression, data);
2299
TrackedVisit(unaryOperatorExpression.Expression, data);
2152
2302
case UnaryOperatorType.Decrement:
2153
2303
outputFormatter.PrintText("System.Threading.Interlocked.Decrement(");
2154
nodeTracker.TrackedVisit(unaryOperatorExpression.Expression, data);
2304
TrackedVisit(unaryOperatorExpression.Expression, data);
2155
2305
outputFormatter.PrintText(")");
2158
2308
case UnaryOperatorType.Increment:
2159
2309
outputFormatter.PrintText("System.Threading.Interlocked.Increment(");
2160
nodeTracker.TrackedVisit(unaryOperatorExpression.Expression, data);
2310
TrackedVisit(unaryOperatorExpression.Expression, data);
2161
2311
outputFormatter.PrintText(")");
2164
2314
case UnaryOperatorType.Minus:
2165
2315
outputFormatter.PrintToken(Tokens.Minus);
2166
nodeTracker.TrackedVisit(unaryOperatorExpression.Expression, data);
2316
TrackedVisit(unaryOperatorExpression.Expression, data);
2169
2319
case UnaryOperatorType.Plus:
2170
2320
outputFormatter.PrintToken(Tokens.Plus);
2171
nodeTracker.TrackedVisit(unaryOperatorExpression.Expression, data);
2321
TrackedVisit(unaryOperatorExpression.Expression, data);
2174
2324
case UnaryOperatorType.PostDecrement:
2175
2325
outputFormatter.PrintText("System.Math.Max(System.Threading.Interlocked.Decrement(");
2176
nodeTracker.TrackedVisit(unaryOperatorExpression.Expression, data);
2326
TrackedVisit(unaryOperatorExpression.Expression, data);
2177
2327
outputFormatter.PrintText("),");
2178
nodeTracker.TrackedVisit(unaryOperatorExpression.Expression, data);
2328
TrackedVisit(unaryOperatorExpression.Expression, data);
2179
2329
outputFormatter.PrintText(" + 1)");
2182
2332
case UnaryOperatorType.PostIncrement:
2183
2333
outputFormatter.PrintText("System.Math.Max(System.Threading.Interlocked.Increment(");
2184
nodeTracker.TrackedVisit(unaryOperatorExpression.Expression, data);
2334
TrackedVisit(unaryOperatorExpression.Expression, data);
2185
2335
outputFormatter.PrintText("),");
2186
nodeTracker.TrackedVisit(unaryOperatorExpression.Expression, data);
2336
TrackedVisit(unaryOperatorExpression.Expression, data);
2187
2337
outputFormatter.PrintText(" - 1)");
2190
case UnaryOperatorType.Star:
2340
case UnaryOperatorType.Dereference:
2191
2341
outputFormatter.PrintToken(Tokens.Times);
2193
case UnaryOperatorType.BitWiseAnd:
2343
case UnaryOperatorType.AddressOf:
2194
2344
outputFormatter.PrintToken(Tokens.AddressOf);
2269
nodeTracker.TrackedVisit(assignmentExpression.Left, data);
2397
TrackedVisit(assignmentExpression.Left, data);
2270
2398
outputFormatter.Space();
2272
2400
if (unsupportedOpAssignment) { // left = left OP right
2273
2401
outputFormatter.PrintToken(Tokens.Assign);
2274
2402
outputFormatter.Space();
2275
nodeTracker.TrackedVisit(assignmentExpression.Left, data);
2403
TrackedVisit(assignmentExpression.Left, data);
2276
2404
outputFormatter.Space();
2279
2407
outputFormatter.PrintToken(op);
2280
2408
outputFormatter.Space();
2281
nodeTracker.TrackedVisit(assignmentExpression.Right, data);
2409
TrackedVisit(assignmentExpression.Right, data);
2286
public object VisitSizeOfExpression(SizeOfExpression sizeOfExpression, object data)
2414
public override object TrackedVisitSizeOfExpression(SizeOfExpression sizeOfExpression, object data)
2288
2416
UnsupportedNode(sizeOfExpression);
2292
public object VisitTypeOfExpression(TypeOfExpression typeOfExpression, object data)
2420
public override object TrackedVisitTypeOfExpression(TypeOfExpression typeOfExpression, object data)
2294
2422
outputFormatter.PrintToken(Tokens.GetType);
2295
2423
outputFormatter.PrintToken(Tokens.OpenParenthesis);
2296
nodeTracker.TrackedVisit(typeOfExpression.TypeReference, data);
2424
TrackedVisit(typeOfExpression.TypeReference, data);
2297
2425
outputFormatter.PrintToken(Tokens.CloseParenthesis);
2301
public object VisitDefaultValueExpression(DefaultValueExpression defaultValueExpression, object data)
2429
public override object TrackedVisitDefaultValueExpression(DefaultValueExpression defaultValueExpression, object data)
2303
2431
// assigning nothing to a generic type in VB compiles to a DefaultValueExpression
2304
2432
outputFormatter.PrintToken(Tokens.Nothing);
2308
public object VisitTypeOfIsExpression(TypeOfIsExpression typeOfIsExpression, object data)
2436
public override object TrackedVisitTypeOfIsExpression(TypeOfIsExpression typeOfIsExpression, object data)
2310
2438
outputFormatter.PrintToken(Tokens.TypeOf);
2311
2439
outputFormatter.Space();
2312
nodeTracker.TrackedVisit(typeOfIsExpression.Expression, data);
2440
TrackedVisit(typeOfIsExpression.Expression, data);
2313
2441
outputFormatter.Space();
2314
2442
outputFormatter.PrintToken(Tokens.Is);
2315
2443
outputFormatter.Space();
2316
nodeTracker.TrackedVisit(typeOfIsExpression.TypeReference, data);
2444
TrackedVisit(typeOfIsExpression.TypeReference, data);
2320
public object VisitAddressOfExpression(AddressOfExpression addressOfExpression, object data)
2448
public override object TrackedVisitAddressOfExpression(AddressOfExpression addressOfExpression, object data)
2322
2450
outputFormatter.PrintToken(Tokens.AddressOf);
2323
2451
outputFormatter.Space();
2324
nodeTracker.TrackedVisit(addressOfExpression.Expression, data);
2452
TrackedVisit(addressOfExpression.Expression, data);
2328
public object VisitAnonymousMethodExpression(AnonymousMethodExpression anonymousMethodExpression, object data)
2456
public override object TrackedVisitAnonymousMethodExpression(AnonymousMethodExpression anonymousMethodExpression, object data)
2330
UnsupportedNode(anonymousMethodExpression);
2458
OutputAnonymousMethodWithStatementBody(anonymousMethodExpression.Parameters, anonymousMethodExpression.Body);
2334
public object VisitCheckedExpression(CheckedExpression checkedExpression, object data)
2462
public override object TrackedVisitCheckedExpression(CheckedExpression checkedExpression, object data)
2336
2464
UnsupportedNode(checkedExpression);
2337
return nodeTracker.TrackedVisit(checkedExpression.Expression, data);
2465
return TrackedVisit(checkedExpression.Expression, data);
2340
public object VisitUncheckedExpression(UncheckedExpression uncheckedExpression, object data)
2468
public override object TrackedVisitUncheckedExpression(UncheckedExpression uncheckedExpression, object data)
2342
2470
UnsupportedNode(uncheckedExpression);
2343
return nodeTracker.TrackedVisit(uncheckedExpression.Expression, data);
2471
return TrackedVisit(uncheckedExpression.Expression, data);
2346
public object VisitPointerReferenceExpression(PointerReferenceExpression pointerReferenceExpression, object data)
2474
public override object TrackedVisitPointerReferenceExpression(PointerReferenceExpression pointerReferenceExpression, object data)
2348
2476
UnsupportedNode(pointerReferenceExpression);
2352
public object VisitCastExpression(CastExpression castExpression, object data)
2480
public override object TrackedVisitCastExpression(CastExpression castExpression, object data)
2354
if (castExpression.CastType == CastType.Cast) {
2355
return PrintCast(Tokens.DirectCast, castExpression);
2357
2482
if (castExpression.CastType == CastType.TryCast) {
2358
2483
return PrintCast(Tokens.TryCast, castExpression);
2485
if (castExpression.CastType == CastType.Cast || castExpression.CastTo.IsArrayType) {
2486
return PrintCast(Tokens.DirectCast, castExpression);
2360
2488
switch (castExpression.CastTo.SystemType) {
2361
2489
case "System.Boolean":
2362
2490
outputFormatter.PrintToken(Tokens.CBool);
2420
2548
outputFormatter.PrintToken(castToken);
2421
2549
outputFormatter.PrintToken(Tokens.OpenParenthesis);
2422
nodeTracker.TrackedVisit(castExpression.Expression, null);
2550
TrackedVisit(castExpression.Expression, null);
2423
2551
outputFormatter.PrintToken(Tokens.Comma);
2424
2552
outputFormatter.Space();
2425
nodeTracker.TrackedVisit(castExpression.CastTo, null);
2553
TrackedVisit(castExpression.CastTo, null);
2426
2554
outputFormatter.PrintToken(Tokens.CloseParenthesis);
2430
public object VisitStackAllocExpression(StackAllocExpression stackAllocExpression, object data)
2558
public override object TrackedVisitStackAllocExpression(StackAllocExpression stackAllocExpression, object data)
2432
2560
UnsupportedNode(stackAllocExpression);
2436
public object VisitIndexerExpression(IndexerExpression indexerExpression, object data)
2564
public override object TrackedVisitIndexerExpression(IndexerExpression indexerExpression, object data)
2438
nodeTracker.TrackedVisit(indexerExpression.TargetObject, data);
2566
TrackedVisit(indexerExpression.TargetObject, data);
2439
2567
outputFormatter.PrintToken(Tokens.OpenParenthesis);
2440
2568
AppendCommaSeparatedList(indexerExpression.Indexes);
2441
2569
outputFormatter.PrintToken(Tokens.CloseParenthesis);
2445
public object VisitThisReferenceExpression(ThisReferenceExpression thisReferenceExpression, object data)
2573
public override object TrackedVisitThisReferenceExpression(ThisReferenceExpression thisReferenceExpression, object data)
2447
2575
outputFormatter.PrintToken(Tokens.Me);
2451
public object VisitBaseReferenceExpression(BaseReferenceExpression baseReferenceExpression, object data)
2579
public override object TrackedVisitBaseReferenceExpression(BaseReferenceExpression baseReferenceExpression, object data)
2453
2581
outputFormatter.PrintToken(Tokens.MyBase);
2457
public object VisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression, object data)
2585
public override object TrackedVisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression, object data)
2459
2587
outputFormatter.PrintToken(Tokens.New);
2460
2588
outputFormatter.Space();
2461
nodeTracker.TrackedVisit(objectCreateExpression.CreateType, data);
2589
TrackedVisit(objectCreateExpression.CreateType, data);
2462
2590
outputFormatter.PrintToken(Tokens.OpenParenthesis);
2463
2591
AppendCommaSeparatedList(objectCreateExpression.Parameters);
2464
2592
outputFormatter.PrintToken(Tokens.CloseParenthesis);
2468
public object VisitArrayCreateExpression(ArrayCreateExpression arrayCreateExpression, object data)
2596
public override object TrackedVisitArrayCreateExpression(ArrayCreateExpression arrayCreateExpression, object data)
2470
2598
outputFormatter.PrintToken(Tokens.New);
2471
2599
outputFormatter.Space();
2502
public object VisitFieldReferenceExpression(FieldReferenceExpression fieldReferenceExpression, object data)
2630
public override object TrackedVisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression, object data)
2504
nodeTracker.TrackedVisit(fieldReferenceExpression.TargetObject, data);
2632
TrackedVisit(memberReferenceExpression.TargetObject, data);
2505
2633
outputFormatter.PrintToken(Tokens.Dot);
2506
outputFormatter.PrintIdentifier(fieldReferenceExpression.FieldName);
2634
outputFormatter.PrintIdentifier(memberReferenceExpression.MemberName);
2635
PrintTypeArguments(memberReferenceExpression.TypeArguments);
2510
public object VisitDirectionExpression(DirectionExpression directionExpression, object data)
2639
public override object TrackedVisitDirectionExpression(DirectionExpression directionExpression, object data)
2512
2641
// VB does not need to specify the direction in method calls
2513
nodeTracker.TrackedVisit(directionExpression.Expression, data);
2642
TrackedVisit(directionExpression.Expression, data);
2518
public object VisitConditionalExpression(ConditionalExpression conditionalExpression, object data)
2647
public override object TrackedVisitConditionalExpression(ConditionalExpression conditionalExpression, object data)
2520
// No representation in VB.NET, but VB conversion is possible.
2521
outputFormatter.PrintText("IIf");
2649
outputFormatter.PrintText("If");
2522
2650
outputFormatter.PrintToken(Tokens.OpenParenthesis);
2523
nodeTracker.TrackedVisit(conditionalExpression.Condition, data);
2524
outputFormatter.PrintToken(Tokens.Comma);
2525
nodeTracker.TrackedVisit(conditionalExpression.TrueExpression, data);
2526
outputFormatter.PrintToken(Tokens.Comma);
2527
nodeTracker.TrackedVisit(conditionalExpression.FalseExpression, data);
2651
TrackedVisit(conditionalExpression.Condition, data);
2652
outputFormatter.PrintToken(Tokens.Comma);
2653
outputFormatter.Space();
2654
TrackedVisit(conditionalExpression.TrueExpression, data);
2655
outputFormatter.PrintToken(Tokens.Comma);
2656
outputFormatter.Space();
2657
TrackedVisit(conditionalExpression.FalseExpression, data);
2528
2658
outputFormatter.PrintToken(Tokens.CloseParenthesis);
2674
2808
foreach (AttributeSection section in attributes) {
2675
nodeTracker.TrackedVisit(section, data);
2680
static bool IsEventHandlerCreation(Expression expr)
2682
if (expr is ObjectCreateExpression) {
2683
ObjectCreateExpression oce = (ObjectCreateExpression) expr;
2684
if (oce.Parameters.Count == 1) {
2685
return oce.CreateType.SystemType.EndsWith("Handler");
2691
// can only get called if IsEventHandlerCreation returned true for the expression
2692
static Expression GetEventHandlerMethod(Expression expr)
2694
ObjectCreateExpression oce = (ObjectCreateExpression)expr;
2695
return oce.Parameters[0];
2809
TrackedVisit(section, data);
2813
public override object TrackedVisitLambdaExpression(LambdaExpression lambdaExpression, object data)
2815
if (!lambdaExpression.ExpressionBody.IsNull) {
2816
outputFormatter.PrintToken(Tokens.Function);
2817
outputFormatter.PrintToken(Tokens.OpenParenthesis);
2818
AppendCommaSeparatedList(lambdaExpression.Parameters);
2819
outputFormatter.PrintToken(Tokens.CloseParenthesis);
2820
outputFormatter.Space();
2821
return lambdaExpression.ExpressionBody.AcceptVisitor(this, data);
2823
OutputAnonymousMethodWithStatementBody(lambdaExpression.Parameters, lambdaExpression.StatementBody);
2828
void OutputAnonymousMethodWithStatementBody(List<ParameterDeclarationExpression> parameters, BlockStatement body)
2830
Error("VB does not support anonymous methods/lambda expressions with a statement body", body.StartLocation);
2832
outputFormatter.PrintToken(Tokens.Function);
2833
outputFormatter.PrintToken(Tokens.OpenParenthesis);
2834
AppendCommaSeparatedList(parameters);
2835
outputFormatter.PrintToken(Tokens.CloseParenthesis);
2836
outputFormatter.Space();
2837
outputFormatter.PrintToken(Tokens.Do);
2838
outputFormatter.NewLine();
2840
++outputFormatter.IndentationLevel;
2841
exitTokenStack.Push(Tokens.Function);
2842
body.AcceptVisitor(this, null);
2843
exitTokenStack.Pop();
2844
--outputFormatter.IndentationLevel;
2846
outputFormatter.Indent();
2847
outputFormatter.PrintToken(Tokens.End);
2848
outputFormatter.Space();
2849
outputFormatter.PrintToken(Tokens.Function);
2852
public override object TrackedVisitQueryExpression(QueryExpression queryExpression, object data)
2854
outputFormatter.IndentationLevel++;
2855
queryExpression.FromClause.AcceptVisitor(this, data);
2856
queryExpression.MiddleClauses.ForEach(PrintClause);
2857
PrintClause(queryExpression.SelectOrGroupClause);
2858
PrintClause(queryExpression.IntoClause);
2859
outputFormatter.IndentationLevel--;
2863
void PrintClause(QueryExpressionClause clause)
2865
if (!clause.IsNull) {
2866
outputFormatter.PrintLineContinuation();
2867
outputFormatter.Indent();
2868
clause.AcceptVisitor(this, null);
2872
public override object TrackedVisitQueryExpressionFromClause(QueryExpressionFromClause fromClause, object data)
2874
outputFormatter.PrintText("From");
2875
outputFormatter.Space();
2876
VisitQueryExpressionFromOrJoinClause(fromClause, data);
2880
public override object TrackedVisitQueryExpressionJoinClause(QueryExpressionJoinClause joinClause, object data)
2882
outputFormatter.PrintText("Join");
2883
outputFormatter.Space();
2884
VisitQueryExpressionFromOrJoinClause(joinClause, data);
2885
outputFormatter.Space();
2886
outputFormatter.PrintToken(Tokens.On);
2887
outputFormatter.Space();
2888
joinClause.OnExpression.AcceptVisitor(this, data);
2889
outputFormatter.Space();
2890
outputFormatter.PrintToken(Tokens.Assign);
2891
outputFormatter.Space();
2892
joinClause.EqualsExpression.AcceptVisitor(this, data);
2893
if (!string.IsNullOrEmpty(joinClause.IntoIdentifier)) {
2894
outputFormatter.Space();
2895
outputFormatter.PrintText("Into");
2896
outputFormatter.Space();
2897
outputFormatter.PrintIdentifier(joinClause.IntoIdentifier);
2902
void VisitQueryExpressionFromOrJoinClause(QueryExpressionFromOrJoinClause clause, object data)
2904
outputFormatter.PrintIdentifier(clause.Identifier);
2905
outputFormatter.Space();
2906
outputFormatter.PrintToken(Tokens.In);
2907
outputFormatter.Space();
2908
clause.InExpression.AcceptVisitor(this, data);
2911
public override object TrackedVisitQueryExpressionLetClause(QueryExpressionLetClause letClause, object data)
2913
outputFormatter.PrintToken(Tokens.Let);
2914
outputFormatter.Space();
2915
outputFormatter.PrintIdentifier(letClause.Identifier);
2916
outputFormatter.Space();
2917
outputFormatter.PrintToken(Tokens.Assign);
2918
outputFormatter.Space();
2919
return letClause.Expression.AcceptVisitor(this, data);
2922
public override object TrackedVisitQueryExpressionGroupClause(QueryExpressionGroupClause groupClause, object data)
2924
outputFormatter.PrintText("Group");
2925
outputFormatter.Space();
2926
groupClause.Projection.AcceptVisitor(this, data);
2927
outputFormatter.Space();
2928
outputFormatter.PrintText("By");
2929
outputFormatter.Space();
2930
return groupClause.GroupBy.AcceptVisitor(this, data);
2933
public override object TrackedVisitQueryExpressionIntoClause(QueryExpressionIntoClause intoClause, object data)
2935
outputFormatter.PrintText("Into");
2936
outputFormatter.Space();
2937
outputFormatter.PrintIdentifier(intoClause.IntoIdentifier);
2938
outputFormatter.Space();
2939
return intoClause.ContinuedQuery.AcceptVisitor(this, data);
2942
public override object TrackedVisitQueryExpressionOrderClause(QueryExpressionOrderClause queryExpressionOrderClause, object data)
2944
outputFormatter.PrintText("Order By");
2945
outputFormatter.Space();
2946
AppendCommaSeparatedList(queryExpressionOrderClause.Orderings);
2950
public override object TrackedVisitQueryExpressionOrdering(QueryExpressionOrdering ordering, object data)
2952
ordering.Criteria.AcceptVisitor(this, data);
2953
if (ordering.Direction == QueryExpressionOrderingDirection.Ascending) {
2954
outputFormatter.Space();
2955
outputFormatter.PrintText("Ascending");
2956
} else if (ordering.Direction == QueryExpressionOrderingDirection.Descending) {
2957
outputFormatter.Space();
2958
outputFormatter.PrintText("Descending");
2963
public override object TrackedVisitQueryExpressionSelectClause(QueryExpressionSelectClause selectClause, object data)
2965
outputFormatter.PrintToken(Tokens.Select);
2966
outputFormatter.Space();
2967
return selectClause.Projection.AcceptVisitor(this, data);
2970
public override object TrackedVisitQueryExpressionWhereClause(QueryExpressionWhereClause whereClause, object data)
2972
outputFormatter.PrintText("Where");
2973
outputFormatter.Space();
2974
return whereClause.Condition.AcceptVisitor(this, data);