dotnet/roslyn
在 GitHub 查看System.ArgumentNullException in SyntaxNodeExtensions.RemoveNode
Open
#4,412 创建于 2015年8月7日
Area-CompilersBugConcept-Diagnostic Clarityhelp wanted
描述
The following Code causes an exception:
void M()
{
ExpressionStatementSyntax expressionStatement = SyntaxFactory.ExpressionStatement(SyntaxFactory.ParseExpression("a + b"));
expressionStatement.RemoveNode(expressionStatement.Expression, SyntaxRemoveOptions.KeepNoTrivia);
}
My assumption is that an AST with an ExpressionStatementSyntax that has no ExpressionSyntax is invalid, and thus an error occurs. The error message could be a lot more descriptive about that, though...
Exception:
at Microsoft.CodeAnalysis.CSharp.SyntaxFactory.ExpressionStatement(ExpressionSyntax expression, SyntaxToken semicolonToken)
at Microsoft.CodeAnalysis.CSharp.Syntax.ExpressionStatementSyntax.Update(ExpressionSyntax expression, SyntaxToken semicolonToken)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.VisitExpressionStatement(ExpressionStatementSyntax node)
at Microsoft.CodeAnalysis.CSharp.Syntax.ExpressionStatementSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.Visit(SyntaxNode node)
at Microsoft.CodeAnalysis.CSharp.Syntax.SyntaxNodeRemover.SyntaxRemover.Visit(SyntaxNode node)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.VisitListElement[TNode](TNode node)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.VisitList[TNode](SyntaxList`1 list)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.VisitBlock(BlockSyntax node)
at Microsoft.CodeAnalysis.CSharp.Syntax.BlockSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.Visit(SyntaxNode node)
at Microsoft.CodeAnalysis.CSharp.Syntax.SyntaxNodeRemover.SyntaxRemover.Visit(SyntaxNode node)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.VisitMethodDeclaration(MethodDeclarationSyntax node)
at Microsoft.CodeAnalysis.CSharp.Syntax.MethodDeclarationSyntax.Accept[TResult](CSharpSyntaxVisitor`1 visitor)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.Visit(SyntaxNode node)
at Microsoft.CodeAnalysis.CSharp.Syntax.SyntaxNodeRemover.SyntaxRemover.Visit(SyntaxNode node)
at Microsoft.CodeAnalysis.CSharp.Syntax.SyntaxNodeRemover.RemoveNodes[TRoot](TRoot root, IEnumerable`1 nodes, SyntaxRemoveOptions options)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxNode.RemoveNodesCore(IEnumerable`1 nodes, SyntaxRemoveOptions options)
at Microsoft.CodeAnalysis.SyntaxNodeExtensions.RemoveNode[TRoot](TRoot root, SyntaxNode node, SyntaxRemoveOptions options)
at RoslynBugTest.Program.Main() in c:\Users\cs\Documents\Visual Studio 2013\Projects\RoslynBugTest\RoslynBugTest\Program.cs:Zeile 31.
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()