private static void TestRed(string input, string output, RedRewriter rewriter, bool isExpr) { var red = isExpr ? (CSharpSyntaxNode)SyntaxFactory.ParseExpression(input) : SyntaxFactory.ParseStatement(input); Assert.False(red.ContainsDiagnostics); var result = rewriter.Visit(red); Assert.Equal(input == output, ReferenceEquals(red, result)); Assert.Equal(output, result.ToFullString()); }
public void RewriteMissingIdentifierInExpressionStatement_WithSyntaxTree() { var tree1 = SyntaxFactory.ParseSyntaxTree( "class C { static void Main() { if (true) } }" ); var ifStmt1 = tree1 .GetCompilationUnitRoot() .DescendantNodes() .OfType <IfStatementSyntax>() .Single(); var exprStmt1 = (ExpressionStatementSyntax)ifStmt1.Statement; var expr1 = (IdentifierNameSyntax)exprStmt1.Expression; var token1 = expr1.Identifier; Assert.Equal(tree1, expr1.SyntaxTree); Assert.True(expr1.IsMissing); Assert.True(expr1.ContainsDiagnostics); Assert.True(token1.IsMissing); Assert.False(token1.ContainsDiagnostics); var trivia = SyntaxFactory.ParseTrailingTrivia(" "); var rewriter = new RedRewriter( rewriteToken: tok => tok.Kind() == SyntaxKind.IdentifierToken ? tok.WithLeadingTrivia(trivia) : tok ); var ifStmt2 = (IfStatementSyntax)rewriter.Visit(ifStmt1); var exprStmt2 = (ExpressionStatementSyntax)ifStmt2.Statement; var expr2 = (IdentifierNameSyntax)exprStmt2.Expression; var token2 = expr2.Identifier; Assert.NotEqual(expr1, expr2); Assert.NotNull(expr2.SyntaxTree); Assert.False( expr2.SyntaxTree.HasCompilationUnitRoot, "how did we get a CompilationUnit root?" ); Assert.Same(ifStmt2, expr2.SyntaxTree.GetRoot()); Assert.True(expr2.IsMissing); Assert.False(expr2.ContainsDiagnostics); //gone after rewrite Assert.NotEqual(token1, token2); Assert.True(token2.IsMissing); Assert.False(token2.ContainsDiagnostics); Assert.True(IsStatementExpression(expr1)); Assert.True(IsStatementExpression(expr2)); }
public void RewriteMissingIdentiferInExpressionStatement_ImplicitlyCreatedSyntaxTree() { var ifStmt1 = (IfStatementSyntax)SyntaxFactory.ParseStatement("if (true)"); var exprStmt1 = (ExpressionStatementSyntax)ifStmt1.Statement; var expr1 = (IdentifierNameSyntax)exprStmt1.Expression; var token1 = expr1.Identifier; Assert.NotNull(expr1.SyntaxTree); Assert.False(expr1.SyntaxTree.HasCompilationUnitRoot, "how did we get a CompilationUnit root?"); Assert.Same(ifStmt1, expr1.SyntaxTree.GetRoot()); Assert.True(expr1.IsMissing); Assert.True(expr1.ContainsDiagnostics); Assert.True(token1.IsMissing); Assert.False(token1.ContainsDiagnostics); var trivia = SyntaxFactory.ParseTrailingTrivia(" "); var rewriter = new RedRewriter(rewriteToken: tok => tok.CSharpKind() == SyntaxKind.IdentifierToken ? tok.WithLeadingTrivia(trivia) : tok); var ifStmt2 = (IfStatementSyntax)rewriter.Visit(ifStmt1); var exprStmt2 = (ExpressionStatementSyntax)ifStmt2.Statement; var expr2 = (IdentifierNameSyntax)exprStmt2.Expression; var token2 = expr2.Identifier; Assert.NotEqual(expr1, expr2); Assert.NotNull(expr2.SyntaxTree); Assert.False(expr2.SyntaxTree.HasCompilationUnitRoot, "how did we get a CompilationUnit root?"); Assert.Same(ifStmt2, expr2.SyntaxTree.GetRoot()); Assert.True(expr2.IsMissing); Assert.False(expr2.ContainsDiagnostics); //gone after rewrite Assert.NotEqual(token1, token2); Assert.True(token2.IsMissing); Assert.False(token2.ContainsDiagnostics); Assert.True(IsStatementExpression(expr1.Green)); Assert.True(IsStatementExpression(expr2.Green)); }
public void RewriteMissingIdentifierInExpressionStatement_WithSyntaxTree() { var tree1 = SyntaxFactory.ParseSyntaxTree("class C { static void Main() { if (true) } }"); var ifStmt1 = tree1.GetCompilationUnitRoot().DescendantNodes().OfType<IfStatementSyntax>().Single(); var exprStmt1 = (ExpressionStatementSyntax)ifStmt1.Statement; var expr1 = (IdentifierNameSyntax)exprStmt1.Expression; var token1 = expr1.Identifier; Assert.Equal(tree1, expr1.SyntaxTree); Assert.True(expr1.IsMissing); Assert.True(expr1.ContainsDiagnostics); Assert.True(token1.IsMissing); Assert.False(token1.ContainsDiagnostics); var trivia = SyntaxFactory.ParseTrailingTrivia(" "); var rewriter = new RedRewriter(rewriteToken: tok => tok.Kind() == SyntaxKind.IdentifierToken ? tok.WithLeadingTrivia(trivia) : tok); var ifStmt2 = (IfStatementSyntax)rewriter.Visit(ifStmt1); var exprStmt2 = (ExpressionStatementSyntax)ifStmt2.Statement; var expr2 = (IdentifierNameSyntax)exprStmt2.Expression; var token2 = expr2.Identifier; Assert.NotEqual(expr1, expr2); Assert.NotNull(expr2.SyntaxTree); Assert.False(expr2.SyntaxTree.HasCompilationUnitRoot, "how did we get a CompilationUnit root?"); Assert.Same(ifStmt2, expr2.SyntaxTree.GetRoot()); Assert.True(expr2.IsMissing); Assert.False(expr2.ContainsDiagnostics); //gone after rewrite Assert.NotEqual(token1, token2); Assert.True(token2.IsMissing); Assert.False(token2.ContainsDiagnostics); Assert.True(IsStatementExpression(expr1)); Assert.True(IsStatementExpression(expr2)); }
public void RewriteMissingIdentiferInExpressionStatement_ImplicitlyCreatedSyntaxTree() { var ifStmt1 = (IfStatementSyntax)SyntaxFactory.ParseStatement("if (true)"); var exprStmt1 = (ExpressionStatementSyntax)ifStmt1.Statement; var expr1 = (IdentifierNameSyntax)exprStmt1.Expression; var token1 = expr1.Identifier; Assert.NotNull(expr1.SyntaxTree); Assert.False(expr1.SyntaxTree.HasCompilationUnitRoot, "how did we get a CompilationUnit root?"); Assert.Same(ifStmt1, expr1.SyntaxTree.GetRoot()); Assert.True(expr1.IsMissing); Assert.True(expr1.ContainsDiagnostics); Assert.True(token1.IsMissing); Assert.False(token1.ContainsDiagnostics); var trivia = SyntaxFactory.ParseTrailingTrivia(" "); var rewriter = new RedRewriter(rewriteToken: tok => tok.Kind() == SyntaxKind.IdentifierToken ? tok.WithLeadingTrivia(trivia) : tok); var ifStmt2 = (IfStatementSyntax)rewriter.Visit(ifStmt1); var exprStmt2 = (ExpressionStatementSyntax)ifStmt2.Statement; var expr2 = (IdentifierNameSyntax)exprStmt2.Expression; var token2 = expr2.Identifier; Assert.NotEqual(expr1, expr2); Assert.NotNull(expr2.SyntaxTree); Assert.False(expr2.SyntaxTree.HasCompilationUnitRoot, "how did we get a CompilationUnit root?"); Assert.Same(ifStmt2, expr2.SyntaxTree.GetRoot()); Assert.True(expr2.IsMissing); Assert.False(expr2.ContainsDiagnostics); //gone after rewrite Assert.NotEqual(token1, token2); Assert.True(token2.IsMissing); Assert.False(token2.ContainsDiagnostics); Assert.True(IsStatementExpression(expr1)); Assert.True(IsStatementExpression(expr2)); }