Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
aec6b9d8
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
aec6b9d8
编写于
1月 24, 2017
作者:
C
CyrusNajmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Merge the different readers into one type.
上级
5da8d0a7
变更
29
隐藏空白更改
内联
并排
Showing
29 changed file
with
376 addition
and
430 deletion
+376
-430
src/Compilers/CSharp/Portable/Syntax/CSharpSyntaxNode.cs
src/Compilers/CSharp/Portable/Syntax/CSharpSyntaxNode.cs
+1
-1
src/Compilers/CSharp/Test/Syntax/Syntax/SerializationTests.cs
...Compilers/CSharp/Test/Syntax/Syntax/SerializationTests.cs
+1
-1
src/Compilers/Core/CodeAnalysisTest/ObjectSerializationTests.cs
...mpilers/Core/CodeAnalysisTest/ObjectSerializationTests.cs
+31
-31
src/Compilers/Core/Portable/Serialization/ObjectData.cs
src/Compilers/Core/Portable/Serialization/ObjectData.cs
+1
-1
src/Compilers/Core/Portable/Serialization/ObjectReader.cs
src/Compilers/Core/Portable/Serialization/ObjectReader.cs
+2
-0
src/Compilers/Core/Portable/Serialization/ObjectWriter.cs
src/Compilers/Core/Portable/Serialization/ObjectWriter.cs
+2
-0
src/Compilers/Core/Portable/Serialization/StreamObjectReader.cs
...mpilers/Core/Portable/Serialization/StreamObjectReader.cs
+128
-206
src/Compilers/Core/Portable/Serialization/StreamObjectWriter.cs
...mpilers/Core/Portable/Serialization/StreamObjectWriter.cs
+168
-148
src/Compilers/Core/Portable/Syntax/SyntaxNode.cs
src/Compilers/Core/Portable/Syntax/SyntaxNode.cs
+3
-3
src/Compilers/VisualBasic/Portable/Syntax/VisualBasicSyntaxNode.vb
...lers/VisualBasic/Portable/Syntax/VisualBasicSyntaxNode.vb
+1
-1
src/Compilers/VisualBasic/Test/Syntax/Syntax/SerializationTests.vb
...lers/VisualBasic/Test/Syntax/Syntax/SerializationTests.vb
+1
-1
src/EditorFeatures/Core/Implementation/TodoComment/TodoCommentState.cs
...tures/Core/Implementation/TodoComment/TodoCommentState.cs
+2
-2
src/EditorFeatures/Test/Utilities/BloomFilterTests.cs
src/EditorFeatures/Test/Utilities/BloomFilterTests.cs
+2
-2
src/VisualStudio/Core/Def/Implementation/DesignerAttribute/DesignerAttributeState.cs
...mplementation/DesignerAttribute/DesignerAttributeState.cs
+2
-2
src/VisualStudio/Core/Def/Implementation/Diagnostics/VisualStudioDiagnosticAnalyzerExecutor.cs
...ion/Diagnostics/VisualStudioDiagnosticAnalyzerExecutor.cs
+1
-1
src/VisualStudio/Core/Def/Implementation/Versions/SemanticVersionTrackingService.cs
...Implementation/Versions/SemanticVersionTrackingService.cs
+2
-2
src/VisualStudio/Core/Next/Remote/JsonRpcSession.cs
src/VisualStudio/Core/Next/Remote/JsonRpcSession.cs
+1
-1
src/Workspaces/Core/Portable/Diagnostics/DiagnosticDataSerializer.cs
...ces/Core/Portable/Diagnostics/DiagnosticDataSerializer.cs
+2
-2
src/Workspaces/Core/Portable/Execution/AbstractReferenceSerializationService.cs
...rtable/Execution/AbstractReferenceSerializationService.cs
+2
-2
src/Workspaces/Core/Portable/Execution/CustomAsset.cs
src/Workspaces/Core/Portable/Execution/CustomAsset.cs
+2
-2
src/Workspaces/Core/Portable/FindSymbols/SymbolTree/SymbolTreeInfo_Serialization.cs
...le/FindSymbols/SymbolTree/SymbolTreeInfo_Serialization.cs
+2
-2
src/Workspaces/Core/Portable/FindSymbols/SyntaxTree/SyntaxTreeIndex_Persistence.cs
...ble/FindSymbols/SyntaxTree/SyntaxTreeIndex_Persistence.cs
+3
-3
src/Workspaces/Core/Portable/Workspace/Solution/Checksum_Factory.cs
...aces/Core/Portable/Workspace/Solution/Checksum_Factory.cs
+4
-4
src/Workspaces/CoreTest/Execution/Extensions.cs
src/Workspaces/CoreTest/Execution/Extensions.cs
+2
-2
src/Workspaces/CoreTest/Execution/SnapshotSerializationTests.cs
...rkspaces/CoreTest/Execution/SnapshotSerializationTests.cs
+4
-4
src/Workspaces/CoreTest/FindAllDeclarationsTests.cs
src/Workspaces/CoreTest/FindAllDeclarationsTests.cs
+2
-2
src/Workspaces/CoreTest/SerializationTests.cs
src/Workspaces/CoreTest/SerializationTests.cs
+2
-2
src/Workspaces/Remote/ServiceHub/Services/CodeAnalysisService_Diagnostics.cs
...te/ServiceHub/Services/CodeAnalysisService_Diagnostics.cs
+1
-1
src/Workspaces/Remote/ServiceHub/Services/SnapshotService.JsonRpcAssetSource.cs
...ServiceHub/Services/SnapshotService.JsonRpcAssetSource.cs
+1
-1
未找到文件。
src/Compilers/CSharp/Portable/Syntax/CSharpSyntaxNode.cs
浏览文件 @
aec6b9d8
...
...
@@ -205,7 +205,7 @@ public static SyntaxNode DeserializeFrom(Stream stream, CancellationToken cancel
}
using
(
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
stream
,
knownObjects
:
GetDeserializationObjectData
(),
binder
:
s_defaultBinder
,
cancellationToken
:
cancellationToken
))
using
(
var
reader
=
ObjectReader
.
TryGetReader
(
stream
,
knownObjects
:
GetDeserializationObjectData
(),
binder
:
s_defaultBinder
,
cancellationToken
:
cancellationToken
))
{
if
(
reader
==
null
)
{
...
...
src/Compilers/CSharp/Test/Syntax/Syntax/SerializationTests.cs
浏览文件 @
aec6b9d8
...
...
@@ -210,7 +210,7 @@ private static void RoundTrip(string text, bool expectRecursive = true)
root
.
SerializeTo
(
stream
);
stream
.
Position
=
2
;
Assert
.
Equal
(
expectRecursive
,
Roslyn
.
Utilities
.
Stream
ObjectReader
.
IsRecursive
(
stream
));
Assert
.
Equal
(
expectRecursive
,
Roslyn
.
Utilities
.
ObjectReader
.
IsRecursive
(
stream
));
stream
.
Position
=
0
;
var
newRoot
=
CSharpSyntaxNode
.
DeserializeFrom
(
stream
);
...
...
src/Compilers/Core/CodeAnalysisTest/ObjectSerializationTests.cs
浏览文件 @
aec6b9d8
...
...
@@ -21,7 +21,7 @@ private void TestInvalidStreamVersion()
stream
.
Position
=
0
;
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
stream
);
var
reader
=
ObjectReader
.
TryGetReader
(
stream
);
Assert
.
Null
(
reader
);
}
...
...
@@ -29,16 +29,16 @@ private void RoundTrip(Action<ObjectWriter> writeAction, Action<ObjectReader> re
{
var
stream
=
new
MemoryStream
();
var
binder
=
new
ObjectBinder
();
var
writer
=
new
Stream
ObjectWriter
(
stream
,
binder
:
binder
,
recursive
:
recursive
);
var
writer
=
new
ObjectWriter
(
stream
,
binder
:
binder
,
recursive
:
recursive
);
writeAction
(
writer
);
writer
.
Dispose
();
stream
.
Position
=
2
;
Assert
.
Equal
(
recursive
,
Stream
ObjectReader
.
IsRecursive
(
stream
));
Assert
.
Equal
(
recursive
,
ObjectReader
.
IsRecursive
(
stream
));
stream
.
Position
=
0
;
using
(
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
stream
,
binder
:
binder
))
using
(
var
reader
=
ObjectReader
.
TryGetReader
(
stream
,
binder
:
binder
))
{
readAction
(
reader
);
}
...
...
@@ -54,16 +54,16 @@ private T RoundTrip<T>(T value, Action<ObjectWriter, T> writeAction, Func<Object
{
var
stream
=
new
MemoryStream
();
var
binder
=
new
ObjectBinder
();
var
writer
=
new
Stream
ObjectWriter
(
stream
,
binder
:
binder
,
recursive
:
recursive
);
var
writer
=
new
ObjectWriter
(
stream
,
binder
:
binder
,
recursive
:
recursive
);
writeAction
(
writer
,
value
);
writer
.
Dispose
();
stream
.
Position
=
2
;
Assert
.
Equal
(
recursive
,
Stream
ObjectReader
.
IsRecursive
(
stream
));
Assert
.
Equal
(
recursive
,
ObjectReader
.
IsRecursive
(
stream
));
stream
.
Position
=
0
;
using
(
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
stream
,
binder
:
binder
))
using
(
var
reader
=
ObjectReader
.
TryGetReader
(
stream
,
binder
:
binder
))
{
return
(
T
)
readAction
(
reader
);
}
...
...
@@ -380,36 +380,36 @@ public void TestEnumMember()
[
Fact
]
public
void
TestInt32EncodingKinds
()
{
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
Int32_1
,
Stream
ObjectWriter
.
EncodingKind
.
Int32_0
+
1
);
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
Int32_2
,
Stream
ObjectWriter
.
EncodingKind
.
Int32_0
+
2
);
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
Int32_3
,
Stream
ObjectWriter
.
EncodingKind
.
Int32_0
+
3
);
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
Int32_4
,
Stream
ObjectWriter
.
EncodingKind
.
Int32_0
+
4
);
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
Int32_5
,
Stream
ObjectWriter
.
EncodingKind
.
Int32_0
+
5
);
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
Int32_6
,
Stream
ObjectWriter
.
EncodingKind
.
Int32_0
+
6
);
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
Int32_7
,
Stream
ObjectWriter
.
EncodingKind
.
Int32_0
+
7
);
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
Int32_8
,
Stream
ObjectWriter
.
EncodingKind
.
Int32_0
+
8
);
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
Int32_9
,
Stream
ObjectWriter
.
EncodingKind
.
Int32_0
+
9
);
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
Int32_10
,
Stream
ObjectWriter
.
EncodingKind
.
Int32_0
+
10
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
Int32_1
,
ObjectWriter
.
EncodingKind
.
Int32_0
+
1
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
Int32_2
,
ObjectWriter
.
EncodingKind
.
Int32_0
+
2
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
Int32_3
,
ObjectWriter
.
EncodingKind
.
Int32_0
+
3
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
Int32_4
,
ObjectWriter
.
EncodingKind
.
Int32_0
+
4
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
Int32_5
,
ObjectWriter
.
EncodingKind
.
Int32_0
+
5
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
Int32_6
,
ObjectWriter
.
EncodingKind
.
Int32_0
+
6
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
Int32_7
,
ObjectWriter
.
EncodingKind
.
Int32_0
+
7
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
Int32_8
,
ObjectWriter
.
EncodingKind
.
Int32_0
+
8
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
Int32_9
,
ObjectWriter
.
EncodingKind
.
Int32_0
+
9
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
Int32_10
,
ObjectWriter
.
EncodingKind
.
Int32_0
+
10
);
}
[
Fact
]
public
void
TestUInt32EncodingKinds
()
{
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
UInt32_1
,
Stream
ObjectWriter
.
EncodingKind
.
UInt32_0
+
1
);
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
UInt32_2
,
Stream
ObjectWriter
.
EncodingKind
.
UInt32_0
+
2
);
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
UInt32_3
,
Stream
ObjectWriter
.
EncodingKind
.
UInt32_0
+
3
);
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
UInt32_4
,
Stream
ObjectWriter
.
EncodingKind
.
UInt32_0
+
4
);
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
UInt32_5
,
Stream
ObjectWriter
.
EncodingKind
.
UInt32_0
+
5
);
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
UInt32_6
,
Stream
ObjectWriter
.
EncodingKind
.
UInt32_0
+
6
);
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
UInt32_7
,
Stream
ObjectWriter
.
EncodingKind
.
UInt32_0
+
7
);
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
UInt32_8
,
Stream
ObjectWriter
.
EncodingKind
.
UInt32_0
+
8
);
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
UInt32_9
,
Stream
ObjectWriter
.
EncodingKind
.
UInt32_0
+
9
);
Assert
.
Equal
(
StreamObjectWriter
.
EncodingKind
.
UInt32_10
,
Stream
ObjectWriter
.
EncodingKind
.
UInt32_0
+
10
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
UInt32_1
,
ObjectWriter
.
EncodingKind
.
UInt32_0
+
1
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
UInt32_2
,
ObjectWriter
.
EncodingKind
.
UInt32_0
+
2
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
UInt32_3
,
ObjectWriter
.
EncodingKind
.
UInt32_0
+
3
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
UInt32_4
,
ObjectWriter
.
EncodingKind
.
UInt32_0
+
4
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
UInt32_5
,
ObjectWriter
.
EncodingKind
.
UInt32_0
+
5
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
UInt32_6
,
ObjectWriter
.
EncodingKind
.
UInt32_0
+
6
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
UInt32_7
,
ObjectWriter
.
EncodingKind
.
UInt32_0
+
7
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
UInt32_8
,
ObjectWriter
.
EncodingKind
.
UInt32_0
+
8
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
UInt32_9
,
ObjectWriter
.
EncodingKind
.
UInt32_0
+
9
);
Assert
.
Equal
(
ObjectWriter
.
EncodingKind
.
UInt32_10
,
ObjectWriter
.
EncodingKind
.
UInt32_0
+
10
);
}
private
void
TestRoundTripCompressedUint
(
uint
value
)
{
TestRoundTrip
(
value
,
(
w
,
v
)
=>
((
StreamObjectWriter
)
w
).
WriteCompressedUInt
(
v
),
r
=>
((
Stream
ObjectReader
)
r
).
ReadCompressedUInt
());
TestRoundTrip
(
value
,
(
w
,
v
)
=>
((
ObjectWriter
)
w
).
WriteCompressedUInt
(
v
),
r
=>
((
ObjectReader
)
r
).
ReadCompressedUInt
());
}
[
Fact
]
...
...
@@ -1063,7 +1063,7 @@ public void TestObjectMapLimits()
}
var
binder
=
new
ObjectBinder
();
var
writer
=
new
Stream
ObjectWriter
(
stream
,
binder
:
binder
);
var
writer
=
new
ObjectWriter
(
stream
,
binder
:
binder
);
// Write each instance twice. The second time around, they'll become ObjectRefs
for
(
int
pass
=
0
;
pass
<
2
;
pass
++)
{
...
...
@@ -1076,7 +1076,7 @@ public void TestObjectMapLimits()
writer
.
Dispose
();
stream
.
Position
=
0
;
using
(
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
stream
,
binder
:
binder
))
using
(
var
reader
=
ObjectReader
.
TryGetReader
(
stream
,
binder
:
binder
))
{
for
(
int
pass
=
0
;
pass
<
2
;
pass
++)
{
...
...
@@ -1113,7 +1113,7 @@ public void TestDeepObjectGraph_RecursiveFails()
{
int
id
=
0
;
var
graph
=
ConstructGraph
(
ref
id
,
1
,
1000
);
Assert
.
Throws
<
Stream
ObjectWriter
.
RecursionDepthExceeded
>(()
=>
TestRoundTripValue
(
graph
));
Assert
.
Throws
<
ObjectWriter
.
RecursionDepthExceeded
>(()
=>
TestRoundTripValue
(
graph
));
}
[
Fact
]
...
...
src/Compilers/Core/Portable/Serialization/ObjectData.cs
浏览文件 @
aec6b9d8
...
...
@@ -10,7 +10,7 @@ namespace Roslyn.Utilities
/// </summary>
/// <remarks>
/// This class is just a sneaky way to get a reference to an ImmutableArray,
/// due to <see cref="
Stream
ObjectWriter"/> needing to be able to use it as a key for a ConditionalWeakTable.
/// due to <see cref="ObjectWriter"/> needing to be able to use it as a key for a ConditionalWeakTable.
/// </remarks>
internal
class
ObjectData
{
...
...
src/Compilers/Core/Portable/Serialization/ObjectReader.cs
浏览文件 @
aec6b9d8
...
...
@@ -2,6 +2,7 @@
namespace
Roslyn.Utilities
{
#if false
/// <summary>
/// An abstract of a stream of values that can be read from.
/// </summary>
...
...
@@ -23,4 +24,5 @@ internal abstract class ObjectReader
public
abstract
string
ReadString
();
public
abstract
object
ReadValue
();
}
#endif
}
src/Compilers/Core/Portable/Serialization/ObjectWriter.cs
浏览文件 @
aec6b9d8
...
...
@@ -2,6 +2,7 @@
namespace
Roslyn.Utilities
{
#if false
/// <summary>
/// An abstraction of a stream of values that can be written to.
/// </summary>
...
...
@@ -23,4 +24,5 @@ internal abstract class ObjectWriter
public
abstract
void
WriteString
(
string
value
);
public
abstract
void
WriteValue
(
object
value
);
}
#endif
}
src/Compilers/Core/Portable/Serialization/StreamObjectReader.cs
浏览文件 @
aec6b9d8
...
...
@@ -2,6 +2,7 @@
using
System
;
using
System.Collections.Generic
;
using
System.Collections.Immutable
;
using
System.Diagnostics
;
using
System.IO
;
using
System.Runtime.CompilerServices
;
...
...
@@ -17,15 +18,15 @@ namespace Roslyn.Utilities
using
Resources
=
WorkspacesResources
;
#endif
using
SOW
=
Stream
ObjectWriter
;
using
EncodingKind
=
Stream
ObjectWriter
.
EncodingKind
;
using
Variant
=
Stream
ObjectWriter
.
Variant
;
using
VariantKind
=
Stream
ObjectWriter
.
VariantKind
;
using
SOW
=
ObjectWriter
;
using
EncodingKind
=
ObjectWriter
.
EncodingKind
;
using
Variant
=
ObjectWriter
.
Variant
;
using
VariantKind
=
ObjectWriter
.
VariantKind
;
/// <summary>
/// An <see cref="ObjectReader"/> that deserializes objects from a byte stream.
/// </summary>
internal
sealed
partial
class
StreamObjectReader
:
ObjectReader
,
IDisposable
internal
sealed
partial
class
ObjectReader
:
IDisposable
{
/// <summary>
/// We start the version at something reasonably random. That way an older file, with
...
...
@@ -59,24 +60,20 @@ internal sealed partial class StreamObjectReader : ObjectReader, IDisposable
/// <summary>
/// List of member values that object deserializers read from.
/// </summary>
private
readonly
List
<
Variant
>
_memberList
;
/// <summary>
/// Used to provide member values when reading and constructing objects.
/// </summary>
private
readonly
VariantListReader
_memberReader
;
private
readonly
ImmutableArray
<
Variant
>.
Builder
_memberList
;
private
int
_indexInMemberList
;
private
static
readonly
ObjectPool
<
Stack
<
Construction
>>
s_constructionStackPool
=
new
ObjectPool
<
Stack
<
Construction
>>(()
=>
new
Stack
<
Construction
>(
20
));
/// <summary>
/// Creates a new instance of a <see cref="
Stream
ObjectReader"/>.
/// Creates a new instance of a <see cref="ObjectReader"/>.
/// </summary>
/// <param name="stream">The stream to read objects from.</param>
/// <param name="knownObjects">An optional list of objects assumed known by the corresponding <see cref="
Stream
ObjectWriter"/>.</param>
/// <param name="knownObjects">An optional list of objects assumed known by the corresponding <see cref="ObjectWriter"/>.</param>
/// <param name="binder">A binder that provides object and type decoding.</param>
/// <param name="cancellationToken"></param>
private
Stream
ObjectReader
(
private
ObjectReader
(
Stream
stream
,
ObjectData
knownObjects
,
ObjectBinder
binder
,
...
...
@@ -99,16 +96,15 @@ internal sealed partial class StreamObjectReader : ObjectReader, IDisposable
_valueStack
=
SOW
.
s_variantStackPool
.
Allocate
();
_constructionStack
=
s_constructionStackPool
.
Allocate
();
_memberList
=
SOW
.
s_variantListPool
.
Allocate
();
_memberReader
=
new
VariantListReader
(
_memberList
);
}
}
/// <summary>
/// Attempts to create a <see cref="
Stream
ObjectReader"/> from the provided <paramref name="stream"/>.
/// Attempts to create a <see cref="ObjectReader"/> from the provided <paramref name="stream"/>.
/// If the <paramref name="stream"/> does not start with a valid header, then <code>null</code> will
/// be returned.
/// </summary>
public
static
Stream
ObjectReader
TryGetReader
(
public
static
ObjectReader
TryGetReader
(
Stream
stream
,
ObjectData
knownObjects
=
null
,
ObjectBinder
binder
=
null
,
...
...
@@ -125,7 +121,7 @@ internal sealed partial class StreamObjectReader : ObjectReader, IDisposable
return
null
;
}
return
new
Stream
ObjectReader
(
stream
,
knownObjects
,
binder
,
cancellationToken
);
return
new
ObjectReader
(
stream
,
knownObjects
,
binder
,
cancellationToken
);
}
internal
static
bool
IsRecursive
(
Stream
stream
)
...
...
@@ -160,79 +156,95 @@ public void Dispose()
}
}
public
override
bool
ReadBoolean
()
{
return
_reader
.
ReadBoolean
();
}
public
override
byte
ReadByte
()
{
return
_reader
.
ReadByte
();
}
public
override
char
ReadChar
()
{
// read as ushort because BinaryWriter fails on chars that are unicode surrogates
return
(
char
)
_reader
.
ReadUInt16
();
}
public
override
decimal
ReadDecimal
()
{
return
_reader
.
ReadDecimal
();
}
public
override
double
ReadDouble
()
{
return
_reader
.
ReadDouble
();
}
public
override
float
ReadSingle
()
{
return
_reader
.
ReadSingle
();
}
public
override
int
ReadInt32
()
{
return
_reader
.
ReadInt32
();
}
public
override
long
ReadInt64
()
{
return
_reader
.
ReadInt64
();
}
public
override
sbyte
ReadSByte
()
{
return
_reader
.
ReadSByte
();
}
public
override
short
ReadInt16
()
{
return
_reader
.
ReadInt16
();
}
public
override
uint
ReadUInt32
()
{
return
_reader
.
ReadUInt32
();
}
public
override
ulong
ReadUInt64
()
{
return
_reader
.
ReadUInt64
();
}
public
override
ushort
ReadUInt16
()
private
void
ResetMemberList
()
{
return
_reader
.
ReadUInt16
();
_memberList
.
Clear
();
_indexInMemberList
=
0
;
}
public
override
string
ReadString
()
private
Variant
NextFromMemberList
()
=>
_memberList
[
_indexInMemberList
++];
private
bool
ShouldReadFromMemberList
=>
_memberList
.
Count
>
0
;
public
bool
ReadBoolean
()
=>
ShouldReadFromMemberList
?
NextFromMemberList
().
AsBoolean
()
:
_reader
.
ReadBoolean
();
public
byte
ReadByte
()
=>
ShouldReadFromMemberList
?
NextFromMemberList
().
AsByte
()
:
_reader
.
ReadByte
();
// read as ushort because BinaryWriter fails on chars that are unicode surrogates
public
char
ReadChar
()
=>
ShouldReadFromMemberList
?
NextFromMemberList
().
AsChar
()
:
(
char
)
_reader
.
ReadUInt16
();
public
decimal
ReadDecimal
()
=>
ShouldReadFromMemberList
?
NextFromMemberList
().
AsDecimal
()
:
_reader
.
ReadDecimal
();
public
double
ReadDouble
()
=>
ShouldReadFromMemberList
?
NextFromMemberList
().
AsDouble
()
:
_reader
.
ReadDouble
();
public
float
ReadSingle
()
=>
ShouldReadFromMemberList
?
NextFromMemberList
().
AsSingle
()
:
_reader
.
ReadSingle
();
public
int
ReadInt32
()
=>
ShouldReadFromMemberList
?
NextFromMemberList
().
AsInt32
()
:
_reader
.
ReadInt32
();
public
long
ReadInt64
()
=>
ShouldReadFromMemberList
?
NextFromMemberList
().
AsInt64
()
:
_reader
.
ReadInt64
();
public
sbyte
ReadSByte
()
=>
ShouldReadFromMemberList
?
NextFromMemberList
().
AsSByte
()
:
_reader
.
ReadSByte
();
public
short
ReadInt16
()
=>
ShouldReadFromMemberList
?
NextFromMemberList
().
AsInt16
()
:
_reader
.
ReadInt16
();
public
uint
ReadUInt32
()
=>
ShouldReadFromMemberList
?
NextFromMemberList
().
AsUInt32
()
:
_reader
.
ReadUInt32
();
public
ulong
ReadUInt64
()
=>
ShouldReadFromMemberList
?
NextFromMemberList
().
AsUInt64
()
:
_reader
.
ReadUInt64
();
public
ushort
ReadUInt16
()
=>
ShouldReadFromMemberList
?
NextFromMemberList
().
AsUInt16
()
:
_reader
.
ReadUInt16
();
public
string
ReadString
()
=>
ShouldReadFromMemberList
?
ReadStringFromMemberList
()
:
ReadStringValue
();
public
object
ReadValue
()
{
return
ReadStringValue
();
}
if
(
ShouldReadFromMemberList
)
{
return
ReadValueFromMemberList
();
}
public
override
object
ReadValue
()
{
var
v
=
ReadVariant
();
// if we didn't get anything, it must have been an object or array header
...
...
@@ -244,6 +256,17 @@ public override object ReadValue()
return
v
.
ToBoxedObject
();
}
private
string
ReadStringFromMemberList
()
{
var
next
=
NextFromMemberList
();
return
next
.
Kind
==
VariantKind
.
Null
?
null
:
next
.
AsString
();
}
private
object
ReadValueFromMemberList
()
=>
NextFromMemberList
().
ToBoxedObject
();
private
Variant
ConstructFromValues
()
{
Debug
.
Assert
(
_constructionStack
.
Count
>
0
);
...
...
@@ -333,7 +356,7 @@ public static Construction CreateArrayConstruction(Type elementType, int element
return
new
Construction
(
elementType
,
elementCount
,
stackStart
,
reader
:
null
,
id
:
0
);
}
public
Variant
Construct
(
Stream
ObjectReader
reader
)
public
Variant
Construct
(
ObjectReader
reader
)
{
if
(
_reader
!=
null
)
{
...
...
@@ -448,113 +471,6 @@ private Variant ReadVariant()
}
}
private
class
VariantListReader
:
ObjectReader
{
private
readonly
List
<
Variant
>
_list
;
private
int
_index
;
public
VariantListReader
(
List
<
Variant
>
list
)
{
_list
=
list
;
}
public
void
Reset
()
{
_list
.
Clear
();
_index
=
0
;
}
public
int
Position
=>
_index
;
private
Variant
Next
()
{
return
_list
[
_index
++];
}
public
override
bool
ReadBoolean
()
{
return
Next
().
AsBoolean
();
}
public
override
byte
ReadByte
()
{
return
Next
().
AsByte
();
}
public
override
char
ReadChar
()
{
return
Next
().
AsChar
();
}
public
override
decimal
ReadDecimal
()
{
return
Next
().
AsDecimal
();
}
public
override
double
ReadDouble
()
{
return
Next
().
AsDouble
();
}
public
override
float
ReadSingle
()
{
return
Next
().
AsSingle
();
}
public
override
int
ReadInt32
()
{
return
Next
().
AsInt32
();
}
public
override
long
ReadInt64
()
{
return
Next
().
AsInt64
();
}
public
override
sbyte
ReadSByte
()
{
return
Next
().
AsSByte
();
}
public
override
short
ReadInt16
()
{
return
Next
().
AsInt16
();
}
public
override
uint
ReadUInt32
()
{
return
Next
().
AsUInt32
();
}
public
override
ulong
ReadUInt64
()
{
return
Next
().
AsUInt64
();
}
public
override
ushort
ReadUInt16
()
{
return
Next
().
AsUInt16
();
}
public
override
String
ReadString
()
{
var
next
=
Next
();
if
(
next
.
Kind
==
VariantKind
.
Null
)
{
return
null
;
}
else
{
return
next
.
AsString
();
}
}
public
override
Object
ReadValue
()
{
return
Next
().
ToBoxedObject
();
}
}
/// <summary>
/// An reference-id to object map, that can share base data efficiently.
/// </summary>
...
...
@@ -614,21 +530,21 @@ public T GetValue(int referenceId)
internal
uint
ReadCompressedUInt
()
{
var
info
=
_reader
.
ReadByte
();
byte
marker
=
(
byte
)(
info
&
Stream
ObjectWriter
.
ByteMarkerMask
);
byte
byte0
=
(
byte
)(
info
&
~
Stream
ObjectWriter
.
ByteMarkerMask
);
byte
marker
=
(
byte
)(
info
&
ObjectWriter
.
ByteMarkerMask
);
byte
byte0
=
(
byte
)(
info
&
~
ObjectWriter
.
ByteMarkerMask
);
if
(
marker
==
Stream
ObjectWriter
.
Byte1Marker
)
if
(
marker
==
ObjectWriter
.
Byte1Marker
)
{
return
byte0
;
}
if
(
marker
==
Stream
ObjectWriter
.
Byte2Marker
)
if
(
marker
==
ObjectWriter
.
Byte2Marker
)
{
var
byte1
=
_reader
.
ReadByte
();
return
(((
uint
)
byte0
)
<<
8
)
|
byte1
;
}
if
(
marker
==
Stream
ObjectWriter
.
Byte4Marker
)
if
(
marker
==
ObjectWriter
.
Byte4Marker
)
{
var
byte1
=
_reader
.
ReadByte
();
var
byte2
=
_reader
.
ReadByte
();
...
...
@@ -716,7 +632,7 @@ private Variant ReadArray(EncodingKind kind)
// SUBTLE: If it was a primitive array, only the EncodingKind byte of the element type was written, instead of encoding as a type.
var
elementKind
=
(
EncodingKind
)
_reader
.
ReadByte
();
var
elementType
=
Stream
ObjectWriter
.
s_reverseTypeMap
[(
int
)
elementKind
];
var
elementType
=
ObjectWriter
.
s_reverseTypeMap
[(
int
)
elementKind
];
if
(
elementType
!=
null
)
{
return
Variant
.
FromArray
(
this
.
ReadPrimitiveTypeArrayElements
(
elementType
,
elementKind
,
length
));
...
...
@@ -764,7 +680,7 @@ private Variant ConstructArray(Type elementType, int length)
private
Array
ReadPrimitiveTypeArrayElements
(
Type
type
,
EncodingKind
kind
,
int
length
)
{
Debug
.
Assert
(
Stream
ObjectWriter
.
s_reverseTypeMap
[(
int
)
kind
]
==
type
);
Debug
.
Assert
(
ObjectWriter
.
s_reverseTypeMap
[(
int
)
kind
]
==
type
);
// optimizations for supported array type by binary reader
if
(
type
==
typeof
(
byte
))
...
...
@@ -1087,25 +1003,31 @@ private Variant ReadObject()
private
Variant
ConstructObject
(
Type
type
,
int
memberCount
,
Func
<
ObjectReader
,
object
>
reader
,
int
id
)
{
_memberReader
.
Reset
();
Debug
.
Assert
(
_memberList
.
Count
==
0
);
Debug
.
Assert
(
_indexInMemberList
==
0
);
_memberList
.
Count
=
memberCount
;
// take members from the stack
for
(
int
i
=
0
;
i
<
memberCount
;
i
++)
{
_memberList
.
Add
(
_valueStack
.
Pop
());
_memberList
[
memberCount
-
i
-
1
]
=
_valueStack
.
Pop
();
// _memberList.Add(_valueStack.Pop());
}
// reverse list so that first member to be read is first
Reverse
(
_memberList
);
//
Reverse(_memberList);
// invoke the deserialization constructor to create instance and read & assign members
var
instance
=
reader
(
_memberReader
);
var
instance
=
reader
(
this
);
if
(
_
memberReader
.
Position
!=
memberCount
)
if
(
_
indexInMemberList
!=
memberCount
)
{
throw
DeserializationReadIncorrectNumberOfValuesException
(
type
.
Name
);
}
ResetMemberList
();
_objectReferenceMap
.
SetValue
(
id
,
instance
);
return
Variant
.
FromObject
(
instance
);
...
...
src/Compilers/Core/Portable/Serialization/StreamObjectWriter.cs
浏览文件 @
aec6b9d8
...
...
@@ -23,7 +23,7 @@ namespace Roslyn.Utilities
/// <summary>
/// An <see cref="ObjectWriter"/> that serializes objects to a byte stream.
/// </summary>
internal
sealed
partial
class
StreamObjectWriter
:
ObjectWriter
,
IDisposable
internal
sealed
partial
class
ObjectWriter
:
IDisposable
{
private
readonly
BinaryWriter
_writer
;
private
readonly
ObjectBinder
_binderOpt
;
...
...
@@ -46,29 +46,25 @@ internal sealed partial class StreamObjectWriter : ObjectWriter, IDisposable
/// <summary>
/// The list of member values written by the member writer
/// </summary>
private
readonly
List
<
Variant
>
_memberList
;
/// <summary>
/// An <see cref="ObjectWriter"/> that is used to write object members into a list of variants.
/// </summary>
private
readonly
VariantListWriter
_memberWriter
;
private
readonly
ImmutableArray
<
Variant
>.
Builder
_memberList
;
private
bool
_writingMembers
=
false
;
// collection pools to reduce GC overhead
internal
static
readonly
ObjectPool
<
List
<
Variant
>
>
s_variantListPool
=
new
ObjectPool
<
List
<
Variant
>>(()
=>
new
List
<
Variant
>(
20
));
internal
static
readonly
ObjectPool
<
ImmutableArray
<
Variant
>.
Builder
>
s_variantListPool
=
new
ObjectPool
<
ImmutableArray
<
Variant
>.
Builder
>(()
=>
ImmutableArray
.
CreateBuilder
<
Variant
>(
20
));
internal
static
readonly
ObjectPool
<
Stack
<
Variant
>>
s_variantStackPool
=
new
ObjectPool
<
Stack
<
Variant
>>(()
=>
new
Stack
<
Variant
>(
20
));
/// <summary>
/// Creates a new instance of a <see cref="
Stream
ObjectWriter"/>.
/// Creates a new instance of a <see cref="ObjectWriter"/>.
/// </summary>
/// <param name="stream">The stream to write to.</param>
/// <param name="knownObjects">An optional list of objects assumed known by the corresponding <see cref="
Stream
ObjectReader"/>.</param>
/// <param name="knownObjects">An optional list of objects assumed known by the corresponding <see cref="ObjectReader"/>.</param>
/// <param name="binder">A binder that provides object and type encoding.</param>
/// <param name="recursive">True if the writer encodes objects recursively.</param>
/// <param name="cancellationToken"></param>
public
Stream
ObjectWriter
(
public
ObjectWriter
(
Stream
stream
,
ObjectData
knownObjects
=
null
,
ObjectBinder
binder
=
null
,
...
...
@@ -97,14 +93,13 @@ internal sealed partial class StreamObjectWriter : ObjectWriter, IDisposable
_writer
.
Write
((
byte
)
EncodingKind
.
NonRecursive
);
_valueStack
=
s_variantStackPool
.
Allocate
();
_memberList
=
s_variantListPool
.
Allocate
();
_memberWriter
=
new
VariantListWriter
(
_memberList
);
}
}
private
void
WriteVersion
()
{
_writer
.
Write
(
Stream
ObjectReader
.
VersionByte1
);
_writer
.
Write
(
Stream
ObjectReader
.
VersionByte2
);
_writer
.
Write
(
ObjectReader
.
VersionByte1
);
_writer
.
Write
(
ObjectReader
.
VersionByte2
);
}
public
void
Dispose
()
...
...
@@ -122,88 +117,200 @@ public void Dispose()
}
}
public
override
void
WriteBoolean
(
bool
value
)
public
void
WriteBoolean
(
bool
value
)
{
_writer
.
Write
(
value
);
if
(
_writingMembers
)
{
_memberList
.
Add
(
Variant
.
FromBoolean
(
value
));
}
else
{
_writer
.
Write
(
value
);
}
}
public
override
void
WriteByte
(
byte
value
)
public
void
WriteByte
(
byte
value
)
{
_writer
.
Write
(
value
);
if
(
_writingMembers
)
{
_memberList
.
Add
(
Variant
.
FromByte
(
value
));
}
else
{
_writer
.
Write
(
value
);
}
}
public
override
void
WriteChar
(
char
ch
)
public
void
WriteChar
(
char
ch
)
{
// written as ushort because BinaryWriter fails on chars that are unicode surrogates
_writer
.
Write
((
ushort
)
ch
);
if
(
_writingMembers
)
{
_memberList
.
Add
(
Variant
.
FromChar
(
ch
));
}
else
{
// written as ushort because BinaryWriter fails on chars that are unicode surrogates
_writer
.
Write
((
ushort
)
ch
);
}
}
public
override
void
WriteDecimal
(
decimal
value
)
public
void
WriteDecimal
(
decimal
value
)
{
_writer
.
Write
(
value
);
if
(
_writingMembers
)
{
_memberList
.
Add
(
Variant
.
FromDecimal
(
value
));
}
else
{
_writer
.
Write
(
value
);
}
}
public
override
void
WriteDouble
(
double
value
)
public
void
WriteDouble
(
double
value
)
{
_writer
.
Write
(
value
);
if
(
_writingMembers
)
{
_memberList
.
Add
(
Variant
.
FromDouble
(
value
));
}
else
{
_writer
.
Write
(
value
);
}
}
public
override
void
WriteSingle
(
float
value
)
public
void
WriteSingle
(
float
value
)
{
_writer
.
Write
(
value
);
if
(
_writingMembers
)
{
_memberList
.
Add
(
Variant
.
FromSingle
(
value
));
}
else
{
_writer
.
Write
(
value
);
}
}
public
override
void
WriteInt32
(
int
value
)
public
void
WriteInt32
(
int
value
)
{
_writer
.
Write
(
value
);
if
(
_writingMembers
)
{
_memberList
.
Add
(
Variant
.
FromInt32
(
value
));
}
else
{
_writer
.
Write
(
value
);
}
}
public
override
void
WriteInt64
(
long
value
)
public
void
WriteInt64
(
long
value
)
{
_writer
.
Write
(
value
);
if
(
_writingMembers
)
{
_memberList
.
Add
(
Variant
.
FromInt64
(
value
));
}
else
{
_writer
.
Write
(
value
);
}
}
public
override
void
WriteSByte
(
sbyte
value
)
public
void
WriteSByte
(
sbyte
value
)
{
_writer
.
Write
(
value
);
if
(
_writingMembers
)
{
_memberList
.
Add
(
Variant
.
FromSByte
(
value
));
}
else
{
_writer
.
Write
(
value
);
}
}
public
override
void
WriteInt16
(
short
value
)
public
void
WriteInt16
(
short
value
)
{
_writer
.
Write
(
value
);
if
(
_writingMembers
)
{
_memberList
.
Add
(
Variant
.
FromInt16
(
value
));
}
else
{
_writer
.
Write
(
value
);
}
}
public
override
void
WriteUInt32
(
uint
value
)
public
void
WriteUInt32
(
uint
value
)
{
_writer
.
Write
(
value
);
if
(
_writingMembers
)
{
_memberList
.
Add
(
Variant
.
FromUInt32
(
value
));
}
else
{
_writer
.
Write
(
value
);
}
}
public
override
void
WriteUInt64
(
ulong
value
)
public
void
WriteUInt64
(
ulong
value
)
{
_writer
.
Write
(
value
);
if
(
_writingMembers
)
{
_memberList
.
Add
(
Variant
.
FromUInt64
(
value
));
}
else
{
_writer
.
Write
(
value
);
}
}
public
override
void
WriteUInt16
(
ushort
value
)
public
void
WriteUInt16
(
ushort
value
)
{
_writer
.
Write
(
value
);
if
(
_writingMembers
)
{
_memberList
.
Add
(
Variant
.
FromUInt16
(
value
));
}
else
{
_writer
.
Write
(
value
);
}
}
public
override
void
WriteString
(
string
value
)
public
void
WriteString
(
string
value
)
{
WriteStringValue
(
value
);
if
(
_writingMembers
)
{
if
(
value
==
null
)
{
_memberList
.
Add
(
Variant
.
Null
);
}
else
{
_memberList
.
Add
(
Variant
.
FromString
(
value
));
}
}
else
{
WriteStringValue
(
value
);
}
}
public
override
void
WriteValue
(
object
value
)
public
void
WriteValue
(
object
value
)
{
Debug
.
Assert
(
value
==
null
||
!
value
.
GetType
().
GetTypeInfo
().
IsEnum
,
"Enum should not be written with WriteValue. Write them as ints instead."
);
if
(
_recursive
)
if
(
_writingMembers
)
{
WriteVariant
(
Variant
.
FromBoxedObject
(
value
));
_memberList
.
Add
(
Variant
.
FromBoxedObject
(
value
));
}
else
{
_valueStack
.
Push
(
Variant
.
FromBoxedObject
(
value
));
Emit
();
Debug
.
Assert
(
value
==
null
||
!
value
.
GetType
().
GetTypeInfo
().
IsEnum
,
"Enum should not be written with WriteValue. Write them as ints instead."
);
if
(
_recursive
)
{
WriteVariant
(
Variant
.
FromBoxedObject
(
value
));
}
else
{
_valueStack
.
Push
(
Variant
.
FromBoxedObject
(
value
));
Emit
();
}
}
}
...
...
@@ -358,101 +465,6 @@ private void WriteVariant(Variant value)
}
}
/// <summary>
/// An <see cref="ObjectWriter"/> that writes into a list of <see cref="Variant"/>.
/// </summary>
private
class
VariantListWriter
:
ObjectWriter
{
private
readonly
List
<
Variant
>
_list
;
public
VariantListWriter
(
List
<
Variant
>
list
)
{
_list
=
list
;
}
public
override
void
WriteBoolean
(
bool
value
)
{
_list
.
Add
(
Variant
.
FromBoolean
(
value
));
}
public
override
void
WriteByte
(
byte
value
)
{
_list
.
Add
(
Variant
.
FromByte
(
value
));
}
public
override
void
WriteChar
(
char
ch
)
{
_list
.
Add
(
Variant
.
FromChar
(
ch
));
}
public
override
void
WriteDecimal
(
decimal
value
)
{
_list
.
Add
(
Variant
.
FromDecimal
(
value
));
}
public
override
void
WriteDouble
(
double
value
)
{
_list
.
Add
(
Variant
.
FromDouble
(
value
));
}
public
override
void
WriteSingle
(
float
value
)
{
_list
.
Add
(
Variant
.
FromSingle
(
value
));
}
public
override
void
WriteInt32
(
int
value
)
{
_list
.
Add
(
Variant
.
FromInt32
(
value
));
}
public
override
void
WriteInt64
(
long
value
)
{
_list
.
Add
(
Variant
.
FromInt64
(
value
));
}
public
override
void
WriteSByte
(
sbyte
value
)
{
_list
.
Add
(
Variant
.
FromSByte
(
value
));
}
public
override
void
WriteInt16
(
short
value
)
{
_list
.
Add
(
Variant
.
FromInt16
(
value
));
}
public
override
void
WriteUInt32
(
uint
value
)
{
_list
.
Add
(
Variant
.
FromUInt32
(
value
));
}
public
override
void
WriteUInt64
(
ulong
value
)
{
_list
.
Add
(
Variant
.
FromUInt64
(
value
));
}
public
override
void
WriteUInt16
(
ushort
value
)
{
_list
.
Add
(
Variant
.
FromUInt16
(
value
));
}
public
override
void
WriteString
(
string
value
)
{
if
(
value
==
null
)
{
_list
.
Add
(
Variant
.
Null
);
}
else
{
_list
.
Add
(
Variant
.
FromString
(
value
));
}
}
public
override
void
WriteValue
(
object
value
)
{
_list
.
Add
(
Variant
.
FromBoxedObject
(
value
));
}
}
/// <summary>
/// An object reference to reference-id map, that can share base data efficiently.
/// </summary>
...
...
@@ -1029,8 +1041,14 @@ private void WriteObject(object instance)
else
{
// gather instance members by writing them into a list of variants
_memberList
.
Clear
();
typeWriter
(
_memberWriter
,
instance
);
Debug
.
Assert
(
_memberList
.
Count
==
0
);
Debug
.
Assert
(!
_writingMembers
);
_writingMembers
=
true
;
typeWriter
(
this
,
instance
);
Debug
.
Assert
(
_writingMembers
);
_writingMembers
=
false
;
// emit object header up front
this
.
WriteObjectHeader
(
instance
,
(
uint
)
_memberList
.
Count
);
...
...
@@ -1041,6 +1059,8 @@ private void WriteObject(object instance)
{
_valueStack
.
Push
(
_memberList
[
i
]);
}
_memberList
.
Clear
();
}
}
}
...
...
@@ -1080,7 +1100,7 @@ private static Exception NoSerializationWriterException(string typeName)
/// </summary>
internal
static
readonly
ImmutableArray
<
Type
>
s_reverseTypeMap
;
static
Stream
ObjectWriter
()
static
ObjectWriter
()
{
s_typeMap
=
new
Dictionary
<
Type
,
EncodingKind
>
{
...
...
src/Compilers/Core/Portable/Syntax/SyntaxNode.cs
浏览文件 @
aec6b9d8
...
...
@@ -1252,16 +1252,16 @@ public virtual void SerializeTo(Stream stream, CancellationToken cancellationTok
try
{
using
(
var
writer
=
new
Stream
ObjectWriter
(
stream
,
GetSerializationObjectData
(),
binder
:
s_defaultBinder
,
cancellationToken
:
cancellationToken
))
using
(
var
writer
=
new
ObjectWriter
(
stream
,
GetSerializationObjectData
(),
binder
:
s_defaultBinder
,
cancellationToken
:
cancellationToken
))
{
writer
.
WriteValue
(
this
.
Green
);
}
}
catch
(
Exception
e
)
when
(
e
is
Stream
ObjectWriter
.
RecursionDepthExceeded
||
StackGuard
.
IsInsufficientExecutionStackException
(
e
))
catch
(
Exception
e
)
when
(
e
is
ObjectWriter
.
RecursionDepthExceeded
||
StackGuard
.
IsInsufficientExecutionStackException
(
e
))
{
stream
.
Position
=
start
;
using
(
var
writer
=
new
Stream
ObjectWriter
(
stream
,
GetSerializationObjectData
(),
binder
:
s_defaultBinder
,
recursive
:
false
,
cancellationToken
:
cancellationToken
))
using
(
var
writer
=
new
ObjectWriter
(
stream
,
GetSerializationObjectData
(),
binder
:
s_defaultBinder
,
recursive
:
false
,
cancellationToken
:
cancellationToken
))
{
writer
.
WriteValue
(
this
.
Green
);
}
...
...
src/Compilers/VisualBasic/Portable/Syntax/VisualBasicSyntaxNode.vb
浏览文件 @
aec6b9d8
...
...
@@ -140,7 +140,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Throw
New
InvalidOperationException
(
CodeAnalysisResources
.
TheStreamCannotBeReadFrom
)
End
If
Using
reader
=
Stream
ObjectReader
.
TryGetReader
(
stream
,
knownObjects
:
=
GetDeserializationObjectData
(),
binder
:
=
s_defaultBinder
,
cancellationToken
:
=
cancellationToken
)
Using
reader
=
ObjectReader
.
TryGetReader
(
stream
,
knownObjects
:
=
GetDeserializationObjectData
(),
binder
:
=
s_defaultBinder
,
cancellationToken
:
=
cancellationToken
)
If
reader
Is
Nothing
Then
Throw
New
ArgumentException
(
CodeAnalysisResources
.
Stream_contains_invalid_data
,
NameOf
(
stream
))
End
If
...
...
src/Compilers/VisualBasic/Test/Syntax/Syntax/SerializationTests.vb
浏览文件 @
aec6b9d8
...
...
@@ -21,7 +21,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests
root
.
SerializeTo
(
stream
)
stream
.
Position
=
2
Assert
.
Equal
(
expectRecursive
,
Roslyn
.
Utilities
.
Stream
ObjectReader
.
IsRecursive
(
stream
))
Assert
.
Equal
(
expectRecursive
,
Roslyn
.
Utilities
.
ObjectReader
.
IsRecursive
(
stream
))
stream
.
Position
=
0
Dim
droot
=
VisualBasicSyntaxNode
.
DeserializeFrom
(
stream
)
...
...
src/EditorFeatures/Core/Implementation/TodoComment/TodoCommentState.cs
浏览文件 @
aec6b9d8
...
...
@@ -30,7 +30,7 @@ protected override int GetCount(Data data)
protected
override
Data
TryGetExistingData
(
Stream
stream
,
Document
value
,
CancellationToken
cancellationToken
)
{
using
(
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
stream
))
using
(
var
reader
=
ObjectReader
.
TryGetReader
(
stream
))
{
if
(
reader
!=
null
)
{
...
...
@@ -53,7 +53,7 @@ protected override Data TryGetExistingData(Stream stream, Document value, Cancel
protected
override
void
WriteTo
(
Stream
stream
,
Data
data
,
CancellationToken
cancellationToken
)
{
using
(
var
writer
=
new
Stream
ObjectWriter
(
stream
,
cancellationToken
:
cancellationToken
))
using
(
var
writer
=
new
ObjectWriter
(
stream
,
cancellationToken
:
cancellationToken
))
{
writer
.
WriteString
(
FormatVersion
);
data
.
TextVersion
.
WriteTo
(
writer
);
...
...
src/EditorFeatures/Test/Utilities/BloomFilterTests.cs
浏览文件 @
aec6b9d8
...
...
@@ -115,14 +115,14 @@ public void TestSerialization()
var
stream
=
new
MemoryStream
();
var
bloomFilter
=
new
BloomFilter
(
0.001
,
false
,
new
[]
{
"Hello, World"
});
using
(
var
writer
=
new
Stream
ObjectWriter
(
stream
))
using
(
var
writer
=
new
ObjectWriter
(
stream
))
{
bloomFilter
.
WriteTo
(
writer
);
}
stream
.
Position
=
0
;
using
(
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
stream
))
using
(
var
reader
=
ObjectReader
.
TryGetReader
(
stream
))
{
var
rehydratedFilter
=
BloomFilter
.
ReadFrom
(
reader
);
Assert
.
True
(
bloomFilter
.
IsEquivalent
(
rehydratedFilter
));
...
...
src/VisualStudio/Core/Def/Implementation/DesignerAttribute/DesignerAttributeState.cs
浏览文件 @
aec6b9d8
...
...
@@ -31,7 +31,7 @@ protected override int GetCount(Data data)
protected
override
Data
TryGetExistingData
(
Stream
stream
,
Document
value
,
CancellationToken
cancellationToken
)
{
using
(
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
stream
))
using
(
var
reader
=
ObjectReader
.
TryGetReader
(
stream
))
{
if
(
reader
!=
null
)
{
...
...
@@ -52,7 +52,7 @@ protected override Data TryGetExistingData(Stream stream, Document value, Cancel
protected
override
void
WriteTo
(
Stream
stream
,
Data
data
,
CancellationToken
cancellationToken
)
{
using
(
var
writer
=
new
Stream
ObjectWriter
(
stream
,
cancellationToken
:
cancellationToken
))
using
(
var
writer
=
new
ObjectWriter
(
stream
,
cancellationToken
:
cancellationToken
))
{
writer
.
WriteString
(
FormatVersion
);
data
.
TextVersion
.
WriteTo
(
writer
);
...
...
src/VisualStudio/Core/Def/Implementation/Diagnostics/VisualStudioDiagnosticAnalyzerExecutor.cs
浏览文件 @
aec6b9d8
...
...
@@ -140,7 +140,7 @@ private CompilationWithAnalyzers CreateAnalyzerDriver(CompilationWithAnalyzers a
// handling of cancellation and exception
var
version
=
await
DiagnosticIncrementalAnalyzer
.
GetDiagnosticVersionAsync
(
project
,
cancellationToken
).
ConfigureAwait
(
false
);
using
(
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
stream
))
using
(
var
reader
=
ObjectReader
.
TryGetReader
(
stream
))
{
Debug
.
Assert
(
reader
!=
null
,
@"We only ge a reader for data transmitted between live processes.
...
...
src/VisualStudio/Core/Def/Implementation/Versions/SemanticVersionTrackingService.cs
浏览文件 @
aec6b9d8
...
...
@@ -127,7 +127,7 @@ private static bool TryReadFrom(Project project, string keyName, out Versions ve
{
using
(
var
storage
=
service
.
GetStorage
(
project
.
Solution
))
using
(
var
stream
=
storage
.
ReadStreamAsync
(
keyName
,
CancellationToken
.
None
).
WaitAndGetResult
(
CancellationToken
.
None
))
using
(
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
stream
))
using
(
var
reader
=
ObjectReader
.
TryGetReader
(
stream
))
{
if
(
reader
!=
null
)
{
...
...
@@ -201,7 +201,7 @@ private static async Task WriteToDependentSemanticVersionAsync(IPersistentStorag
IPersistentStorage
storage
,
string
keyName
,
VersionStamp
projectVersion
,
VersionStamp
semanticVersion
,
CancellationToken
cancellationToken
)
{
using
(
var
stream
=
SerializableBytes
.
CreateWritableStream
())
using
(
var
writer
=
new
Stream
ObjectWriter
(
stream
,
cancellationToken
:
cancellationToken
))
using
(
var
writer
=
new
ObjectWriter
(
stream
,
cancellationToken
:
cancellationToken
))
{
writer
.
WriteInt32
(
SerializationFormat
);
projectVersion
.
WriteTo
(
writer
);
...
...
src/VisualStudio/Core/Next/Remote/JsonRpcSession.cs
浏览文件 @
aec6b9d8
...
...
@@ -153,7 +153,7 @@ public async Task RequestAssetAsync(int sessionId, byte[][] checksums, string st
using
(
Logger
.
LogBlock
(
FunctionId
.
JsonRpcSession_RequestAssetAsync
,
streamName
,
_source
.
Token
))
using
(
var
stream
=
await
DirectStream
.
GetAsync
(
streamName
,
_source
.
Token
).
ConfigureAwait
(
false
))
{
using
(
var
writer
=
new
Stream
ObjectWriter
(
stream
))
using
(
var
writer
=
new
ObjectWriter
(
stream
))
{
writer
.
WriteInt32
(
sessionId
);
...
...
src/Workspaces/Core/Portable/Diagnostics/DiagnosticDataSerializer.cs
浏览文件 @
aec6b9d8
...
...
@@ -39,7 +39,7 @@ public DiagnosticDataSerializer(VersionStamp analyzerVersion, VersionStamp versi
public
async
Task
<
bool
>
SerializeAsync
(
object
documentOrProject
,
string
key
,
ImmutableArray
<
DiagnosticData
>
items
,
CancellationToken
cancellationToken
)
{
using
(
var
stream
=
SerializableBytes
.
CreateWritableStream
())
using
(
var
writer
=
new
Stream
ObjectWriter
(
stream
,
cancellationToken
:
cancellationToken
))
using
(
var
writer
=
new
ObjectWriter
(
stream
,
cancellationToken
:
cancellationToken
))
{
WriteTo
(
writer
,
items
,
cancellationToken
);
...
...
@@ -62,7 +62,7 @@ public async Task<StrongBox<ImmutableArray<DiagnosticData>>> DeserializeAsync(ob
using
(
var
storage
=
persistService
.
GetStorage
(
solution
))
using
(
var
stream
=
await
ReadStreamAsync
(
storage
,
key
,
documentOrProject
,
cancellationToken
).
ConfigureAwait
(
false
))
using
(
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
stream
))
using
(
var
reader
=
ObjectReader
.
TryGetReader
(
stream
))
{
if
(
reader
==
null
)
{
...
...
src/Workspaces/Core/Portable/Execution/AbstractReferenceSerializationService.cs
浏览文件 @
aec6b9d8
...
...
@@ -83,7 +83,7 @@ public Checksum CreateChecksum(MetadataReference reference, CancellationToken ca
public
Checksum
CreateChecksum
(
AnalyzerReference
reference
,
CancellationToken
cancellationToken
)
{
using
(
var
stream
=
SerializableBytes
.
CreateWritableStream
())
using
(
var
writer
=
new
Stream
ObjectWriter
(
stream
,
cancellationToken
:
cancellationToken
))
using
(
var
writer
=
new
ObjectWriter
(
stream
,
cancellationToken
:
cancellationToken
))
{
WriteTo
(
reference
,
writer
,
checksum
:
true
,
cancellationToken
:
cancellationToken
);
...
...
@@ -173,7 +173,7 @@ private void WritePortableExecutableReferencePropertiesTo(PortableExecutableRefe
private
Checksum
CreatePortableExecutableReferenceChecksum
(
PortableExecutableReference
reference
,
CancellationToken
cancellationToken
)
{
using
(
var
stream
=
SerializableBytes
.
CreateWritableStream
())
using
(
var
writer
=
new
Stream
ObjectWriter
(
stream
,
cancellationToken
:
cancellationToken
))
using
(
var
writer
=
new
ObjectWriter
(
stream
,
cancellationToken
:
cancellationToken
))
{
WritePortableExecutableReferencePropertiesTo
(
reference
,
writer
,
cancellationToken
);
WriteMvidsTo
(
TryGetMetadata
(
reference
),
writer
,
cancellationToken
);
...
...
src/Workspaces/Core/Portable/Execution/CustomAsset.cs
浏览文件 @
aec6b9d8
...
...
@@ -42,7 +42,7 @@ public override Task WriteObjectToAsync(ObjectWriter writer, CancellationToken c
private
static
Checksum
CreateChecksumFromStreamWriter
(
string
kind
,
Action
<
ObjectWriter
,
CancellationToken
>
writer
)
{
using
(
var
stream
=
SerializableBytes
.
CreateWritableStream
())
using
(
var
objectWriter
=
new
Stream
ObjectWriter
(
stream
))
using
(
var
objectWriter
=
new
ObjectWriter
(
stream
))
{
objectWriter
.
WriteString
(
kind
);
writer
(
objectWriter
,
CancellationToken
.
None
);
...
...
@@ -84,7 +84,7 @@ public override Task WriteObjectToAsync(ObjectWriter writer, CancellationToken c
private
static
Checksum
CreateChecksum
(
AnalyzerReference
reference
)
{
using
(
var
stream
=
SerializableBytes
.
CreateWritableStream
())
using
(
var
objectWriter
=
new
Stream
ObjectWriter
(
stream
))
using
(
var
objectWriter
=
new
ObjectWriter
(
stream
))
{
objectWriter
.
WriteString
(
WellKnownSynchronizationKinds
.
AnalyzerReference
);
objectWriter
.
WriteString
(
reference
.
FullPath
);
...
...
src/Workspaces/Core/Portable/FindSymbols/SymbolTree/SymbolTreeInfo_Serialization.cs
浏览文件 @
aec6b9d8
...
...
@@ -95,7 +95,7 @@ internal partial class SymbolTreeInfo
// Get the unique key to identify our data.
var
key
=
PrefixMetadataSymbolTreeInfo
+
prefix
+
keySuffix
;
using
(
var
stream
=
await
storage
.
ReadStreamAsync
(
key
,
cancellationToken
).
ConfigureAwait
(
false
))
using
(
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
stream
))
using
(
var
reader
=
ObjectReader
.
TryGetReader
(
stream
))
{
if
(
reader
!=
null
)
{
...
...
@@ -125,7 +125,7 @@ internal partial class SymbolTreeInfo
if
(
result
!=
null
)
{
using
(
var
stream
=
SerializableBytes
.
CreateWritableStream
())
using
(
var
writer
=
new
Stream
ObjectWriter
(
stream
,
cancellationToken
:
cancellationToken
))
using
(
var
writer
=
new
ObjectWriter
(
stream
,
cancellationToken
:
cancellationToken
))
{
writeObject
(
writer
,
result
);
stream
.
Position
=
0
;
...
...
src/Workspaces/Core/Portable/FindSymbols/SyntaxTree/SyntaxTreeIndex_Persistence.cs
浏览文件 @
aec6b9d8
...
...
@@ -57,7 +57,7 @@ private static bool TryReadVersion(ObjectReader reader, string formatVersion, ou
// attempt to load from persisted state
using
(
var
storage
=
persistentStorageService
.
GetStorage
(
document
.
Project
.
Solution
))
using
(
var
stream
=
await
storage
.
ReadStreamAsync
(
document
,
persistenceName
,
cancellationToken
).
ConfigureAwait
(
false
))
using
(
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
stream
))
using
(
var
reader
=
ObjectReader
.
TryGetReader
(
stream
))
{
if
(
reader
!=
null
)
{
...
...
@@ -88,7 +88,7 @@ private static bool TryReadVersion(ObjectReader reader, string formatVersion, ou
{
using
(
var
storage
=
persistentStorageService
.
GetStorage
(
document
.
Project
.
Solution
))
using
(
var
stream
=
SerializableBytes
.
CreateWritableStream
())
using
(
var
writer
=
new
Stream
ObjectWriter
(
stream
,
cancellationToken
:
cancellationToken
))
using
(
var
writer
=
new
ObjectWriter
(
stream
,
cancellationToken
:
cancellationToken
))
{
data
.
WriteVersion
(
writer
,
formatVersion
);
data
.
WriteTo
(
writer
);
...
...
@@ -117,7 +117,7 @@ private static async Task<bool> PrecalculatedAsync(Document document, string per
{
using
(
var
storage
=
persistentStorageService
.
GetStorage
(
document
.
Project
.
Solution
))
using
(
var
stream
=
await
storage
.
ReadStreamAsync
(
document
,
persistenceName
,
cancellationToken
).
ConfigureAwait
(
false
))
using
(
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
stream
))
using
(
var
reader
=
ObjectReader
.
TryGetReader
(
stream
))
{
if
(
reader
!=
null
)
{
...
...
src/Workspaces/Core/Portable/Workspace/Solution/Checksum_Factory.cs
浏览文件 @
aec6b9d8
...
...
@@ -27,7 +27,7 @@ public static Checksum Create(Stream stream)
public
static
Checksum
Create
(
string
kind
,
Checksum
checksum
)
{
using
(
var
stream
=
SerializableBytes
.
CreateWritableStream
())
using
(
var
writer
=
new
Stream
ObjectWriter
(
stream
))
using
(
var
writer
=
new
ObjectWriter
(
stream
))
{
writer
.
WriteString
(
kind
);
checksum
.
WriteTo
(
writer
);
...
...
@@ -40,7 +40,7 @@ public static Checksum Create<TChecksums>(string kind, TChecksums checksums)
where
TChecksums
:
IEnumerable
<
Checksum
>
{
using
(
var
stream
=
SerializableBytes
.
CreateWritableStream
())
using
(
var
writer
=
new
Stream
ObjectWriter
(
stream
))
using
(
var
writer
=
new
ObjectWriter
(
stream
))
{
writer
.
WriteString
(
kind
);
...
...
@@ -56,7 +56,7 @@ public static Checksum Create<TChecksums>(string kind, TChecksums checksums)
public
static
Checksum
Create
<
T
>(
T
value
,
string
kind
,
Serializer
serializer
)
{
using
(
var
stream
=
SerializableBytes
.
CreateWritableStream
())
using
(
var
objectWriter
=
new
Stream
ObjectWriter
(
stream
))
using
(
var
objectWriter
=
new
ObjectWriter
(
stream
))
{
objectWriter
.
WriteString
(
kind
);
serializer
.
Serialize
(
value
,
objectWriter
,
CancellationToken
.
None
);
...
...
@@ -67,7 +67,7 @@ public static Checksum Create<T>(T value, string kind, Serializer serializer)
public
static
Checksum
Create
(
IObjectWritable
@object
,
string
kind
)
{
using
(
var
stream
=
SerializableBytes
.
CreateWritableStream
())
using
(
var
objectWriter
=
new
Stream
ObjectWriter
(
stream
))
using
(
var
objectWriter
=
new
ObjectWriter
(
stream
))
{
objectWriter
.
WriteString
(
kind
);
@object
.
WriteTo
(
objectWriter
);
...
...
src/Workspaces/CoreTest/Execution/Extensions.cs
浏览文件 @
aec6b9d8
...
...
@@ -21,13 +21,13 @@ public static async Task<T> GetValueAsync<T>(this ISolutionSynchronizationServic
var
syncObject
=
service
.
GetRemotableData
(
checksum
,
CancellationToken
.
None
);
using
(
var
stream
=
SerializableBytes
.
CreateWritableStream
())
using
(
var
writer
=
new
Stream
ObjectWriter
(
stream
))
using
(
var
writer
=
new
ObjectWriter
(
stream
))
{
// serialize asset to bits
await
syncObject
.
WriteObjectToAsync
(
writer
,
CancellationToken
.
None
).
ConfigureAwait
(
false
);
stream
.
Position
=
0
;
using
(
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
stream
))
using
(
var
reader
=
ObjectReader
.
TryGetReader
(
stream
))
{
// deserialize bits to object
var
serializer
=
syncService
.
Serializer_TestOnly
;
...
...
src/Workspaces/CoreTest/Execution/SnapshotSerializationTests.cs
浏览文件 @
aec6b9d8
...
...
@@ -494,12 +494,12 @@ private static async Task VerifyOptionSetsAsync(Workspace workspace, string lang
var
asset
=
assetBuilder
.
Build
(
workspace
.
Options
,
language
,
CancellationToken
.
None
);
using
(
var
stream
=
SerializableBytes
.
CreateWritableStream
())
using
(
var
writer
=
new
Stream
ObjectWriter
(
stream
))
using
(
var
writer
=
new
ObjectWriter
(
stream
))
{
await
asset
.
WriteObjectToAsync
(
writer
,
CancellationToken
.
None
).
ConfigureAwait
(
false
);
stream
.
Position
=
0
;
using
(
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
stream
))
using
(
var
reader
=
ObjectReader
.
TryGetReader
(
stream
))
{
var
recovered
=
serializer
.
Deserialize
<
OptionSet
>(
asset
.
Kind
,
reader
,
CancellationToken
.
None
);
var
assetFromStorage
=
assetBuilder
.
Build
(
recovered
,
language
,
CancellationToken
.
None
);
...
...
@@ -602,12 +602,12 @@ private async Task<Solution> GetSolutionAsync(ISolutionSynchronizationService se
private
static
async
Task
<
RemotableData
>
CloneAssetAsync
(
Serializer
serializer
,
RemotableData
asset
)
{
using
(
var
stream
=
SerializableBytes
.
CreateWritableStream
())
using
(
var
writer
=
new
Stream
ObjectWriter
(
stream
))
using
(
var
writer
=
new
ObjectWriter
(
stream
))
{
await
asset
.
WriteObjectToAsync
(
writer
,
CancellationToken
.
None
).
ConfigureAwait
(
false
);
stream
.
Position
=
0
;
using
(
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
stream
))
using
(
var
reader
=
ObjectReader
.
TryGetReader
(
stream
))
{
var
recovered
=
serializer
.
Deserialize
<
object
>(
asset
.
Kind
,
reader
,
CancellationToken
.
None
);
var
assetFromStorage
=
SolutionAsset
.
Create
(
serializer
.
CreateChecksum
(
recovered
,
CancellationToken
.
None
),
recovered
,
serializer
);
...
...
src/Workspaces/CoreTest/FindAllDeclarationsTests.cs
浏览文件 @
aec6b9d8
...
...
@@ -547,13 +547,13 @@ public async Task TestSymbolTreeInfoSerialization()
using
(
var
writerStream
=
new
MemoryStream
())
{
using
(
var
writer
=
new
Stream
ObjectWriter
(
writerStream
))
using
(
var
writer
=
new
ObjectWriter
(
writerStream
))
{
info
.
WriteTo
(
writer
);
}
using
(
var
readerStream
=
new
MemoryStream
(
writerStream
.
ToArray
()))
using
(
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
readerStream
))
using
(
var
reader
=
ObjectReader
.
TryGetReader
(
readerStream
))
{
var
readInfo
=
SymbolTreeInfo
.
ReadSymbolTreeInfo_ForTestingPurposesOnly
(
reader
);
...
...
src/Workspaces/CoreTest/SerializationTests.cs
浏览文件 @
aec6b9d8
...
...
@@ -42,13 +42,13 @@ public void TestNameSimplificationAnnotationSerialization()
public
void
VersionStamp_RoundTripText
()
{
using
(
var
writerStream
=
new
MemoryStream
())
using
(
var
writer
=
new
Stream
ObjectWriter
(
writerStream
))
using
(
var
writer
=
new
ObjectWriter
(
writerStream
))
{
var
versionStamp
=
VersionStamp
.
Create
();
versionStamp
.
WriteTo
(
writer
);
using
(
var
readerStream
=
new
MemoryStream
(
writerStream
.
ToArray
()))
using
(
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
readerStream
))
using
(
var
reader
=
ObjectReader
.
TryGetReader
(
readerStream
))
{
var
deserializedVersionStamp
=
VersionStamp
.
ReadFrom
(
reader
);
...
...
src/Workspaces/Remote/ServiceHub/Services/CodeAnalysisService_Diagnostics.cs
浏览文件 @
aec6b9d8
...
...
@@ -71,7 +71,7 @@ private async Task SerializeDiagnosticResultAsync(string streamName, DiagnosticA
using
(
RoslynLogger
.
LogBlock
(
FunctionId
.
CodeAnalysisService_SerializeDiagnosticResultAsync
,
GetResultLogInfo
,
result
,
CancellationToken
))
using
(
var
stream
=
await
DirectStream
.
GetAsync
(
streamName
,
CancellationToken
).
ConfigureAwait
(
false
))
{
using
(
var
writer
=
new
Stream
ObjectWriter
(
stream
))
using
(
var
writer
=
new
ObjectWriter
(
stream
))
{
DiagnosticResultSerializer
.
Serialize
(
writer
,
result
,
CancellationToken
);
}
...
...
src/Workspaces/Remote/ServiceHub/Services/SnapshotService.JsonRpcAssetSource.cs
浏览文件 @
aec6b9d8
...
...
@@ -56,7 +56,7 @@ private class JsonRpcAssetSource : AssetSource
{
var
results
=
new
List
<
ValueTuple
<
Checksum
,
object
>>();
using
(
var
reader
=
Stream
ObjectReader
.
TryGetReader
(
stream
))
using
(
var
reader
=
ObjectReader
.
TryGetReader
(
stream
))
{
Debug
.
Assert
(
reader
!=
null
,
@"We only ge a reader for data transmitted between live processes.
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录