Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
167e4649
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,发现更多精彩内容 >>
提交
167e4649
编写于
5月 18, 2016
作者:
C
CyrusNajmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Move away from conditional weak tables.
上级
3e5b27d9
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
23 addition
and
41 deletion
+23
-41
src/Features/Core/Portable/Completion/CompletionServiceWithProviders.cs
...ore/Portable/Completion/CompletionServiceWithProviders.cs
+23
-41
未找到文件。
src/Features/Core/Portable/Completion/CompletionServiceWithProviders.cs
浏览文件 @
167e4649
...
...
@@ -23,9 +23,17 @@ namespace Microsoft.CodeAnalysis.Completion
public
abstract
class
CompletionServiceWithProviders
:
CompletionService
{
private
static
readonly
Func
<
string
,
List
<
CompletionItem
>>
s_createList
=
_
=>
new
List
<
CompletionItem
>();
private
IEnumerable
<
Lazy
<
CompletionProvider
,
CompletionProviderMetadata
>>
_importedProviders
;
private
readonly
object
_gate
=
new
object
();
private
readonly
Dictionary
<
string
,
CompletionProvider
>
_nameToProvider
=
new
Dictionary
<
string
,
CompletionProvider
>();
private
readonly
Dictionary
<
ImmutableHashSet
<
string
>,
ImmutableArray
<
CompletionProvider
>>
_rolesToProviders
=
new
Dictionary
<
ImmutableHashSet
<
string
>,
ImmutableArray
<
CompletionProvider
>>();
private
readonly
Func
<
ImmutableHashSet
<
string
>,
ImmutableArray
<
CompletionProvider
>>
_createRoleProviders
;
private
readonly
Workspace
_workspace
;
private
IEnumerable
<
Lazy
<
CompletionProvider
,
CompletionProviderMetadata
>>
_importedProviders
;
protected
CompletionServiceWithProviders
(
Workspace
workspace
)
{
_workspace
=
workspace
;
...
...
@@ -68,20 +76,15 @@ protected virtual ImmutableArray<CompletionProvider> GetBuiltInProviders()
internal
void
SetTestProviders
(
IEnumerable
<
CompletionProvider
>
testProviders
)
{
_testProviders
=
testProviders
!=
null
?
testProviders
.
ToImmutableArray
()
:
ImmutableArray
<
CompletionProvider
>.
Empty
;
}
private
class
RoleProviders
{
public
ImmutableArray
<
CompletionProvider
>
Providers
;
lock
(
_gate
)
{
_testProviders
=
testProviders
!=
null
?
testProviders
.
ToImmutableArray
()
:
ImmutableArray
<
CompletionProvider
>.
Empty
;
_rolesToProviders
.
Clear
();
_nameToProvider
.
Clear
();
}
}
private
readonly
ConditionalWeakTable
<
ImmutableHashSet
<
string
>,
RoleProviders
>
_roleProviders
=
new
ConditionalWeakTable
<
ImmutableHashSet
<
string
>,
RoleProviders
>();
private
readonly
ConditionalWeakTable
<
ImmutableHashSet
<
string
>,
RoleProviders
>.
CreateValueCallback
_createRoleProviders
;
private
RoleProviders
CreateRoleProviders
(
ImmutableHashSet
<
string
>
roles
)
private
ImmutableArray
<
CompletionProvider
>
CreateRoleProviders
(
ImmutableHashSet
<
string
>
roles
)
{
var
builtin
=
GetBuiltInProviders
();
var
imported
=
GetImportedProviders
()
...
...
@@ -90,25 +93,22 @@ private RoleProviders CreateRoleProviders(ImmutableHashSet<string> roles)
var
providers
=
builtin
.
Concat
(
imported
).
Concat
(
_testProviders
);
lock
(
_gate
)
foreach
(
var
provider
in
providers
)
{
foreach
(
var
provider
in
providers
)
{
_nameToProvider
[
provider
.
Name
]
=
provider
;
}
_nameToProvider
[
provider
.
Name
]
=
provider
;
}
return
new
RoleProviders
{
Providers
=
providers
.
ToImmutableArray
()
}
;
return
providers
.
ToImmutableArray
()
;
}
protected
ImmutableArray
<
CompletionProvider
>
GetProviders
(
ImmutableHashSet
<
string
>
roles
)
{
roles
=
roles
??
ImmutableHashSet
<
string
>.
Empty
;
RoleProviders
providers
;
return
_roleProviders
.
TryGetValue
(
roles
,
out
providers
)
?
providers
.
Providers
:
ImmutableArray
<
CompletionProvider
>.
Empty
;
lock
(
_gate
)
{
return
_rolesToProviders
.
GetOrAdd
(
roles
,
_createRoleProviders
);
}
}
protected
virtual
ImmutableArray
<
CompletionProvider
>
GetProviders
(
ImmutableHashSet
<
string
>
roles
,
CompletionTrigger
trigger
)
...
...
@@ -123,24 +123,6 @@ protected virtual ImmutableArray<CompletionProvider> GetProviders(ImmutableHashS
}
}
private
readonly
object
_gate
=
new
object
();
private
readonly
Dictionary
<
string
,
CompletionProvider
>
_nameToProvider
=
new
Dictionary
<
string
,
CompletionProvider
>();
private
ImmutableDictionary
<
string
,
CompletionProvider
>
CreateNameToProviderMap
()
{
var
map
=
ImmutableDictionary
<
string
,
CompletionProvider
>.
Empty
;
foreach
(
var
provider
in
GetBuiltInProviders
().
Concat
(
GetImportedProviders
().
Select
(
lz
=>
lz
.
Value
)).
Concat
(
_testProviders
))
{
if
(!
map
.
ContainsKey
(
provider
.
Name
))
{
map
=
map
.
Add
(
provider
.
Name
,
provider
);
}
}
return
map
;
}
internal
protected
CompletionProvider
GetProvider
(
CompletionItem
item
)
{
string
name
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录