提交 a1cb7c61 编写于 作者: P Paul Harrington

Make SourceText.Lines non-virtual and introduce GetLinesCore protected virtual method.

上级 c4f8f719
...@@ -1327,6 +1327,7 @@ Microsoft.CodeAnalysis.Text.SourceText ...@@ -1327,6 +1327,7 @@ Microsoft.CodeAnalysis.Text.SourceText
Microsoft.CodeAnalysis.Text.SourceText.ChecksumAlgorithm.get Microsoft.CodeAnalysis.Text.SourceText.ChecksumAlgorithm.get
Microsoft.CodeAnalysis.Text.SourceText.ContentEquals(Microsoft.CodeAnalysis.Text.SourceText other) Microsoft.CodeAnalysis.Text.SourceText.ContentEquals(Microsoft.CodeAnalysis.Text.SourceText other)
Microsoft.CodeAnalysis.Text.SourceText.GetSubText(int start) Microsoft.CodeAnalysis.Text.SourceText.GetSubText(int start)
Microsoft.CodeAnalysis.Text.SourceText.Lines.get
Microsoft.CodeAnalysis.Text.SourceText.Replace(Microsoft.CodeAnalysis.Text.TextSpan span, string newText) Microsoft.CodeAnalysis.Text.SourceText.Replace(Microsoft.CodeAnalysis.Text.TextSpan span, string newText)
Microsoft.CodeAnalysis.Text.SourceText.Replace(int start, int length, string newText) Microsoft.CodeAnalysis.Text.SourceText.Replace(int start, int length, string newText)
Microsoft.CodeAnalysis.Text.SourceText.SourceText(System.Collections.Immutable.ImmutableArray<byte> checksum = default(System.Collections.Immutable.ImmutableArray<byte>), Microsoft.CodeAnalysis.Text.SourceHashAlgorithm checksumAlgorithm = Microsoft.CodeAnalysis.Text.SourceHashAlgorithm.Sha1, Microsoft.CodeAnalysis.Text.SourceTextContainer container = null) Microsoft.CodeAnalysis.Text.SourceText.SourceText(System.Collections.Immutable.ImmutableArray<byte> checksum = default(System.Collections.Immutable.ImmutableArray<byte>), Microsoft.CodeAnalysis.Text.SourceHashAlgorithm checksumAlgorithm = Microsoft.CodeAnalysis.Text.SourceHashAlgorithm.Sha1, Microsoft.CodeAnalysis.Text.SourceTextContainer container = null)
...@@ -2106,9 +2107,9 @@ virtual Microsoft.CodeAnalysis.SyntaxWalker.VisitTrivia(Microsoft.CodeAnalysis.S ...@@ -2106,9 +2107,9 @@ virtual Microsoft.CodeAnalysis.SyntaxWalker.VisitTrivia(Microsoft.CodeAnalysis.S
virtual Microsoft.CodeAnalysis.Text.SourceText.Container.get virtual Microsoft.CodeAnalysis.Text.SourceText.Container.get
virtual Microsoft.CodeAnalysis.Text.SourceText.ContentEqualsImpl(Microsoft.CodeAnalysis.Text.SourceText other) virtual Microsoft.CodeAnalysis.Text.SourceText.ContentEqualsImpl(Microsoft.CodeAnalysis.Text.SourceText other)
virtual Microsoft.CodeAnalysis.Text.SourceText.GetChangeRanges(Microsoft.CodeAnalysis.Text.SourceText oldText) virtual Microsoft.CodeAnalysis.Text.SourceText.GetChangeRanges(Microsoft.CodeAnalysis.Text.SourceText oldText)
virtual Microsoft.CodeAnalysis.Text.SourceText.GetLinesCore()
virtual Microsoft.CodeAnalysis.Text.SourceText.GetSubText(Microsoft.CodeAnalysis.Text.TextSpan span) virtual Microsoft.CodeAnalysis.Text.SourceText.GetSubText(Microsoft.CodeAnalysis.Text.TextSpan span)
virtual Microsoft.CodeAnalysis.Text.SourceText.GetTextChanges(Microsoft.CodeAnalysis.Text.SourceText oldText) virtual Microsoft.CodeAnalysis.Text.SourceText.GetTextChanges(Microsoft.CodeAnalysis.Text.SourceText oldText)
virtual Microsoft.CodeAnalysis.Text.SourceText.Lines.get
virtual Microsoft.CodeAnalysis.Text.SourceText.ToString(Microsoft.CodeAnalysis.Text.TextSpan span) virtual Microsoft.CodeAnalysis.Text.SourceText.ToString(Microsoft.CodeAnalysis.Text.TextSpan span)
virtual Microsoft.CodeAnalysis.Text.SourceText.WithChanges(System.Collections.Generic.IEnumerable<Microsoft.CodeAnalysis.Text.TextChange> changes) virtual Microsoft.CodeAnalysis.Text.SourceText.WithChanges(System.Collections.Generic.IEnumerable<Microsoft.CodeAnalysis.Text.TextChange> changes)
virtual Microsoft.CodeAnalysis.Text.SourceText.Write(System.IO.TextWriter writer, Microsoft.CodeAnalysis.Text.TextSpan span, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) virtual Microsoft.CodeAnalysis.Text.SourceText.Write(System.IO.TextWriter writer, Microsoft.CodeAnalysis.Text.TextSpan span, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
......
...@@ -25,7 +25,7 @@ public abstract class SourceText ...@@ -25,7 +25,7 @@ public abstract class SourceText
private readonly SourceHashAlgorithm _checksumAlgorithm; private readonly SourceHashAlgorithm _checksumAlgorithm;
private SourceTextContainer _lazyContainer; private SourceTextContainer _lazyContainer;
private LineInfo _lazyLineInfo; private TextLineCollection _lazyLineInfo;
private ImmutableArray<byte> _lazyChecksum; private ImmutableArray<byte> _lazyChecksum;
protected SourceText(ImmutableArray<byte> checksum = default(ImmutableArray<byte>), SourceHashAlgorithm checksumAlgorithm = SourceHashAlgorithm.Sha1, SourceTextContainer container = null) protected SourceText(ImmutableArray<byte> checksum = default(ImmutableArray<byte>), SourceHashAlgorithm checksumAlgorithm = SourceHashAlgorithm.Sha1, SourceTextContainer container = null)
...@@ -479,20 +479,20 @@ public virtual IReadOnlyList<TextChange> GetTextChanges(SourceText oldText) ...@@ -479,20 +479,20 @@ public virtual IReadOnlyList<TextChange> GetTextChanges(SourceText oldText)
/// <summary> /// <summary>
/// The collection of individual text lines. /// The collection of individual text lines.
/// </summary> /// </summary>
public virtual TextLineCollection Lines public TextLineCollection Lines
{ {
get get
{ {
if (_lazyLineInfo == null) var info = _lazyLineInfo;
{ return info ?? Interlocked.CompareExchange(ref _lazyLineInfo, info = GetLinesCore(), null) ?? info;
var info = new LineInfo(this, this.ParseLineStarts());
Interlocked.CompareExchange(ref _lazyLineInfo, info, null);
}
return _lazyLineInfo;
} }
} }
protected virtual TextLineCollection GetLinesCore()
{
return new LineInfo(this, ParseLineStarts());
}
private class LineInfo : TextLineCollection private class LineInfo : TextLineCollection
{ {
private readonly SourceText _text; private readonly SourceText _text;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册