diff --git a/Rewrite/Directory.Build.props b/Rewrite/Directory.Build.props index 56642ab9..ac1d0961 100644 --- a/Rewrite/Directory.Build.props +++ b/Rewrite/Directory.Build.props @@ -12,5 +12,7 @@ 0.8.7 0.8.2-rc.* ..\..\..\..\..\moderneinc\rewrite-remote\Rewrite.Remote + TRACE;DEBUG;REMOTE_PRINTER + diff --git a/Rewrite/src/Rewrite.CSharp/CSharpPrinter.cs b/Rewrite/src/Rewrite.CSharp/CSharpPrinter.cs index 6a4fe204..04d3c19d 100644 --- a/Rewrite/src/Rewrite.CSharp/CSharpPrinter.cs +++ b/Rewrite/src/Rewrite.CSharp/CSharpPrinter.cs @@ -28,7 +28,7 @@ namespace Rewrite.RewriteCSharp; -public class CSharpPrinter

: CSharpVisitor> +public class CSharpPrinter : CSharpVisitor> { private readonly CSharpJavaPrinter _delegate; @@ -39,7 +39,7 @@ public CSharpPrinter() // [DebuggerNonUserCode] // [DebuggerStepperBoundary] - public override J? Visit(Rewrite.Core.Tree? tree, PrintOutputCapture

p) + public override J? Visit(Rewrite.Core.Tree? tree, PrintOutputCapture p) { if (!(tree is Cs)) { @@ -52,7 +52,7 @@ public CSharpPrinter() } } - public override J? VisitNamedArgument(Cs.NamedArgument namedArgument, PrintOutputCapture

p) + public override J? VisitNamedArgument(Cs.NamedArgument namedArgument, PrintOutputCapture p) { BeforeSyntax(namedArgument, CsSpace.Location.NAMED_ARGUMENT_PREFIX, p); var padding = namedArgument.Padding; @@ -64,7 +64,7 @@ public CSharpPrinter() return namedArgument; } - public override Cs VisitCompilationUnit(Cs.CompilationUnit compilationUnit, PrintOutputCapture

p) + public override Cs VisitCompilationUnit(Cs.CompilationUnit compilationUnit, PrintOutputCapture p) { BeforeSyntax(compilationUnit, Space.Location.COMPILATION_UNIT_PREFIX, p); @@ -92,7 +92,7 @@ public override Cs VisitCompilationUnit(Cs.CompilationUnit compilationUnit, Prin return compilationUnit; } - public override J? VisitAnnotatedStatement(Cs.AnnotatedStatement annotatedStatement, PrintOutputCapture

p) + public override J? VisitAnnotatedStatement(Cs.AnnotatedStatement annotatedStatement, PrintOutputCapture p) { BeforeSyntax(annotatedStatement, CsSpace.Location.ANNOTATED_STATEMENT_PREFIX, p); @@ -107,7 +107,7 @@ public override Cs VisitCompilationUnit(Cs.CompilationUnit compilationUnit, Prin return annotatedStatement; } - public override J? VisitAttributeList(Cs.AttributeList attributeList, PrintOutputCapture

p) + public override J? VisitAttributeList(Cs.AttributeList attributeList, PrintOutputCapture p) { BeforeSyntax(attributeList, CsSpace.Location.ATTRIBUTE_LIST_PREFIX, p); p.Append('['); @@ -124,7 +124,7 @@ public override Cs VisitCompilationUnit(Cs.CompilationUnit compilationUnit, Prin return attributeList; } - public override J? VisitArrayRankSpecifier(Cs.ArrayRankSpecifier arrayRankSpecifier, PrintOutputCapture

p) + public override J? VisitArrayRankSpecifier(Cs.ArrayRankSpecifier arrayRankSpecifier, PrintOutputCapture p) { BeforeSyntax(arrayRankSpecifier, CsSpace.Location.ARRAY_RANK_SPECIFIER_PREFIX, p); VisitContainer("", arrayRankSpecifier.Padding.Sizes, CsContainer.Location.ARRAY_RANK_SPECIFIER_SIZES, ",", "", @@ -133,7 +133,7 @@ public override Cs VisitCompilationUnit(Cs.CompilationUnit compilationUnit, Prin return arrayRankSpecifier; } - public override J? VisitAssignmentOperation(Cs.AssignmentOperation assignmentOperation, PrintOutputCapture

p) + public override J? VisitAssignmentOperation(Cs.AssignmentOperation assignmentOperation, PrintOutputCapture p) { BeforeSyntax(assignmentOperation, CsSpace.Location.ASSIGNMENT_OPERATION_PREFIX, p); Visit(assignmentOperation.Variable, p); @@ -148,7 +148,7 @@ public override Cs VisitCompilationUnit(Cs.CompilationUnit compilationUnit, Prin return assignmentOperation; } - public override J? VisitAwaitExpression(Cs.AwaitExpression awaitExpression, PrintOutputCapture

p) + public override J? VisitAwaitExpression(Cs.AwaitExpression awaitExpression, PrintOutputCapture p) { BeforeSyntax(awaitExpression, CsSpace.Location.AWAIT_EXPRESSION_PREFIX, p); p.Append("await"); @@ -157,7 +157,7 @@ public override Cs VisitCompilationUnit(Cs.CompilationUnit compilationUnit, Prin return awaitExpression; } - public override J? VisitBinary(Cs.Binary binary, PrintOutputCapture

p) + public override J? VisitBinary(Cs.Binary binary, PrintOutputCapture p) { BeforeSyntax(binary, CsSpace.Location.BINARY_PREFIX, p); Visit(binary.Left, p); @@ -177,7 +177,7 @@ public override Cs VisitCompilationUnit(Cs.CompilationUnit compilationUnit, Prin } public override Cs VisitBlockScopeNamespaceDeclaration(Cs.BlockScopeNamespaceDeclaration namespaceDeclaration, - PrintOutputCapture

p) + PrintOutputCapture p) { BeforeSyntax(namespaceDeclaration, CsSpace.Location.BLOCK_SCOPE_NAMESPACE_DECLARATION_PREFIX, p); p.Append("namespace"); @@ -205,7 +205,7 @@ public override Cs VisitBlockScopeNamespaceDeclaration(Cs.BlockScopeNamespaceDec return namespaceDeclaration; } - public override J? VisitCollectionExpression(Cs.CollectionExpression collectionExpression, PrintOutputCapture

p) + public override J? VisitCollectionExpression(Cs.CollectionExpression collectionExpression, PrintOutputCapture p) { BeforeSyntax(collectionExpression, CsSpace.Location.COLLECTION_EXPRESSION_PREFIX, p); p.Append('['); @@ -216,7 +216,7 @@ public override Cs VisitBlockScopeNamespaceDeclaration(Cs.BlockScopeNamespaceDec return collectionExpression; } - public override J? VisitExpressionStatement(Cs.ExpressionStatement expressionStatement, PrintOutputCapture

p) + public override J? VisitExpressionStatement(Cs.ExpressionStatement expressionStatement, PrintOutputCapture p) { BeforeSyntax(expressionStatement, CsSpace.Location.AWAIT_EXPRESSION_PREFIX, p); Visit(expressionStatement.Expression, p); @@ -224,7 +224,7 @@ public override Cs VisitBlockScopeNamespaceDeclaration(Cs.BlockScopeNamespaceDec return expressionStatement; } - public override J? VisitExternAlias(Cs.ExternAlias externAlias, PrintOutputCapture

p) + public override J? VisitExternAlias(Cs.ExternAlias externAlias, PrintOutputCapture p) { BeforeSyntax(externAlias, CsSpace.Location.EXTERN_ALIAS_PREFIX, p); p.Append("extern"); @@ -234,7 +234,7 @@ public override Cs VisitBlockScopeNamespaceDeclaration(Cs.BlockScopeNamespaceDec } public override Cs VisitFileScopeNamespaceDeclaration(Cs.FileScopeNamespaceDeclaration namespaceDeclaration, - PrintOutputCapture

p) + PrintOutputCapture p) { BeforeSyntax(namespaceDeclaration, CsSpace.Location.FILE_SCOPE_NAMESPACE_DECLARATION_PREFIX, p); p.Append("namespace"); @@ -259,7 +259,7 @@ public override Cs VisitFileScopeNamespaceDeclaration(Cs.FileScopeNamespaceDecla return namespaceDeclaration; } - public override J? VisitInterpolatedString(Cs.InterpolatedString interpolatedString, PrintOutputCapture

p) + public override J? VisitInterpolatedString(Cs.InterpolatedString interpolatedString, PrintOutputCapture p) { BeforeSyntax(interpolatedString, CsSpace.Location.INTERPOLATED_STRING_PREFIX, p); p.Append(interpolatedString.Start); @@ -269,7 +269,7 @@ public override Cs VisitFileScopeNamespaceDeclaration(Cs.FileScopeNamespaceDecla return interpolatedString; } - public override J? VisitInterpolation(Cs.Interpolation interpolation, PrintOutputCapture

p) + public override J? VisitInterpolation(Cs.Interpolation interpolation, PrintOutputCapture p) { BeforeSyntax(interpolation, CsSpace.Location.INTERPOLATION_PREFIX, p); p.Append('{'); @@ -292,7 +292,7 @@ public override Cs VisitFileScopeNamespaceDeclaration(Cs.FileScopeNamespaceDecla return interpolation; } - public override J? VisitNullSafeExpression(Cs.NullSafeExpression nullSafeExpression, PrintOutputCapture

p) + public override J? VisitNullSafeExpression(Cs.NullSafeExpression nullSafeExpression, PrintOutputCapture p) { BeforeSyntax(nullSafeExpression, CsSpace.Location.NULL_SAFE_EXPRESSION_PREFIX, p); VisitRightPadded(nullSafeExpression.Padding.Expression, CsRightPadded.Location.NULL_SAFE_EXPRESSION_EXPRESSION, @@ -302,7 +302,7 @@ public override Cs VisitFileScopeNamespaceDeclaration(Cs.FileScopeNamespaceDecla return nullSafeExpression; } - public override J? VisitPropertyDeclaration(Cs.PropertyDeclaration propertyDeclaration, PrintOutputCapture

p) + public override J? VisitPropertyDeclaration(Cs.PropertyDeclaration propertyDeclaration, PrintOutputCapture p) { BeforeSyntax(propertyDeclaration, CsSpace.Location.PROPERTY_DECLARATION_PREFIX, p); Visit(propertyDeclaration.AttributeLists, p); @@ -334,7 +334,7 @@ public override Cs VisitFileScopeNamespaceDeclaration(Cs.FileScopeNamespaceDecla return propertyDeclaration; } - public override J? VisitUsingDirective(Cs.UsingDirective usingDirective, PrintOutputCapture

p) + public override J? VisitUsingDirective(Cs.UsingDirective usingDirective, PrintOutputCapture p) { BeforeSyntax(usingDirective, CsSpace.Location.USING_DIRECTIVE_PREFIX, p); @@ -368,18 +368,18 @@ public override Cs VisitFileScopeNamespaceDeclaration(Cs.FileScopeNamespaceDecla return usingDirective; } - protected override Space VisitSpace(Space space, CsSpace.Location loc, PrintOutputCapture

p) + protected override Space VisitSpace(Space space, CsSpace.Location loc, PrintOutputCapture p) { return _delegate.VisitSpace(space, Space.Location.LANGUAGE_EXTENSION, p); } - public override Space VisitSpace(Space space, Space.Location? loc, PrintOutputCapture

p) + public override Space VisitSpace(Space space, Space.Location? loc, PrintOutputCapture p) { return _delegate.VisitSpace(space, loc, p); } protected void VisitLeftPadded(string prefix, JLeftPadded? leftPadded, CsLeftPadded.Location location, - PrintOutputCapture

p) where T : J + PrintOutputCapture p) where T : J { if (leftPadded != null) { @@ -396,7 +396,7 @@ protected void VisitLeftPadded(string prefix, JLeftPadded? leftPadded, CsL } protected void VisitContainer(string before, JContainer container, CsContainer.Location location, - string suffixBetween, string after, PrintOutputCapture

p) where T : J + string suffixBetween, string after, PrintOutputCapture p) where T : J { if (container == null) { @@ -410,7 +410,7 @@ protected void VisitContainer(string before, JContainer container, CsConta } protected void VisitRightPadded(IList> nodes, CsRightPadded.Location location, - string suffixBetween, PrintOutputCapture

p) where T : J + string suffixBetween, PrintOutputCapture p) where T : J { for (int i = 0; i < nodes.Count; i++) { @@ -427,7 +427,7 @@ protected void VisitRightPadded(IList> nodes, CsRightPadded.L } protected void VisitStatements(string before, JContainer container, CsContainer.Location location, - string after, PrintOutputCapture

p) + string after, PrintOutputCapture p) { if (container == null) { @@ -441,7 +441,7 @@ protected void VisitStatements(string before, JContainer container, C } protected void VisitStatements(IList> statements, CsRightPadded.Location location, - PrintOutputCapture

p) + PrintOutputCapture p) { foreach (var paddedStat in statements) { @@ -450,7 +450,7 @@ protected void VisitStatements(IList> statements, CsRigh } protected void VisitStatement(JRightPadded paddedStat, CsRightPadded.Location location, - PrintOutputCapture

p) + PrintOutputCapture p) { if (paddedStat == null) { @@ -470,10 +470,10 @@ protected void VisitStatement(JRightPadded paddedStat, CsRightPadded. _delegate.PrintStatementTerminator(paddedStat.Element, p); } - private class CSharpJavaPrinter(CSharpPrinter

_parent) : JavaPrinter

+ private class CSharpJavaPrinter(CSharpPrinter _parent) : JavaPrinter { [DebuggerHidden] - public override J? Visit(Rewrite.Core.Tree? tree, PrintOutputCapture

p) + public override J? Visit(Rewrite.Core.Tree? tree, PrintOutputCapture p) { if (tree is Cs) { @@ -486,7 +486,7 @@ private class CSharpJavaPrinter(CSharpPrinter

_parent) : JavaPrinter

} } - public override J VisitClassDeclaration(J.ClassDeclaration classDecl, PrintOutputCapture

p) + public override J VisitClassDeclaration(J.ClassDeclaration classDecl, PrintOutputCapture p) { string kind = classDecl.Padding.DeclarationKind.KindType switch { @@ -523,7 +523,7 @@ public override J VisitClassDeclaration(J.ClassDeclaration classDecl, PrintOutpu return classDecl; } - public override J VisitAnnotation(J.Annotation annotation, PrintOutputCapture

p) + public override J VisitAnnotation(J.Annotation annotation, PrintOutputCapture p) { BeforeSyntax(annotation, Space.Location.ANNOTATION_PREFIX, p); Visit(annotation.AnnotationType, p); @@ -533,7 +533,7 @@ public override J VisitAnnotation(J.Annotation annotation, PrintOutputCapture

} - public override J VisitBlock(J.Block block, PrintOutputCapture

p) + public override J VisitBlock(J.Block block, PrintOutputCapture p) { BeforeSyntax(block, Space.Location.BLOCK_PREFIX, p); @@ -569,7 +569,7 @@ public override J VisitBlock(J.Block block, PrintOutputCapture

p) protected override void VisitStatements(IList> statements, JRightPadded.Location location, - PrintOutputCapture

p) + PrintOutputCapture p) { for (int i = 0; i < statements.Count; i++) { @@ -585,7 +585,7 @@ protected override void VisitStatements(IList> statement } } - public override J VisitMethodDeclaration(J.MethodDeclaration method, PrintOutputCapture

p) + public override J VisitMethodDeclaration(J.MethodDeclaration method, PrintOutputCapture p) { BeforeSyntax(method, Space.Location.METHOD_DECLARATION_PREFIX, p); VisitSpace(Space.EMPTY, Space.Location.ANNOTATIONS, p); @@ -624,10 +624,11 @@ public override J VisitMethodDeclaration(J.MethodDeclaration method, PrintOutput return method; } - public override J VisitMethodInvocation(J.MethodInvocation method, PrintOutputCapture

p) + public override J VisitMethodInvocation(J.MethodInvocation method, PrintOutputCapture p) { BeforeSyntax(method, Space.Location.METHOD_INVOCATION_PREFIX, p); - VisitRightPadded(method.Padding.Select, JRightPadded.Location.METHOD_SELECT, ".", p); + var prefix = method.Name.SimpleName != "" ? "." : ""; + VisitRightPadded(method.Padding.Select, JRightPadded.Location.METHOD_SELECT, prefix, p); Visit(method.Name, p); VisitContainer("<", method.Padding.TypeParameters, JContainer.Location.TYPE_PARAMETERS, ",", ">", p); VisitContainer("(", method.Padding.Arguments, JContainer.Location.METHOD_INVOCATION_ARGUMENTS, ",", ")", p); @@ -635,7 +636,7 @@ public override J VisitMethodInvocation(J.MethodInvocation method, PrintOutputCa return method; } - public override J VisitCatch(J.Try.Catch catch_, PrintOutputCapture

p) + public override J VisitCatch(J.Try.Catch catch_, PrintOutputCapture p) { BeforeSyntax(catch_, Space.Location.CATCH_PREFIX, p); p.Append("catch"); @@ -649,7 +650,7 @@ public override J VisitCatch(J.Try.Catch catch_, PrintOutputCapture

p) return catch_; } - public override J VisitForEachLoop(J.ForEachLoop forEachLoop, PrintOutputCapture

p) + public override J VisitForEachLoop(J.ForEachLoop forEachLoop, PrintOutputCapture p) { BeforeSyntax(forEachLoop, Space.Location.FOR_EACH_LOOP_PREFIX, p); p.Append("foreach"); @@ -664,7 +665,7 @@ public override J VisitForEachLoop(J.ForEachLoop forEachLoop, PrintOutputCapture return forEachLoop; } - public override J VisitInstanceOf(J.InstanceOf instanceOf, PrintOutputCapture

p) + public override J VisitInstanceOf(J.InstanceOf instanceOf, PrintOutputCapture p) { BeforeSyntax(instanceOf, Space.Location.INSTANCEOF_PREFIX, p); VisitRightPadded(instanceOf.Padding.Expression, JRightPadded.Location.INSTANCEOF, "is", p); @@ -674,7 +675,7 @@ public override J VisitInstanceOf(J.InstanceOf instanceOf, PrintOutputCapture

return instanceOf; } - public override J VisitLambda(J.Lambda lambda, PrintOutputCapture

p) + public override J VisitLambda(J.Lambda lambda, PrintOutputCapture p) { BeforeSyntax(lambda, Space.Location.LAMBDA_PREFIX, p); VisitSpace(lambda.Params.Prefix, Space.Location.LAMBDA_PARAMETERS_PREFIX, p); @@ -698,7 +699,7 @@ public override J VisitLambda(J.Lambda lambda, PrintOutputCapture

p) return lambda; } - public override J VisitPrimitive(J.Primitive primitive, PrintOutputCapture

p) + public override J VisitPrimitive(J.Primitive primitive, PrintOutputCapture p) { string keyword = primitive.Type.Kind switch { @@ -725,7 +726,7 @@ public override J VisitPrimitive(J.Primitive primitive, PrintOutputCapture

p) return primitive; } - public override J VisitTry(J.Try tryable, PrintOutputCapture

p) + public override J VisitTry(J.Try tryable, PrintOutputCapture p) { if (tryable.Padding.Resources != null) { @@ -762,13 +763,13 @@ public override J VisitTry(J.Try tryable, PrintOutputCapture

p) return base.VisitTry(tryable, p); } - public override J? VisitModifier(J.Modifier mod, PrintOutputCapture

p) + public override J? VisitModifier(J.Modifier mod, PrintOutputCapture p) { return base.VisitModifier(mod, p); } - public override M VisitMarker(M marker, PrintOutputCapture

p) + public override M VisitMarker(M marker, PrintOutputCapture p) { if (marker is Semicolon) { @@ -784,7 +785,7 @@ public override M VisitMarker(M marker, PrintOutputCapture

p) } // override print - public override void PrintStatementTerminator(Statement s, PrintOutputCapture

p) + public override void PrintStatementTerminator(Statement s, PrintOutputCapture p) { var parent = Cursor.Parent; if (parent != null && parent.Value is J.NewClass || @@ -823,7 +824,7 @@ annotatedStatement.Statement is J.ClassDeclaration innerClassDeclaration && } } - public override Markers VisitMarkers(Markers? markers, PrintOutputCapture

p) + public override Markers VisitMarkers(Markers? markers, PrintOutputCapture p) { return _delegate.VisitMarkers(markers, p); } @@ -831,17 +832,17 @@ public override Markers VisitMarkers(Markers? markers, PrintOutputCapture

p) private static readonly Func JAVA_MARKER_WRAPPER = o => "/*~~" + o + (string.IsNullOrEmpty(o) ? "" : "~~") + ">*/"; - private void BeforeSyntax(Cs cs, Space.Location loc, PrintOutputCapture

p) + private void BeforeSyntax(Cs cs, Space.Location loc, PrintOutputCapture p) { BeforeSyntax(cs.Prefix, cs.Markers, loc, p); } - private void BeforeSyntax(Cs cs, CsSpace.Location loc, PrintOutputCapture

p) + private void BeforeSyntax(Cs cs, CsSpace.Location loc, PrintOutputCapture p) { BeforeSyntax(cs.Prefix, cs.Markers, loc, p); } - private void BeforeSyntax(Space prefix, Markers markers, CsSpace.Location? loc, PrintOutputCapture

p) + private void BeforeSyntax(Space prefix, Markers markers, CsSpace.Location? loc, PrintOutputCapture p) { foreach (var marker in markers.MarkerList) { @@ -861,7 +862,7 @@ private void BeforeSyntax(Space prefix, Markers markers, CsSpace.Location? loc, } } - private void BeforeSyntax(Space prefix, Markers markers, Space.Location? loc, PrintOutputCapture

p) + private void BeforeSyntax(Space prefix, Markers markers, Space.Location? loc, PrintOutputCapture p) { foreach (var marker in markers.MarkerList) { @@ -882,12 +883,12 @@ private void BeforeSyntax(Space prefix, Markers markers, Space.Location? loc, Pr } - private void AfterSyntax(Cs g, PrintOutputCapture

p) + private void AfterSyntax(Cs g, PrintOutputCapture p) { AfterSyntax(g.Markers, p); } - private void AfterSyntax(Markers markers, PrintOutputCapture

p) + private void AfterSyntax(Markers markers, PrintOutputCapture p) { foreach (var marker in markers.MarkerList) { diff --git a/Rewrite/src/Rewrite.CSharp/Extensions.cs b/Rewrite/src/Rewrite.CSharp/Extensions.cs new file mode 100644 index 00000000..ecf86068 --- /dev/null +++ b/Rewrite/src/Rewrite.CSharp/Extensions.cs @@ -0,0 +1,45 @@ +using System.Collections; +using Rewrite.Core; +using Rewrite.RewriteJava.Tree; + +namespace Rewrite.RewriteCSharp; + +public static class Extensions +{ + public static IEnumerable Descendents(this TNode source) where TNode : Core.Tree + { + var searchVisitor = new SearchVisitor(); + searchVisitor.Visit(source, null); + return searchVisitor.Visited; + } + + public static TRoot ReplaceNode(this TRoot root, J oldNode, J newNode) + where TRoot : Core.Tree + { + var newRoot = new ReplaceVisitor(oldNode, newNode).Visit(root, null); + return (TRoot)newRoot!; + } + + private class ReplaceVisitor(J oldNode, J newNode) : CSharpVisitor + { + public override J? PreVisit(Core.Tree? tree, object? p) + { + if (oldNode.Equals(tree)) + { + return newNode; + } + return base.PreVisit(tree, p); + } + } + + private class SearchVisitor : CSharpVisitor + { + public List Visited { get; } = new (); + public override J? PostVisit(Core.Tree tree, object? p) + { + + Visited.Add(tree); + return base.PostVisit(tree, p); + } + } +} diff --git a/Rewrite/src/Rewrite.CSharp/Marker/MemberBinding.cs b/Rewrite/src/Rewrite.CSharp/Marker/MemberBinding.cs new file mode 100644 index 00000000..80417e2f --- /dev/null +++ b/Rewrite/src/Rewrite.CSharp/Marker/MemberBinding.cs @@ -0,0 +1,10 @@ +namespace Rewrite.RewriteCSharp.Marker; + +public record MemberBinding(Guid Id) : Core.Marker.Marker +{ + public virtual bool Equals(Core.Marker.Marker? other) + { + return other is MemberBinding && other.Id == Id; + } + +} diff --git a/Rewrite/src/Rewrite.CSharp/Parser/CSharpParserVisitor.cs b/Rewrite/src/Rewrite.CSharp/Parser/CSharpParserVisitor.cs index f3575ef5..7421f40f 100644 --- a/Rewrite/src/Rewrite.CSharp/Parser/CSharpParserVisitor.cs +++ b/Rewrite/src/Rewrite.CSharp/Parser/CSharpParserVisitor.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; @@ -399,12 +400,18 @@ public override J VisitIdentifierName(IdentifierNameSyntax node) var select = Convert(node.Expression); if (select is J.FieldAccess fa) { - var mae = (MemberAccessExpressionSyntax)node.Expression; + var operatorToken = node.Expression switch + { + MemberAccessExpressionSyntax mae => mae.OperatorToken, + MemberBindingExpressionSyntax mbe => mbe.OperatorToken, + _ => throw new InvalidOperationException($"Unexpected node of type {node.Expression.GetType()} encountered.") + }; + return new J.MethodInvocation( Core.Tree.RandomId(), prefix, - Markers.EMPTY, - new JRightPadded(fa.Target, fa.Padding.Name.Before, Markers.EMPTY), + fa.Markers, + new JRightPadded(fa.Target, Format(operatorToken.LeadingTrivia), Markers.EMPTY), null, fa.Name, MapArgumentList(node.ArgumentList), @@ -444,7 +451,7 @@ pt.Clazz is J.FieldAccess lfa pt.TypeParameters.Select(JRightPadded.Build).ToList(), Markers.EMPTY ) - : null, // TODO type parameters + : null, // TODO: type parameters pt.Clazz is J.Identifier i ? i : (pt.Clazz as J.FieldAccess)?.Name ?? @@ -453,6 +460,27 @@ pt.Clazz is J.Identifier i MapType(node) as JavaType.Method ); } + else if (select is J.MethodInvocation mi) // chained method invocation (method returns a delegate). ex. Something()() + { + + return new J.MethodInvocation( + Core.Tree.RandomId(), + prefix, + Markers.EMPTY, + JRightPadded.Build(mi), + null, + new J.Identifier( + Core.Tree.RandomId(), + Space.EMPTY, + Markers.EMPTY, + new List(), + "", + null, + null), + MapArgumentList(node.ArgumentList), + MapType(node) as JavaType.Method + ); + } for (var index = 0; index < node.ArgumentList.Arguments.Count; index++) { @@ -1446,40 +1474,116 @@ private J.Identifier MapIdentifier(SyntaxToken identifier, JavaType? type) public override J? VisitConditionalAccessExpression(ConditionalAccessExpressionSyntax node) { - // the AST hierarchy in Roslyn is very different from that with `J.FieldAccess` - // see `VisitMemberBindingExpression()` for more details - // return Convert(node.WhenNotNull)!; - return base.VisitConditionalAccessExpression(node); + // conditional expressions appear in their "natural order" + // meaning for an expression like this "a?.b", node a will be at the top of hierarchy + // vs in normal expression such as "a.b", b will be at the top of hierarchy + + // LST doesn't reverse this order, so we need to traverse down any chain of nullable expression tree, and then + // process them in reverse + var conditionalExpressions = new List<(ExpressionSyntax, Space)>(); + ExpressionSyntax currentNode = node; + while(currentNode is ConditionalAccessExpressionSyntax conditionalNode) + { + conditionalExpressions.Add((conditionalNode.Expression, Format(Leading(conditionalNode.OperatorToken)))); + currentNode = conditionalNode.WhenNotNull; + } + conditionalExpressions.Add((currentNode, Format(Leading(currentNode)))); + // at this point conditionalExpressions for something like this: a?.b?.c + // would look like this ['a','.b','.c'] + + Expression currentExpression = null!;// = Convert(conditionalExpressions[0].Item1)!; + // each item in list will be individual expressions that form null access path, last one being the "normal" + // expression that is at + var i = 0; + foreach (var (expressionPortion, afterSpace) in conditionalExpressions) + { + var isLastSegment = i == conditionalExpressions.Count - 1; + var lstNode = Convert(expressionPortion)!; + // somewhere in this node, a MemberBindingExpression got converted to either FieldAccess or MethodInvocation + // the expression is "fake" and needs to be adjusted. luckly we got a marker to locate this special node that needs to be + // fixed up. The expression for it will become lhs from previous loop iteration (stored in currentExpression) + // ps: god help you if you need to fix this logic :) + var bindingNode = lstNode.Descendents() + .FirstOrDefault(x => x.Markers.Contains()); + if (bindingNode != null) + { + if (bindingNode is J.MethodInvocation methodNode) + { + var newMethod = methodNode.WithSelect(currentExpression); + lstNode = methodNode.Equals(lstNode) ? newMethod : lstNode.ReplaceNode(methodNode, newMethod); + } + else if (bindingNode is J.FieldAccess fieldAccess) + { + var newFieldAccess = fieldAccess.WithTarget(currentExpression); + lstNode = fieldAccess.Equals(lstNode) ? newFieldAccess : lstNode.ReplaceNode(fieldAccess, newFieldAccess); + } + } + + // right hand side is the root and doesn't get wrapped + if (!isLastSegment) + { + lstNode = new Cs.NullSafeExpression( + Core.Tree.RandomId(), + Format(Leading(expressionPortion)), + Markers.EMPTY, + new JRightPadded( + lstNode!, + afterSpace, + Markers.EMPTY + ) + ); + } + + currentExpression = lstNode; + + i++; + } + + // var result = Convert(node.WhenNotNull)!; + return currentExpression; + + // return base.VisitConditionalAccessExpression(node); } + ///

+ /// Very similar to MemberAccessExpression, but doesn't have an expression portion - just identifier + /// Used in ConditionalAccessExpression since they are constructed left to right, then right to left like normal field access + /// public override J? VisitMemberBindingExpression(MemberBindingExpressionSyntax node) { + + // due to the fact that the `ConditionalAccessExpressionSyntax` is at the root of an expression like `foo?.Bar.Baz` // we need to find that root here, as the containment hierarchy using `J.FieldAccess` and `Cs.NullSafeExpression` // ends up being very different - ExpressionSyntax? parent = node; - while (parent is not ConditionalAccessExpressionSyntax) - if ((parent = parent.Parent as ExpressionSyntax) == null) - throw new InvalidOperationException( - "Cannot find a `ConditionalAccessExpressionSyntax` in the containment hierarchy."); - - var conditionalAccess = (ConditionalAccessExpressionSyntax)parent; - var lhs = new Cs.NullSafeExpression( - Core.Tree.RandomId(), - Format(Leading(node)), - Markers.EMPTY, - new JRightPadded( - Convert(conditionalAccess.Expression)!, - Format(Leading(conditionalAccess.OperatorToken)), - Markers.EMPTY - ) - ); + // ExpressionSyntax? parent = node; + // while (parent is not ConditionalAccessExpressionSyntax) + // if ((parent = parent.Parent as ExpressionSyntax) == null) + // throw new InvalidOperationException( + // "Cannot find a `ConditionalAccessExpressionSyntax` in the containment hierarchy."); + // + // var conditionalAccess = (ConditionalAccessExpressionSyntax)parent; + // var lhs = new Cs.NullSafeExpression( + // Core.Tree.RandomId(), + // Format(Leading(node)), + // Markers.EMPTY, + // new JRightPadded( + // Convert(conditionalAccess.Expression)!, + // Format(Leading(conditionalAccess.OperatorToken)), + // Markers.EMPTY + // ) + // ); return new J.FieldAccess( Core.Tree.RandomId(), Format(Leading(node)), - Markers.EMPTY, - lhs, + new Markers( + Core.Tree.RandomId(), + new List + { + new MemberBinding(Core.Tree.RandomId()) + }), + Convert(node.Name)!, new JLeftPadded( Format(Leading(node.OperatorToken)), Convert(node.Name)!, @@ -3484,7 +3588,9 @@ private JRightPadded MapSwitchCaseLabel(SwitchLabelSyntax sls) { return base.VisitNullableDirectiveTrivia(node); } - +#if DEBUG_VISITOR + [DebuggerStepThrough] +#endif T? Convert(SyntaxNode? node) where T : class, J { if (node == null) return default; @@ -3596,21 +3702,30 @@ private JRightPadded MapParameter(ParameterSyntax tps) where T : J )).ToList(); } +#if DEBUG_VISITOR + [DebuggerStepThrough] +#endif private List? MapAttributes(SyntaxList m) { return m.Count == 0 ? null : m.Select(x => Convert(x)!).ToList(); } - +#if DEBUG_VISITOR + [DebuggerStepThrough] +#endif private JavaType MapType(ExpressionSyntax ins) { return _typeMapping.Type(semanticModel.GetTypeInfo(ins).Type); } - +#if DEBUG_VISITOR + [DebuggerStepThrough] +#endif private JavaType MapType(SyntaxNode ins) { return _typeMapping.Type(semanticModel.GetDeclaredSymbol(ins) ?? semanticModel.GetTypeInfo(ins).Type); } - +// #if DEBUG_VISITOR +// [DebuggerStepThrough] +// #endif private JRightPadded MapStatement(StatementSyntax statementSyntax) { var statement = (Visit(statementSyntax) as Statement)!; @@ -3628,18 +3743,26 @@ statementSyntax is LocalFunctionStatementSyntax : Markers.EMPTY ); } - +#if DEBUG_VISITOR + [DebuggerStepThrough] +#endif private SyntaxTriviaList Leading(SyntaxList list) where T : SyntaxNode { return list.Count == 0 ? SyntaxTriviaList.Empty : Leading(list.First()); } +#if DEBUG_VISITOR + [DebuggerStepThrough] +#endif private SyntaxTriviaList Leading(SyntaxNode node) { var firstToken = node.GetFirstToken(); return Leading(firstToken); } +#if DEBUG_VISITOR + [DebuggerStepThrough] +#endif private SyntaxTriviaList Leading(SyntaxToken token) { var previousToken = token.GetPreviousToken(); @@ -3652,6 +3775,9 @@ private SyntaxTriviaList Leading(SyntaxToken token) return OnlyUnseenTrivia(trailing, leading); } +#if DEBUG_VISITOR + [DebuggerStepThrough] +#endif private SyntaxTriviaList OnlyUnseenTrivia(SyntaxTriviaList trivia) { var span = trivia.Span; @@ -3665,7 +3791,9 @@ private SyntaxTriviaList OnlyUnseenTrivia(SyntaxTriviaList trivia) _seenTriviaSpans.Sort(); return trivia; } - +#if DEBUG_VISITOR + [DebuggerStepThrough] +#endif private SyntaxTriviaList OnlyUnseenTrivia(SyntaxTriviaList trivia1, SyntaxTriviaList trivia2) { var span = new TextSpan(trivia1.Span.Start, trivia2.Span.End - trivia1.Span.Start); @@ -3679,17 +3807,23 @@ private SyntaxTriviaList OnlyUnseenTrivia(SyntaxTriviaList trivia1, SyntaxTrivia _seenTriviaSpans.Sort(); return trivia1.AddRange(trivia2); } - +#if DEBUG_VISITOR + [DebuggerStepThrough] +#endif private SyntaxTriviaList Trailing(SyntaxNode node) { return Trailing(node.GetLastToken()); } - +#if DEBUG_VISITOR + [DebuggerStepThrough] +#endif private SyntaxTriviaList Trailing(SyntaxToken token) { return Leading(token.GetNextToken()); } - +#if DEBUG_VISITOR + [DebuggerStepThrough] +#endif private static Space Format(SyntaxTriviaList trivia) { // FIXME optimize diff --git a/Rewrite/src/Rewrite.CSharp/Tree/AnnotatedStatement.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/AnnotatedStatement.g.cs index d3a2dcd0..b3c8c20a 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/AnnotatedStatement.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/AnnotatedStatement.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -22,6 +23,9 @@ namespace Rewrite.RewriteCSharp.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface Cs : J { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class AnnotatedStatement( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.CSharp/Tree/ArrayRankSpecifier.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/ArrayRankSpecifier.g.cs index 4a5e88b4..5c5e6fc0 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/ArrayRankSpecifier.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/ArrayRankSpecifier.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -22,6 +23,9 @@ namespace Rewrite.RewriteCSharp.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface Cs : J { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class ArrayRankSpecifier( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.CSharp/Tree/AssignmentOperation.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/AssignmentOperation.g.cs index ea50d913..55a7e9ed 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/AssignmentOperation.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/AssignmentOperation.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -22,6 +23,9 @@ namespace Rewrite.RewriteCSharp.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface Cs : J { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class AssignmentOperation( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.CSharp/Tree/AttributeList.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/AttributeList.g.cs index 51b31b81..39487e35 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/AttributeList.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/AttributeList.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -22,6 +23,9 @@ namespace Rewrite.RewriteCSharp.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface Cs : J { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class AttributeList( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.CSharp/Tree/AwaitExpression.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/AwaitExpression.g.cs index 2d629eaa..8f9be2bd 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/AwaitExpression.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/AwaitExpression.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -22,6 +23,9 @@ namespace Rewrite.RewriteCSharp.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface Cs : J { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class AwaitExpression( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.CSharp/Tree/Binary.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/Binary.g.cs index 3f6500cf..9a60409c 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/Binary.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/Binary.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -22,6 +23,9 @@ namespace Rewrite.RewriteCSharp.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface Cs : J { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Binary( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.CSharp/Tree/BlockScopeNamespaceDeclaration.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/BlockScopeNamespaceDeclaration.g.cs index 2c3f381c..de97af34 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/BlockScopeNamespaceDeclaration.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/BlockScopeNamespaceDeclaration.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -22,6 +23,9 @@ namespace Rewrite.RewriteCSharp.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface Cs : J { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class BlockScopeNamespaceDeclaration( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.CSharp/Tree/CollectionExpression.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/CollectionExpression.g.cs index 8312178a..656a0932 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/CollectionExpression.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/CollectionExpression.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -22,6 +23,9 @@ namespace Rewrite.RewriteCSharp.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface Cs : J { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class CollectionExpression( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.CSharp/Tree/CompilationUnit.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/CompilationUnit.g.cs index bb0fb903..9a3c5cd0 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/CompilationUnit.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/CompilationUnit.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -22,6 +23,9 @@ namespace Rewrite.RewriteCSharp.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface Cs : J { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class CompilationUnit( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.CSharp/Tree/Cs.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/Cs.g.cs index 03248a88..1d7c3528 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/Cs.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/Cs.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; diff --git a/Rewrite/src/Rewrite.CSharp/Tree/ExpressionStatement.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/ExpressionStatement.g.cs index 1a90bb2c..8d4c4197 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/ExpressionStatement.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/ExpressionStatement.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -22,6 +23,9 @@ namespace Rewrite.RewriteCSharp.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface Cs : J { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class ExpressionStatement( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.CSharp/Tree/ExternAlias.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/ExternAlias.g.cs index 95058c36..77c08f78 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/ExternAlias.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/ExternAlias.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -22,6 +23,9 @@ namespace Rewrite.RewriteCSharp.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface Cs : J { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class ExternAlias( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.CSharp/Tree/FileScopeNamespaceDeclaration.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/FileScopeNamespaceDeclaration.g.cs index 734d48ef..1219164c 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/FileScopeNamespaceDeclaration.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/FileScopeNamespaceDeclaration.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -22,6 +23,9 @@ namespace Rewrite.RewriteCSharp.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface Cs : J { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class FileScopeNamespaceDeclaration( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.CSharp/Tree/InterpolatedString.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/InterpolatedString.g.cs index 06066475..02edc57c 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/InterpolatedString.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/InterpolatedString.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -22,6 +23,9 @@ namespace Rewrite.RewriteCSharp.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface Cs : J { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class InterpolatedString( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.CSharp/Tree/Interpolation.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/Interpolation.g.cs index bf4da2c5..2c4ad89f 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/Interpolation.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/Interpolation.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -22,6 +23,9 @@ namespace Rewrite.RewriteCSharp.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface Cs : J { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Interpolation( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.CSharp/Tree/NamedArgument.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/NamedArgument.g.cs index 32408b94..3ffa90df 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/NamedArgument.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/NamedArgument.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -22,6 +23,9 @@ namespace Rewrite.RewriteCSharp.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface Cs : J { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class NamedArgument( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.CSharp/Tree/NullSafeExpression.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/NullSafeExpression.g.cs index 52b2a539..96c0be61 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/NullSafeExpression.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/NullSafeExpression.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -22,6 +23,9 @@ namespace Rewrite.RewriteCSharp.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface Cs : J { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class NullSafeExpression( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.CSharp/Tree/PropertyDeclaration.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/PropertyDeclaration.g.cs index fe24280d..d4f7c9f2 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/PropertyDeclaration.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/PropertyDeclaration.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -22,6 +23,9 @@ namespace Rewrite.RewriteCSharp.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface Cs : J { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class PropertyDeclaration( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.CSharp/Tree/StatementExpression.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/StatementExpression.g.cs index 8d8af3a3..431b8c08 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/StatementExpression.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/StatementExpression.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -22,6 +23,9 @@ namespace Rewrite.RewriteCSharp.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface Cs : J { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class StatementExpression( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.CSharp/Tree/UsingDirective.g.cs b/Rewrite/src/Rewrite.CSharp/Tree/UsingDirective.g.cs index be3a2761..59b438e0 100644 --- a/Rewrite/src/Rewrite.CSharp/Tree/UsingDirective.g.cs +++ b/Rewrite/src/Rewrite.CSharp/Tree/UsingDirective.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -22,6 +23,9 @@ namespace Rewrite.RewriteCSharp.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface Cs : J { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class UsingDirective( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.CSharp/Tree/_CommonOverrides.cs b/Rewrite/src/Rewrite.CSharp/Tree/_CommonOverrides.cs new file mode 100644 index 00000000..faeb2042 --- /dev/null +++ b/Rewrite/src/Rewrite.CSharp/Tree/_CommonOverrides.cs @@ -0,0 +1,104 @@ +using Rewrite.Core; +using Rewrite.RewriteCSharp.Tree; +using Rewrite.RewriteJava.Tree; + +namespace Rewrite.RewriteCSharp.Tree +{ + public partial interface Cs + { + partial class AnnotatedStatement + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class ArrayRankSpecifier + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class AssignmentOperation + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class AttributeList + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class AwaitExpression + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Binary + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class BlockScopeNamespaceDeclaration + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class CollectionExpression + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class CompilationUnit + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class ExpressionStatement + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class ExternAlias + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class FileScopeNamespaceDeclaration + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class InterpolatedString + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Interpolation + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class NamedArgument + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class NullSafeExpression + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class PropertyDeclaration + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class StatementExpression + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class UsingDirective + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + } +} diff --git a/Rewrite/src/Rewrite.Core/ITreeVisitor.cs b/Rewrite/src/Rewrite.Core/ITreeVisitor.cs index 34a8466c..ed233478 100644 --- a/Rewrite/src/Rewrite.Core/ITreeVisitor.cs +++ b/Rewrite/src/Rewrite.Core/ITreeVisitor.cs @@ -1,31 +1,34 @@ +using System.Diagnostics; using Rewrite.Core.Marker; namespace Rewrite.Core; -public interface ITreeVisitor where T : class, Tree +public interface ITreeVisitor where T : class, Tree { public static ITreeVisitor Noop() { return new NoopVisitor(); } - T? DefaultValue(Tree? tree, P p); - bool IsAcceptable(SourceFile sourceFile, P p); + T? DefaultValue(Tree? tree, TState p); + bool IsAcceptable(SourceFile sourceFile, TState p); + [DebuggerHidden] bool IsAdaptableTo(Type type); - V Adapt() where R : class, Tree where V : class, ITreeVisitor + [DebuggerStepThrough] + TTargetVisitor Adapt() where TNodeType : class, Tree where TTargetVisitor : class, ITreeVisitor { - if (typeof(V).IsAssignableFrom(GetType())) - return (V)this; - if (!IsAdaptableTo(typeof(V))) - throw new ArgumentException(GetType() + " is not adaptable to " + typeof(V)); - return TreeVisitorAdapter.Adapt(this); + if (typeof(TTargetVisitor).IsAssignableFrom(GetType())) + return (TTargetVisitor)this; + if (!IsAdaptableTo(typeof(TTargetVisitor))) + throw new ArgumentException(GetType() + " is not adaptable to " + typeof(TTargetVisitor)); + return TreeVisitorAdapter.Adapt(this); } - T? PreVisit(Tree? tree, P p); - T? Visit(Tree? tree, P p); - T? Visit(Tree? tree, P p, Cursor parent); - T? PostVisit(Tree tree, P p); - Markers? VisitMarkers(Marker.Markers? markers, P p); - TMarker VisitMarker(TMarker marker, P p) where TMarker : Marker.Marker; + T? PreVisit(Tree? tree, TState p); + T? Visit(Tree? tree, TState p); + T? Visit(Tree? tree, TState p, Cursor parent); + T? PostVisit(Tree tree, TState p); + Markers? VisitMarkers(Marker.Markers? markers, TState p); + TMarker VisitMarker(TMarker marker, TState p) where TMarker : Marker.Marker; } internal class NoopVisitor : TreeVisitor diff --git a/Rewrite/src/Rewrite.Core/Marker/Markers.cs b/Rewrite/src/Rewrite.Core/Marker/Markers.cs index 83a0dd49..a92b5b09 100644 --- a/Rewrite/src/Rewrite.Core/Marker/Markers.cs +++ b/Rewrite/src/Rewrite.Core/Marker/Markers.cs @@ -60,10 +60,17 @@ public Markers AddIfAbsent(T marker) where T : Marker return this with { MarkerList = updated }; } - public M? FindFirst() where M : Marker + public T? FindFirst() where T : Marker { - return MarkerList.OfType().FirstOrDefault(); + return MarkerList.OfType().FirstOrDefault(); } + public T? FindFirst(Func predicate) where T : Marker + { + return MarkerList.OfType().FirstOrDefault(predicate); + } + + public bool Contains() where T : Marker => FindFirst() != null; + public bool Contains(Func predicate) where T : Marker => FindFirst(predicate) != null; public Markers SetByType(Marker marker) { diff --git a/Rewrite/src/Rewrite.Core/PrintOutputCapture.cs b/Rewrite/src/Rewrite.Core/PrintOutputCapture.cs index e515acaf..8ee31e42 100644 --- a/Rewrite/src/Rewrite.Core/PrintOutputCapture.cs +++ b/Rewrite/src/Rewrite.Core/PrintOutputCapture.cs @@ -3,15 +3,15 @@ namespace Rewrite.Core; -public class PrintOutputCapture

(P p, PrintOutputCapture

.IMarkerPrinter markerPrinter) +public class PrintOutputCapture(TState p, PrintOutputCapture.IMarkerPrinter markerPrinter) { - public P Context { get; } = p; + public TState Context { get; } = p; public IMarkerPrinter MarkerPrinter { get; } = markerPrinter; public StringBuilder Out { get; } = new StringBuilder(); - public PrintOutputCapture(P p) : this(p, IMarkerPrinter.Default) + public PrintOutputCapture(TState p) : this(p, IMarkerPrinter.Default) { } @@ -20,7 +20,7 @@ public string GetOut() return Out.ToString(); } - public PrintOutputCapture

Append(string? text) + public PrintOutputCapture Append(string? text) { if (text is { Length: > 0 }) { @@ -30,22 +30,22 @@ public PrintOutputCapture

Append(string? text) return this; } - public PrintOutputCapture

Append(char c) + public PrintOutputCapture Append(char c) { Out.Append(c); return this; } - public PrintOutputCapture

Clone() + public PrintOutputCapture Clone() { - return new PrintOutputCapture

(Context, MarkerPrinter); + return new PrintOutputCapture(Context, MarkerPrinter); } public interface IMarkerPrinter { static readonly IMarkerPrinter Default = new DefaultMarkerPrinter(); - internal class DefaultMarkerPrinter : PrintOutputCapture

.IMarkerPrinter + internal class DefaultMarkerPrinter : PrintOutputCapture.IMarkerPrinter { public string BeforeSyntax(Marker.Marker marker, Cursor cursor, Func commentWrapper) { diff --git a/Rewrite/src/Rewrite.Core/Rewrite.Core.csproj b/Rewrite/src/Rewrite.Core/Rewrite.Core.csproj index 45fed981..21e22784 100644 --- a/Rewrite/src/Rewrite.Core/Rewrite.Core.csproj +++ b/Rewrite/src/Rewrite.Core/Rewrite.Core.csproj @@ -10,5 +10,12 @@ - + + + <_Parameter1>Rewrite.CSharp + + + <_Parameter1>Rewrite.Java + + diff --git a/Rewrite/src/Rewrite.Core/Tree.cs b/Rewrite/src/Rewrite.Core/Tree.cs index 1b56cf20..b3cae95e 100644 --- a/Rewrite/src/Rewrite.Core/Tree.cs +++ b/Rewrite/src/Rewrite.Core/Tree.cs @@ -1,9 +1,23 @@ +using System.Diagnostics; using Rewrite.Core.Marker; namespace Rewrite.Core; public interface Tree : IEquatable { +#if DEBUG_VISITOR + [DebuggerStepThrough] +#endif + internal static string? ToString(Tree node) + { + var output = new PrintOutputCapture(null); + IPrinterFactory.Current()?.CreatePrinter().Visit(node, output); + + return output.ToString(); + } +#if DEBUG_VISITOR + [DebuggerStepThrough] +#endif public static Guid RandomId() { return Guid.NewGuid(); @@ -14,19 +28,26 @@ public static Guid RandomId() bool IsAcceptable(ITreeVisitor v, P p) where R : class, Tree; - R? Accept(ITreeVisitor v, P p) where R : class, Tree +#if DEBUG_VISITOR + [DebuggerStepThrough] +#endif + TNodeType? Accept(ITreeVisitor v, TState p) where TNodeType : class, Tree { return v.DefaultValue(this, p); } - +#if DEBUG_VISITOR + [DebuggerStepThrough] +#endif string Print

(Cursor cursor, PrintOutputCapture

capture) { Printer

(cursor).Visit(this, capture, cursor); return capture.GetOut(); } - +#if DEBUG_VISITOR + [DebuggerStepThrough] +#endif ITreeVisitor> Printer

(Cursor cursor) { return cursor.FirstEnclosingOrThrow().Printer

(cursor); } -} \ No newline at end of file +} diff --git a/Rewrite/src/Rewrite.Core/TreeVisitorAdapter.cs b/Rewrite/src/Rewrite.Core/TreeVisitorAdapter.cs index e053f838..d0348ac7 100644 --- a/Rewrite/src/Rewrite.Core/TreeVisitorAdapter.cs +++ b/Rewrite/src/Rewrite.Core/TreeVisitorAdapter.cs @@ -3,29 +3,38 @@ namespace Rewrite.Core; + +///

+/// Allows a base visitors to act as language specific visitors. +/// For example a visitor that is based on TreeVisitor will be dynamically converted to CSharpVisitor +/// to correctly handle processing of nodes it was never designed to handle. This allows reusability of +/// "common" language tree visitors while still visiting all necessary language specific nodes +/// internal static class TreeVisitorAdapter { - public static V Adapt(ITreeVisitor @delegate) where V : class, ITreeVisitor where R : class, Tree + public static TTargetVisitor Adapt(ITreeVisitor @delegate) + where TTargetVisitor : class, ITreeVisitor + where TNodeType : class, Tree { var generator = new ProxyGenerator(); // var options = new ProxyGenerationOptions(new ProxyGenerationHook()) { Selector = new CustomSelector() }; - IInterceptor myInterceptor = new DelegatingInterceptor(@delegate); + IInterceptor myInterceptor = new DelegatingInterceptor(@delegate); // var proxy = generator.CreateClassProxy(options, myInterceptor); - var proxy = generator.CreateClassProxy(myInterceptor); + var proxy = generator.CreateClassProxy(myInterceptor); return proxy; } } -internal class DelegatingInterceptor(object target) : IInterceptor +internal class DelegatingInterceptor(object target) : IInterceptor { public void Intercept(IInvocation invocation) { - if (invocation.Method.DeclaringType == typeof(V)) + if (invocation.Method.DeclaringType == typeof(TVisitor)) invocation.Proceed(); else invocation.ReturnValue = invocation.Method.Invoke(target, invocation.Arguments); } -} \ No newline at end of file +} diff --git a/Rewrite/src/Rewrite.Java/Tree/AnnotatedType.g.cs b/Rewrite/src/Rewrite.Java/Tree/AnnotatedType.g.cs index 7701dd7e..26126936 100644 --- a/Rewrite/src/Rewrite.Java/Tree/AnnotatedType.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/AnnotatedType.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class AnnotatedType( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Annotation.g.cs b/Rewrite/src/Rewrite.Java/Tree/Annotation.g.cs index 94f5a191..b4e9e574 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Annotation.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Annotation.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Annotation( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/ArrayAccess.g.cs b/Rewrite/src/Rewrite.Java/Tree/ArrayAccess.g.cs index 89c3dd22..8a11d5b5 100644 --- a/Rewrite/src/Rewrite.Java/Tree/ArrayAccess.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/ArrayAccess.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class ArrayAccess( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/ArrayDimension.g.cs b/Rewrite/src/Rewrite.Java/Tree/ArrayDimension.g.cs index 66c4bb6d..36136b25 100644 --- a/Rewrite/src/Rewrite.Java/Tree/ArrayDimension.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/ArrayDimension.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class ArrayDimension( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/ArrayType.g.cs b/Rewrite/src/Rewrite.Java/Tree/ArrayType.g.cs index fb58f7c9..ca594459 100644 --- a/Rewrite/src/Rewrite.Java/Tree/ArrayType.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/ArrayType.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class ArrayType( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Assert.g.cs b/Rewrite/src/Rewrite.Java/Tree/Assert.g.cs index 225daa1b..240bc507 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Assert.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Assert.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Assert( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Assignment.g.cs b/Rewrite/src/Rewrite.Java/Tree/Assignment.g.cs index 2448572e..9fc787ee 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Assignment.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Assignment.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Assignment( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/AssignmentOperation.g.cs b/Rewrite/src/Rewrite.Java/Tree/AssignmentOperation.g.cs index 61ef3739..7fe3c686 100644 --- a/Rewrite/src/Rewrite.Java/Tree/AssignmentOperation.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/AssignmentOperation.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class AssignmentOperation( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Binary.g.cs b/Rewrite/src/Rewrite.Java/Tree/Binary.g.cs index f0e0fb01..8c1e0fa9 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Binary.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Binary.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Binary( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Block.g.cs b/Rewrite/src/Rewrite.Java/Tree/Block.g.cs index 040a4d7c..ba0b8601 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Block.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Block.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Block( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Break.g.cs b/Rewrite/src/Rewrite.Java/Tree/Break.g.cs index 87990d68..4ae0c3ab 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Break.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Break.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Break( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Case.g.cs b/Rewrite/src/Rewrite.Java/Tree/Case.g.cs index 2ac45105..9090880b 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Case.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Case.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Case( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/ClassDeclaration.g.cs b/Rewrite/src/Rewrite.Java/Tree/ClassDeclaration.g.cs index b5f483c6..5a50f66a 100644 --- a/Rewrite/src/Rewrite.Java/Tree/ClassDeclaration.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/ClassDeclaration.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class ClassDeclaration( Guid id, Space prefix, @@ -157,6 +161,9 @@ public ClassDeclaration WithType(JavaType.FullyQualified? newType) { return newType == type ? this : new ClassDeclaration(id, prefix, markers, leadingAnnotations, modifiers, _declarationKind, name, _typeParameters, _primaryConstructor, _extends, _implements, _permits, body, newType); } + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Kind( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/CompilationUnit.g.cs b/Rewrite/src/Rewrite.Java/Tree/CompilationUnit.g.cs index a0f99584..ebb0a5de 100644 --- a/Rewrite/src/Rewrite.Java/Tree/CompilationUnit.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/CompilationUnit.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class CompilationUnit( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Continue.g.cs b/Rewrite/src/Rewrite.Java/Tree/Continue.g.cs index 2820f546..8b6520b1 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Continue.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Continue.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Continue( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/ControlParentheses.g.cs b/Rewrite/src/Rewrite.Java/Tree/ControlParentheses.g.cs index eea8d0f6..feceecd3 100644 --- a/Rewrite/src/Rewrite.Java/Tree/ControlParentheses.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/ControlParentheses.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class ControlParentheses( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/DoWhileLoop.g.cs b/Rewrite/src/Rewrite.Java/Tree/DoWhileLoop.g.cs index 3ddfc6c6..858088f1 100644 --- a/Rewrite/src/Rewrite.Java/Tree/DoWhileLoop.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/DoWhileLoop.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class DoWhileLoop( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Empty.g.cs b/Rewrite/src/Rewrite.Java/Tree/Empty.g.cs index 531673a8..e08b8ee0 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Empty.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Empty.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Empty( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/EnumValue.g.cs b/Rewrite/src/Rewrite.Java/Tree/EnumValue.g.cs index 844bf243..264a2742 100644 --- a/Rewrite/src/Rewrite.Java/Tree/EnumValue.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/EnumValue.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class EnumValue( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/EnumValueSet.g.cs b/Rewrite/src/Rewrite.Java/Tree/EnumValueSet.g.cs index 21f75928..dff995c2 100644 --- a/Rewrite/src/Rewrite.Java/Tree/EnumValueSet.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/EnumValueSet.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class EnumValueSet( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/FieldAccess.g.cs b/Rewrite/src/Rewrite.Java/Tree/FieldAccess.g.cs index 661a2107..d559e0d0 100644 --- a/Rewrite/src/Rewrite.Java/Tree/FieldAccess.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/FieldAccess.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class FieldAccess( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/ForEachLoop.g.cs b/Rewrite/src/Rewrite.Java/Tree/ForEachLoop.g.cs index 81e097b8..c190e4d3 100644 --- a/Rewrite/src/Rewrite.Java/Tree/ForEachLoop.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/ForEachLoop.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class ForEachLoop( Guid id, Space prefix, @@ -90,6 +94,9 @@ public ForEachLoop WithBody(Statement newBody) { return Padding.WithBody(_body.WithElement(newBody)); } + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Control( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/ForLoop.g.cs b/Rewrite/src/Rewrite.Java/Tree/ForLoop.g.cs index ab5d1054..e4569ae6 100644 --- a/Rewrite/src/Rewrite.Java/Tree/ForLoop.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/ForLoop.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class ForLoop( Guid id, Space prefix, @@ -90,6 +94,9 @@ public ForLoop WithBody(Statement newBody) { return Padding.WithBody(_body.WithElement(newBody)); } + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Control( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Identifier.g.cs b/Rewrite/src/Rewrite.Java/Tree/Identifier.g.cs index 5cac5f9a..97196bb5 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Identifier.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Identifier.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public sealed partial class Identifier( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/If.g.cs b/Rewrite/src/Rewrite.Java/Tree/If.g.cs index ab95ba75..9bb18fff 100644 --- a/Rewrite/src/Rewrite.Java/Tree/If.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/If.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class If( Guid id, Space prefix, @@ -97,6 +101,9 @@ public If WithElsePart(Else? newElsePart) { return ReferenceEquals(newElsePart, elsePart) ? this : new If(id, prefix, markers, ifCondition, _thenPart, newElsePart); } + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Else( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Import.g.cs b/Rewrite/src/Rewrite.Java/Tree/Import.g.cs index dedfceb2..ee000c7e 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Import.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Import.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Import( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/InstanceOf.g.cs b/Rewrite/src/Rewrite.Java/Tree/InstanceOf.g.cs index 82b95816..cd4c876f 100644 --- a/Rewrite/src/Rewrite.Java/Tree/InstanceOf.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/InstanceOf.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class InstanceOf( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/IntersectionType.g.cs b/Rewrite/src/Rewrite.Java/Tree/IntersectionType.g.cs index a5c3c816..936cbcb7 100644 --- a/Rewrite/src/Rewrite.Java/Tree/IntersectionType.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/IntersectionType.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class IntersectionType( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/J.g.cs b/Rewrite/src/Rewrite.Java/Tree/J.g.cs index 3488a5a1..15044fc6 100644 --- a/Rewrite/src/Rewrite.Java/Tree/J.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/J.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; diff --git a/Rewrite/src/Rewrite.Java/Tree/JRightPadded.cs b/Rewrite/src/Rewrite.Java/Tree/JRightPadded.cs index 6e0543bc..b35743d4 100644 --- a/Rewrite/src/Rewrite.Java/Tree/JRightPadded.cs +++ b/Rewrite/src/Rewrite.Java/Tree/JRightPadded.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -7,6 +8,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "InconsistentNaming")] [SuppressMessage("ReSharper", "PossibleUnintendedReferenceComparison")] +#if DEBUG_VISITOR +[DebuggerStepThrough] +#endif public sealed class JRightPadded( T element, Space after, diff --git a/Rewrite/src/Rewrite.Java/Tree/Label.g.cs b/Rewrite/src/Rewrite.Java/Tree/Label.g.cs index 83630fe1..cd0e10cb 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Label.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Label.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Label( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Lambda.g.cs b/Rewrite/src/Rewrite.Java/Tree/Lambda.g.cs index cbd10e74..077657cc 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Lambda.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Lambda.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Lambda( Guid id, Space prefix, @@ -78,6 +82,9 @@ public Lambda WithType(JavaType? newType) { return newType == type ? this : new Lambda(id, prefix, markers, @params, arrow, body, newType); } + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Parameters( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Literal.g.cs b/Rewrite/src/Rewrite.Java/Tree/Literal.g.cs index d6f2e0ef..3e1b3b6e 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Literal.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Literal.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Literal( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/MemberReference.g.cs b/Rewrite/src/Rewrite.Java/Tree/MemberReference.g.cs index 4dc3fdc8..86eb3807 100644 --- a/Rewrite/src/Rewrite.Java/Tree/MemberReference.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/MemberReference.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class MemberReference( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/MethodDeclaration.cs b/Rewrite/src/Rewrite.Java/Tree/MethodDeclaration.cs index 76105c11..5695b0aa 100644 --- a/Rewrite/src/Rewrite.Java/Tree/MethodDeclaration.cs +++ b/Rewrite/src/Rewrite.Java/Tree/MethodDeclaration.cs @@ -5,5 +5,22 @@ public partial interface J : Rewrite.Core.Tree public partial class MethodDeclaration { public Identifier Name => _name.Identifier; + public MethodDeclaration WithName(Identifier identifier) + { + return new MethodDeclaration( + Id, + prefix, + markers, + leadingAnnotations, + modifiers, + _typeParameters, + returnTypeExpression, + _name.WithIdentifier(identifier), + _parameters, + _throws, + body, + _defaultValue, + methodType); + } } } diff --git a/Rewrite/src/Rewrite.Java/Tree/MethodDeclaration.g.cs b/Rewrite/src/Rewrite.Java/Tree/MethodDeclaration.g.cs index c9047345..f41c5f1a 100644 --- a/Rewrite/src/Rewrite.Java/Tree/MethodDeclaration.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/MethodDeclaration.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class MethodDeclaration( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/MethodInvocation.g.cs b/Rewrite/src/Rewrite.Java/Tree/MethodInvocation.g.cs index 03d0ab9a..7dcda7ab 100644 --- a/Rewrite/src/Rewrite.Java/Tree/MethodInvocation.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/MethodInvocation.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class MethodInvocation( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Modifier.g.cs b/Rewrite/src/Rewrite.Java/Tree/Modifier.g.cs index d852dfee..dcb908ad 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Modifier.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Modifier.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Modifier( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/MultiCatch.g.cs b/Rewrite/src/Rewrite.Java/Tree/MultiCatch.g.cs index b37a7c6f..0758d754 100644 --- a/Rewrite/src/Rewrite.Java/Tree/MultiCatch.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/MultiCatch.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class MultiCatch( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/NewArray.g.cs b/Rewrite/src/Rewrite.Java/Tree/NewArray.g.cs index 742ea3aa..cde9ef43 100644 --- a/Rewrite/src/Rewrite.Java/Tree/NewArray.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/NewArray.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class NewArray( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/NewClass.g.cs b/Rewrite/src/Rewrite.Java/Tree/NewClass.g.cs index 9211b2fe..7e2d2c42 100644 --- a/Rewrite/src/Rewrite.Java/Tree/NewClass.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/NewClass.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class NewClass( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/NullableType.g.cs b/Rewrite/src/Rewrite.Java/Tree/NullableType.g.cs index ee8a989e..0bce00e4 100644 --- a/Rewrite/src/Rewrite.Java/Tree/NullableType.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/NullableType.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class NullableType( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Package.g.cs b/Rewrite/src/Rewrite.Java/Tree/Package.g.cs index 09eaaf65..d68583c3 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Package.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Package.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Package( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/ParameterizedType.g.cs b/Rewrite/src/Rewrite.Java/Tree/ParameterizedType.g.cs index a7e36d34..325217c0 100644 --- a/Rewrite/src/Rewrite.Java/Tree/ParameterizedType.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/ParameterizedType.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class ParameterizedType( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Parentheses.g.cs b/Rewrite/src/Rewrite.Java/Tree/Parentheses.g.cs index 21923170..b0bc7e53 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Parentheses.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Parentheses.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Parentheses( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/ParenthesizedTypeTree.g.cs b/Rewrite/src/Rewrite.Java/Tree/ParenthesizedTypeTree.g.cs index 6b589f2c..1458c412 100644 --- a/Rewrite/src/Rewrite.Java/Tree/ParenthesizedTypeTree.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/ParenthesizedTypeTree.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public sealed partial class ParenthesizedTypeTree( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Primitive.g.cs b/Rewrite/src/Rewrite.Java/Tree/Primitive.g.cs index 97013d0a..390e9f6f 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Primitive.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Primitive.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Primitive( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Return.g.cs b/Rewrite/src/Rewrite.Java/Tree/Return.g.cs index fd749ad6..7998ba19 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Return.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Return.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Return( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Space.cs b/Rewrite/src/Rewrite.Java/Tree/Space.cs index 3ab5208d..05ae781b 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Space.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Space.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Text; using Rewrite.Core.Marker; @@ -10,6 +11,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantExtendsListEntry")] [SuppressMessage("ReSharper", "UnusedMember.Global")] [SuppressMessage("ReSharper", "RedundantNameQualifier")] +#if DEBUG_VISITOR +[DebuggerStepThrough] +#endif public class Space( IList comments, string? whitespace @@ -336,4 +340,4 @@ private static void RangeCheck(int arrayLength, int fromIndex, int toIndex) ArgumentOutOfRangeException.ThrowIfNegative(fromIndex); ArgumentOutOfRangeException.ThrowIfGreaterThan(toIndex, arrayLength); } -} \ No newline at end of file +} diff --git a/Rewrite/src/Rewrite.Java/Tree/Switch.g.cs b/Rewrite/src/Rewrite.Java/Tree/Switch.g.cs index cbf9f45a..d04b78aa 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Switch.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Switch.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Switch( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/SwitchExpression.g.cs b/Rewrite/src/Rewrite.Java/Tree/SwitchExpression.g.cs index 9e5a25a8..52fe2dea 100644 --- a/Rewrite/src/Rewrite.Java/Tree/SwitchExpression.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/SwitchExpression.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class SwitchExpression( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Synchronized.g.cs b/Rewrite/src/Rewrite.Java/Tree/Synchronized.g.cs index 84485767..3c142b74 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Synchronized.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Synchronized.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Synchronized( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Ternary.g.cs b/Rewrite/src/Rewrite.Java/Tree/Ternary.g.cs index 67610dfc..5d01bcc2 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Ternary.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Ternary.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Ternary( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/TextComment.cs b/Rewrite/src/Rewrite.Java/Tree/TextComment.cs index 6588ca77..d7971c17 100644 --- a/Rewrite/src/Rewrite.Java/Tree/TextComment.cs +++ b/Rewrite/src/Rewrite.Java/Tree/TextComment.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -10,6 +11,7 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantExtendsListEntry")] [SuppressMessage("ReSharper", "UnusedMember.Global")] [SuppressMessage("ReSharper", "RedundantNameQualifier")] +[DebuggerStepThrough] public sealed class TextComment( bool multiline, string text, @@ -61,4 +63,4 @@ public TextComment WithText(string newText) { return newText == Text ? this : new TextComment(Multiline, newText, suffix, markers); } -} \ No newline at end of file +} diff --git a/Rewrite/src/Rewrite.Java/Tree/Throw.g.cs b/Rewrite/src/Rewrite.Java/Tree/Throw.g.cs index cd2656db..5badb55f 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Throw.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Throw.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Throw( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Try.g.cs b/Rewrite/src/Rewrite.Java/Tree/Try.g.cs index e8d4d5fe..0ae848f4 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Try.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Try.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Try( Guid id, Space prefix, @@ -105,6 +109,9 @@ public Try WithFinally(J.Block? newFinally) { return Padding.WithFinally(JLeftPadded.WithElement(_finally, newFinally)); } + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Resource( Guid id, Space prefix, @@ -158,6 +165,9 @@ public override int GetHashCode() return Id.GetHashCode(); } } + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Catch( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/TypeCast.g.cs b/Rewrite/src/Rewrite.Java/Tree/TypeCast.g.cs index 3e7ec45a..19b80ba6 100644 --- a/Rewrite/src/Rewrite.Java/Tree/TypeCast.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/TypeCast.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class TypeCast( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/TypeParameter.g.cs b/Rewrite/src/Rewrite.Java/Tree/TypeParameter.g.cs index 2a362d9b..39a075ba 100644 --- a/Rewrite/src/Rewrite.Java/Tree/TypeParameter.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/TypeParameter.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class TypeParameter( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/TypeParameters.g.cs b/Rewrite/src/Rewrite.Java/Tree/TypeParameters.g.cs index 44aab76f..cd94601e 100644 --- a/Rewrite/src/Rewrite.Java/Tree/TypeParameters.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/TypeParameters.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class TypeParameters( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Unary.g.cs b/Rewrite/src/Rewrite.Java/Tree/Unary.g.cs index b5d8096a..91432d3a 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Unary.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Unary.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Unary( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Unknown.g.cs b/Rewrite/src/Rewrite.Java/Tree/Unknown.g.cs index cd29d8ef..62373d14 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Unknown.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Unknown.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Unknown( Guid id, Space prefix, @@ -63,6 +67,9 @@ public Unknown WithUnknownSource(Source newUnknownSource) { return ReferenceEquals(newUnknownSource, unknownSource) ? this : new Unknown(id, prefix, markers, newUnknownSource); } + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Source( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/VariableDeclarations.g.cs b/Rewrite/src/Rewrite.Java/Tree/VariableDeclarations.g.cs index 22e2c822..f8d30d4f 100644 --- a/Rewrite/src/Rewrite.Java/Tree/VariableDeclarations.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/VariableDeclarations.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class VariableDeclarations( Guid id, Space prefix, @@ -118,6 +122,9 @@ public VariableDeclarations WithVariables(IList newVariables) { return Padding.WithVariables(_variables.WithElements(newVariables)); } + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class NamedVariable( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/WhileLoop.g.cs b/Rewrite/src/Rewrite.Java/Tree/WhileLoop.g.cs index 03a3ea65..8eafb0e1 100644 --- a/Rewrite/src/Rewrite.Java/Tree/WhileLoop.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/WhileLoop.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class WhileLoop( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Wildcard.g.cs b/Rewrite/src/Rewrite.Java/Tree/Wildcard.g.cs index b9043772..1c68f8ab 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Wildcard.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Wildcard.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public partial class Wildcard( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/Yield.g.cs b/Rewrite/src/Rewrite.Java/Tree/Yield.g.cs index 2ac0484f..26ec611d 100644 --- a/Rewrite/src/Rewrite.Java/Tree/Yield.g.cs +++ b/Rewrite/src/Rewrite.Java/Tree/Yield.g.cs @@ -6,6 +6,7 @@ //------------------------------------------------------------------------------ #nullable enable #pragma warning disable CS0108 +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Rewrite.Core; using Rewrite.Core.Marker; @@ -21,6 +22,9 @@ namespace Rewrite.RewriteJava.Tree; [SuppressMessage("ReSharper", "RedundantNameQualifier")] public partial interface J : Rewrite.Core.Tree { + #if DEBUG_VISITOR + [DebuggerStepThrough] + #endif public sealed partial class Yield( Guid id, Space prefix, diff --git a/Rewrite/src/Rewrite.Java/Tree/_CommonOverrides.cs b/Rewrite/src/Rewrite.Java/Tree/_CommonOverrides.cs new file mode 100644 index 00000000..7f3a383f --- /dev/null +++ b/Rewrite/src/Rewrite.Java/Tree/_CommonOverrides.cs @@ -0,0 +1,307 @@ +using Rewrite.Core; + +namespace Rewrite.RewriteJava.Tree +{ + public partial interface J + { + partial class AnnotatedType + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Annotation + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class ArrayAccess + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class ArrayDimension + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class ArrayType + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Assert + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Assignment + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class AssignmentOperation + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Binary + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Block + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Break + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Case + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class ClassDeclaration + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class CompilationUnit + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Continue + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class ControlParentheses + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class DoWhileLoop + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Empty + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class EnumValue + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class EnumValueSet + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class FieldAccess + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class ForEachLoop + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class ForLoop + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Identifier + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class If + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Import + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class InstanceOf + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class IntersectionType + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Label + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Lambda + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Literal + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class MemberReference + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class MethodDeclaration + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class MethodInvocation + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Modifier + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class MultiCatch + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class NewArray + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class NewClass + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class NullableType + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Package + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class ParameterizedType + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Parentheses + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class ParenthesizedTypeTree + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Primitive + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Return + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Switch + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class SwitchExpression + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Synchronized + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Ternary + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Throw + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Try + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class TypeCast + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class TypeParameter + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class TypeParameters + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Unary + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Unknown + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class VariableDeclarations + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class WhileLoop + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Wildcard + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + + partial class Yield + { + public override string? ToString() => Core.Tree.ToString(this) ?? base.ToString(); + } + } +} diff --git a/Rewrite/tests/Rewrite.CSharp.Tests/GlobalImports.cs b/Rewrite/tests/Rewrite.CSharp.Tests/GlobalImports.cs new file mode 100644 index 00000000..ff3b0905 --- /dev/null +++ b/Rewrite/tests/Rewrite.CSharp.Tests/GlobalImports.cs @@ -0,0 +1,3 @@ +global using Rewrite.RewriteCSharp.Tree; +global using Rewrite.RewriteJava.Tree; +global using Rewrite.Core; diff --git a/Rewrite/tests/Rewrite.CSharp.Tests/PlayTests.cs b/Rewrite/tests/Rewrite.CSharp.Tests/PlayTests.cs new file mode 100644 index 00000000..cf287e12 --- /dev/null +++ b/Rewrite/tests/Rewrite.CSharp.Tests/PlayTests.cs @@ -0,0 +1,47 @@ +using Rewrite.Core.Marker; +using Rewrite.RewriteCSharp; +using Rewrite.RewriteCSharp.Test.Api; +using Rewrite.Test; +using Xunit.Abstractions; + +namespace Rewrite.CSharp.Tests.Tree; + +using static Assertions; + +[Collection(Collections.PrinterAccess)] +public class PlayTests(ITestOutputHelper _output) : RewriteTest +{ + [Fact] + public void MyTest() + { + var root = new CSharpParser.Builder().Build().Parse( + """ + public class Foo + { + void Bar() + } + """ + ); + var methodDeclaration = root.Descendents().OfType().First(); + var newRoot = root.ReplaceNode(methodDeclaration, methodDeclaration.WithName(methodDeclaration.Name.WithSimpleName("Hello"))); + _output.WriteLine(newRoot.ToString()); + } + + [Fact] + public void ParseTests() + { + var root = new CSharpParser.Builder().Build().Parse( + """ + public class Foo + { + void Main() + { + a.Hello().There; + } + } + """ + ); + var node = root.Descendents().OfType().First().Body!.Statements[0]; + _output.WriteLine(node.ToString()); + } +} diff --git a/Rewrite/tests/Rewrite.CSharp.Tests/Rewrite.CSharp.Tests.csproj b/Rewrite/tests/Rewrite.CSharp.Tests/Rewrite.CSharp.Tests.csproj index 98dd9358..3b64133a 100644 --- a/Rewrite/tests/Rewrite.CSharp.Tests/Rewrite.CSharp.Tests.csproj +++ b/Rewrite/tests/Rewrite.CSharp.Tests/Rewrite.CSharp.Tests.csproj @@ -1,14 +1,11 @@ - net8.0 enable enable - TRACE;DEBUG;REMOTE_PRINTER false true - all diff --git a/Rewrite/tests/Rewrite.CSharp.Tests/Tree/ArrayAccessTests.cs b/Rewrite/tests/Rewrite.CSharp.Tests/Tree/ArrayAccessTests.cs index 80e6c967..e74cf2a2 100644 --- a/Rewrite/tests/Rewrite.CSharp.Tests/Tree/ArrayAccessTests.cs +++ b/Rewrite/tests/Rewrite.CSharp.Tests/Tree/ArrayAccessTests.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using Rewrite.RewriteCSharp.Test.Api; using Rewrite.Test; diff --git a/Rewrite/tests/Rewrite.CSharp.Tests/Tree/MemberAccessTests.cs b/Rewrite/tests/Rewrite.CSharp.Tests/Tree/MemberAccessTests.cs index b06b1b6f..527eb80b 100644 --- a/Rewrite/tests/Rewrite.CSharp.Tests/Tree/MemberAccessTests.cs +++ b/Rewrite/tests/Rewrite.CSharp.Tests/Tree/MemberAccessTests.cs @@ -45,4 +45,22 @@ int M(int[] a) ) ); } + + [Fact] + public void SimpleFieldAccess() + { + RewriteRun( + CSharp( + """ + public class Foo + { + int M() + { + var a = a.b.c; + } + } + """ + , s => s.AfterRecipe = c => Console.WriteLine(c)) + ); + } } diff --git a/Rewrite/tests/Rewrite.CSharp.Tests/Tree/MethodInvocationTests.cs b/Rewrite/tests/Rewrite.CSharp.Tests/Tree/MethodInvocationTests.cs index 613bbb34..ae189acc 100644 --- a/Rewrite/tests/Rewrite.CSharp.Tests/Tree/MethodInvocationTests.cs +++ b/Rewrite/tests/Rewrite.CSharp.Tests/Tree/MethodInvocationTests.cs @@ -92,4 +92,26 @@ static string M() ) ); } + + [Fact] + public void InvocationOfDelegateReturnedByMethod() + { + RewriteRun( + CSharp( + """ + public class T + { + void Main() + { + Something()(); + } + public static Func Something() + { + return () => "hello"; + } + } + """ + ) + ); + } } diff --git a/Rewrite/tests/Rewrite.CSharp.Tests/Tree/NullSafeExpressionTests.cs b/Rewrite/tests/Rewrite.CSharp.Tests/Tree/NullSafeExpressionTests.cs index 836162bb..23b5e9e3 100644 --- a/Rewrite/tests/Rewrite.CSharp.Tests/Tree/NullSafeExpressionTests.cs +++ b/Rewrite/tests/Rewrite.CSharp.Tests/Tree/NullSafeExpressionTests.cs @@ -1,5 +1,7 @@ using Rewrite.RewriteCSharp.Test.Api; using Rewrite.Test; +using Rewrite.RewriteCSharp; +using Rewrite.RewriteJava; namespace Rewrite.CSharp.Tests.Tree; @@ -8,7 +10,7 @@ namespace Rewrite.CSharp.Tests.Tree; [Collection(Collections.PrinterAccess)] public class NullSafeExpressionTests : RewriteTest { - [Fact(Skip = "NullSafeExpression parsing was disabled due to infinite recursion issue")] + [Fact(Skip = "not yet working")] public void Space() { RewriteRun( @@ -26,7 +28,7 @@ public object M(int? i) ); } - [Fact(Skip = "NullSafeExpression parsing was disabled due to infiti recursion issue")] + [Fact] public void NestedMethodCall() { RewriteRun( @@ -44,7 +46,7 @@ public object M(int? i) ); } - [Fact(Skip = "NullSafeExpression parsing was disabled due to infiti recursion issue")] + [Fact] public void FieldAccess() { RewriteRun( @@ -52,18 +54,24 @@ public void FieldAccess() """ public class Foo { - Foo? foo_; + A a = new A(new B(new C())); public object M() { - return this.foo_?.foo_; + a?.b?.c().ToString(); } } - """ - ) + record C(); + record B(C c); + record A(B b); + """, + a => a.AfterRecipe = c => + { + c.ToString(); + }) ); } - [Fact(Skip = "NullSafeExpression parsing was disabled due to infiti recursion issue")] + [Fact] public void SequentialFieldAccess() { RewriteRun( @@ -85,7 +93,7 @@ public object M() } - [Fact(Skip = "NullSafeExpression parsing was disabled due to infiti recursion issue")] + [Fact] public void ArrayAccess() { RewriteRun( diff --git a/rewrite-csharp/src/main/java/org/openrewrite/csharp/CSharpPrinter.java b/rewrite-csharp/src/main/java/org/openrewrite/csharp/CSharpPrinter.java index b1b49323..3b165a4c 100644 --- a/rewrite-csharp/src/main/java/org/openrewrite/csharp/CSharpPrinter.java +++ b/rewrite-csharp/src/main/java/org/openrewrite/csharp/CSharpPrinter.java @@ -521,7 +521,8 @@ public J visitMethodDeclaration(J.MethodDeclaration method, PrintOutputCapture

p) { beforeSyntax(method, Space.Location.METHOD_INVOCATION_PREFIX, p); - visitRightPadded(method.getPadding().getSelect(), JRightPadded.Location.METHOD_SELECT, ".", p); + String prefix = !method.getSimpleName().isEmpty() ? "." : ""; + visitRightPadded(method.getPadding().getSelect(), JRightPadded.Location.METHOD_SELECT, prefix, p); visit(method.getName(), p); visitContainer("<", method.getPadding().getTypeParameters(), JContainer.Location.TYPE_PARAMETERS, ",", ">", p); visitContainer("(", method.getPadding().getArguments(), JContainer.Location.METHOD_INVOCATION_ARGUMENTS, ",", ")", p);