| File: AdditionalTextFile.cs | Web Access |
| Project: src\roslyn\src\Compilers\Core\Portable\Microsoft.CodeAnalysis.csproj (Microsoft.CodeAnalysis) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Collections.Generic; using System.Threading; using Microsoft.CodeAnalysis.Collections; using Microsoft.CodeAnalysis.Text; using Roslyn.Utilities; namespace Microsoft.CodeAnalysis { /// <summary> /// Represents a non source code file. /// </summary> internal sealed class AdditionalTextFile : AdditionalText { private readonly CommandLineSourceFile _sourceFile; private readonly CommonCompiler _compiler; private readonly Lazy<SourceText?> _text; private IList<DiagnosticInfo> _diagnostics; public AdditionalTextFile(CommandLineSourceFile sourceFile, CommonCompiler compiler) { if (compiler == null) { throw new ArgumentNullException(nameof(compiler)); } _sourceFile = sourceFile; _compiler = compiler; _diagnostics = SpecializedCollections.EmptyList<DiagnosticInfo>(); _text = new Lazy<SourceText?>(ReadText); } private SourceText? ReadText() { var diagnostics = new List<DiagnosticInfo>(); var text = _compiler.TryReadFileContent(_sourceFile, diagnostics); _diagnostics = diagnostics; return text; } /// <summary> /// Path to the file. /// </summary> public override string Path => _sourceFile.Path; /// <summary> /// Returns a <see cref="SourceText"/> with the contents of this file, or <c>null</c> if /// there were errors reading the file. /// </summary> public override SourceText? GetText(CancellationToken cancellationToken = default) => _text.Value; /// <summary> /// Errors encountered when trying to read the additional file. Always empty if /// <see cref="GetText(CancellationToken)"/> has not been called. /// </summary> internal IList<DiagnosticInfo> Diagnostics => _diagnostics; } }