Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
64a9624c
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,发现更多精彩内容 >>
提交
64a9624c
编写于
10月 06, 2016
作者:
C
CyrusNajmabadi
提交者:
GitHub
10月 06, 2016
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #14339 from CyrusNajmabadi/cacheServerCallbackDefinitions
Cache what symbols a serialized defintion rehydrated to.
上级
eb3337c7
91e16c51
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
38 addition
and
4 deletion
+38
-4
src/Workspaces/Core/Portable/FindSymbols/SymbolFinder.ServerCallback.cs
.../Core/Portable/FindSymbols/SymbolFinder.ServerCallback.cs
+17
-2
src/Workspaces/Core/Portable/Remote/RemoteArguments.cs
src/Workspaces/Core/Portable/Remote/RemoteArguments.cs
+21
-2
未找到文件。
src/Workspaces/Core/Portable/FindSymbols/SymbolFinder.ServerCallback.cs
浏览文件 @
64a9624c
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using
System.Collections.Generic
;
using
System.Threading
;
using
System.Threading.Tasks
;
using
Microsoft.CodeAnalysis.Remote
;
...
...
@@ -19,6 +20,10 @@ private class ServerCallback
private
readonly
IStreamingFindReferencesProgress
_progress
;
private
readonly
CancellationToken
_cancellationToken
;
private
readonly
object
_gate
=
new
object
();
private
readonly
Dictionary
<
SerializableSymbolAndProjectId
,
SymbolAndProjectId
>
_definitionMap
=
new
Dictionary
<
SerializableSymbolAndProjectId
,
SymbolAndProjectId
>();
public
ServerCallback
(
Solution
solution
,
IStreamingFindReferencesProgress
progress
,
...
...
@@ -49,14 +54,24 @@ public async Task OnDefinitionFoundAsync(SerializableSymbolAndProjectId definiti
{
var
symbolAndProjectId
=
await
definition
.
RehydrateAsync
(
_solution
,
_cancellationToken
).
ConfigureAwait
(
false
);
lock
(
_gate
)
{
_definitionMap
[
definition
]
=
symbolAndProjectId
;
}
await
_progress
.
OnDefinitionFoundAsync
(
symbolAndProjectId
).
ConfigureAwait
(
false
);
}
public
async
Task
OnReferenceFoundAsync
(
SerializableSymbolAndProjectId
definition
,
SerializableReferenceLocation
reference
)
{
var
symbolAndProjectId
=
await
definition
.
RehydrateAsync
(
_solution
,
_cancellationToken
).
ConfigureAwait
(
false
);
SymbolAndProjectId
symbolAndProjectId
;
lock
(
_gate
)
{
symbolAndProjectId
=
_definitionMap
[
definition
];
}
var
referenceLocation
=
await
reference
.
RehydrateAsync
(
_solution
,
_cancellationToken
).
ConfigureAwait
(
false
);
...
...
src/Workspaces/Core/Portable/Remote/RemoteArguments.cs
浏览文件 @
64a9624c
...
...
@@ -8,6 +8,7 @@
using
Microsoft.CodeAnalysis.FindSymbols
;
using
Microsoft.CodeAnalysis.SymbolSearch
;
using
Microsoft.CodeAnalysis.Text
;
using
Roslyn.Utilities
;
namespace
Microsoft.CodeAnalysis.Remote
{
...
...
@@ -16,11 +17,20 @@ namespace Microsoft.CodeAnalysis.Remote
/// <summary>
/// Arguments to pass from client to server when performing operations
/// </summary>
internal
class
SerializableProjectId
internal
class
SerializableProjectId
:
IEquatable
<
SerializableProjectId
>
{
public
Guid
Id
;
public
string
DebugName
;
public
override
int
GetHashCode
()
=>
Hash
.
Combine
(
Id
.
GetHashCode
(),
DebugName
.
GetHashCode
());
public
override
bool
Equals
(
object
obj
)
=>
Equals
(
obj
as
SerializableProjectId
);
public
bool
Equals
(
SerializableProjectId
obj
)
=>
obj
!=
null
&&
Id
.
Equals
(
obj
.
Id
)
&&
DebugName
.
Equals
(
obj
.
DebugName
);
public
static
SerializableProjectId
Dehydrate
(
ProjectId
id
)
{
return
new
SerializableProjectId
{
Id
=
id
.
Id
,
DebugName
=
id
.
DebugName
};
...
...
@@ -80,11 +90,20 @@ public TextSpan Rehydrate()
#
region
FindReferences
internal
class
SerializableSymbolAndProjectId
internal
class
SerializableSymbolAndProjectId
:
IEquatable
<
SerializableSymbolAndProjectId
>
{
public
string
SymbolKeyData
;
public
SerializableProjectId
ProjectId
;
public
override
int
GetHashCode
()
=>
Hash
.
Combine
(
SymbolKeyData
,
ProjectId
.
GetHashCode
());
public
override
bool
Equals
(
object
obj
)
=>
Equals
(
obj
as
SerializableSymbolAndProjectId
);
public
bool
Equals
(
SerializableSymbolAndProjectId
other
)
=>
other
!=
null
&&
SymbolKeyData
.
Equals
(
other
.
SymbolKeyData
)
&&
ProjectId
.
Equals
(
other
.
ProjectId
);
public
static
SerializableSymbolAndProjectId
Dehydrate
(
IAliasSymbol
alias
,
Document
document
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录