Skip to content

NormalizeWhitespace causes error on XML comments #47278

@svick

Description

@svick

Version Used: 3.7.0

Steps to Reproduce:

Run the following code:

string code = @"namespace Foo
{
    /// <summary>
    /// This is Foo.Bar
    /// </summary>
    class Bar { }
}";

var tree = SyntaxFactory.ParseSyntaxTree(code);
tree = tree.WithRootAndOptions(tree.GetRoot().NormalizeWhitespace(), tree.Options);
var compilation = CSharpCompilation.Create(null)
	.WithOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary))
	.AddSyntaxTrees(tree)
	.AddReferences(MetadataReference.CreateFromFile(typeof(object).Assembly.Location));

var diagnostics = compilation.GetDiagnostics();

Expected Behavior:

No errors.

Actual Behavior:

error CS1569: Error writing to XML documentation file: Value must be positive. (Parameter 'count')

It seems the call to NormalizeWhitespace() somehow turns the tree into a shape that is not supported by DocumentationCommentCompiler.

The exception stack trace is:

System.ArgumentOutOfRangeException: Value must be positive.
Parameter name: count
   at System.Text.StringBuilder.Append(String value, Int32 startIndex, Int32 count)
   at Microsoft.CodeAnalysis.CSharp.DocumentationCommentCompiler.WriteSubStringLine(String message, Int32 start, Int32 length) in C:\code\roslyn\src\Compilers\CSharp\Portable\Compiler\DocumentationCommentCompiler.cs:line 1161
   at Microsoft.CodeAnalysis.CSharp.DocumentationCommentCompiler.WriteFormattedSingleLineComment(String text) in C:\code\roslyn\src\Compilers\CSharp\Portable\Compiler\DocumentationCommentCompiler.cs:line 810
   at Microsoft.CodeAnalysis.CSharp.DocumentationCommentCompiler.FormatComment(String substitutedText) in C:\code\roslyn\src\Compilers\CSharp\Portable\Compiler\DocumentationCommentCompiler.cs:line 659
   at Microsoft.CodeAnalysis.CSharp.DocumentationCommentCompiler.TryProcessDocumentationCommentTriviaNodes(Symbol symbol, Boolean isPartialMethodDefinitionPart, ImmutableArray`1 docCommentNodes, Boolean reportParameterOrTypeParameterDiagnostics, String& withUnprocessedIncludes, Boolean& haveParseError, HashSet`1& documentedTypeParameters, HashSet`1& documentedParameters, ImmutableArray`1& includeElementNodes) in C:\code\roslyn\src\Compilers\CSharp\Portable\Compiler\DocumentationCommentCompiler.cs:line 448
   at Microsoft.CodeAnalysis.CSharp.DocumentationCommentCompiler.DefaultVisit(Symbol symbol) in C:\code\roslyn\src\Compilers\CSharp\Portable\Compiler\DocumentationCommentCompiler.cs:line 297
   at Microsoft.CodeAnalysis.CSharp.DocumentationCommentCompiler.VisitNamedType(NamedTypeSymbol symbol) in C:\code\roslyn\src\Compilers\CSharp\Portable\Compiler\DocumentationCommentCompiler.cs:line 223
   at Microsoft.CodeAnalysis.CSharp.Symbols.NamedTypeSymbol.Accept(CSharpSymbolVisitor visitor) in C:\code\roslyn\src\Compilers\CSharp\Portable\Symbols\NamedTypeSymbol.cs:line 577
   at Microsoft.CodeAnalysis.CSharp.DocumentationCommentCompiler.VisitNamespace(NamespaceSymbol symbol) in C:\code\roslyn\src\Compilers\CSharp\Portable\Compiler\DocumentationCommentCompiler.cs:line 199
   at Microsoft.CodeAnalysis.CSharp.Symbols.NamespaceSymbol.Accept(CSharpSymbolVisitor visitor) in C:\code\roslyn\src\Compilers\CSharp\Portable\Symbols\NamespaceSymbol.cs:line 143
   at Microsoft.CodeAnalysis.CSharp.DocumentationCommentCompiler.VisitNamespace(NamespaceSymbol symbol) in C:\code\roslyn\src\Compilers\CSharp\Portable\Compiler\DocumentationCommentCompiler.cs:line 199
   at Microsoft.CodeAnalysis.CSharp.Symbols.NamespaceSymbol.Accept(CSharpSymbolVisitor visitor) in C:\code\roslyn\src\Compilers\CSharp\Portable\Symbols\NamespaceSymbol.cs:line 143
   at Microsoft.CodeAnalysis.CSharp.CSharpSymbolVisitor.Visit(Symbol symbol) in C:\code\roslyn\src\Compilers\CSharp\Portable\Symbols\SymbolVisitor.cs:line 15
   at Microsoft.CodeAnalysis.CSharp.DocumentationCommentCompiler.WriteDocumentationCommentXml(CSharpCompilation compilation, String assemblyName, Stream xmlDocStream, DiagnosticBag diagnostics, CancellationToken cancellationToken, SyntaxTree filterTree, Nullable`1 filterSpanWithinTree) in C:\code\roslyn\src\Compilers\CSharp\Portable\Compiler\DocumentationCommentCompiler.cs:line 102

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions