public void Dispose() { if (_addLineMapping) { // Verify that the generated length has not already been calculated if (_generatedContentLength == 0) { _generatedContentLength = _writer.GenerateCode().Length - _generatedLocation.AbsoluteIndex; } var generatedLocation = new MappingLocation(_generatedLocation, _generatedContentLength); if (_documentMapping.ContentLength == -1) { _documentMapping.ContentLength = generatedLocation.ContentLength; } _writer.LineMappingManager.AddMapping( documentLocation: _documentMapping, generatedLocation: new MappingLocation(_generatedLocation, _generatedContentLength)); } if (_writePragmas) { // Need to add an additional line at the end IF there wasn't one already written. // This is needed to work with the C# editor's handling of #line ... var endsWithNewline = _writer.GenerateCode().EndsWith("\n"); // Always write at least 1 empty line to potentially separate code from pragmas. _writer.WriteLine(); // Check if the previous empty line wasn't enough to separate code from pragmas. if (!endsWithNewline) { _writer.WriteLine(); } _writer.WriteLineDefaultDirective() .WriteLineHiddenDirective(); } // Reset indent back to when it was started _writer.SetIndent(_startIndent); }