Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
3e5b27d9
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,发现更多精彩内容 >>
提交
3e5b27d9
编写于
5月 18, 2016
作者:
C
CyrusNajmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Don't preload completion providers we don't need.
上级
13859e84
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
34 addition
and
38 deletion
+34
-38
src/Features/Core/Portable/Completion/CompletionServiceWithProviders.cs
...ore/Portable/Completion/CompletionServiceWithProviders.cs
+34
-38
未找到文件。
src/Features/Core/Portable/Completion/CompletionServiceWithProviders.cs
浏览文件 @
3e5b27d9
...
...
@@ -29,6 +29,7 @@ public abstract class CompletionServiceWithProviders : CompletionService
protected
CompletionServiceWithProviders
(
Workspace
workspace
)
{
_workspace
=
workspace
;
_createRoleProviders
=
CreateRoleProviders
;
}
public
override
CompletionRules
GetRules
()
...
...
@@ -68,7 +69,6 @@ protected virtual ImmutableArray<CompletionProvider> GetBuiltInProviders()
internal
void
SetTestProviders
(
IEnumerable
<
CompletionProvider
>
testProviders
)
{
_testProviders
=
testProviders
!=
null
?
testProviders
.
ToImmutableArray
()
:
ImmutableArray
<
CompletionProvider
>.
Empty
;
_lazyNameToProviderMap
=
null
;
}
private
class
RoleProviders
...
...
@@ -79,31 +79,36 @@ private class RoleProviders
private
readonly
ConditionalWeakTable
<
ImmutableHashSet
<
string
>,
RoleProviders
>
_roleProviders
=
new
ConditionalWeakTable
<
ImmutableHashSet
<
string
>,
RoleProviders
>();
protected
ImmutableArray
<
CompletionProvider
>
GetProviders
(
ImmutableHashSet
<
string
>
roles
)
private
readonly
ConditionalWeakTable
<
ImmutableHashSet
<
string
>,
RoleProviders
>.
CreateValueCallback
_createRoleProviders
;
private
RoleProviders
CreateRoleProviders
(
ImmutableHashSet
<
string
>
roles
)
{
roles
=
roles
??
ImmutableHashSet
<
string
>.
Empty
;
var
builtin
=
GetBuiltInProviders
();
var
imported
=
GetImportedProviders
()
.
Where
(
lz
=>
lz
.
Metadata
.
Roles
==
null
||
lz
.
Metadata
.
Roles
.
Length
==
0
||
roles
.
Overlaps
(
lz
.
Metadata
.
Roles
))
.
Select
(
lz
=>
lz
.
Value
);
RoleProviders
providers
;
if
(!
_roleProviders
.
TryGetValue
(
roles
,
out
providers
))
var
providers
=
builtin
.
Concat
(
imported
).
Concat
(
_testProviders
);
lock
(
_gate
)
{
providers
=
_roleProviders
.
GetValue
(
roles
,
_
=>
foreach
(
var
provider
in
providers
)
{
var
builtin
=
GetBuiltInProviders
();
var
imported
=
GetImportedProviders
()
.
Where
(
lz
=>
lz
.
Metadata
.
Roles
==
null
||
lz
.
Metadata
.
Roles
.
Length
==
0
||
roles
.
Overlaps
(
lz
.
Metadata
.
Roles
))
.
Select
(
lz
=>
lz
.
Value
);
return
new
RoleProviders
{
Providers
=
builtin
.
Concat
(
imported
).
ToImmutableArray
()
};
});
_nameToProvider
[
provider
.
Name
]
=
provider
;
}
}
if
(
_testProviders
.
Length
>
0
)
{
return
providers
.
Providers
.
Concat
(
_testProviders
);
}
else
{
return
providers
.
Providers
;
}
return
new
RoleProviders
{
Providers
=
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
;
}
protected
virtual
ImmutableArray
<
CompletionProvider
>
GetProviders
(
ImmutableHashSet
<
string
>
roles
,
CompletionTrigger
trigger
)
...
...
@@ -118,19 +123,8 @@ protected virtual ImmutableArray<CompletionProvider> GetProviders(ImmutableHashS
}
}
private
ImmutableDictionary
<
string
,
CompletionProvider
>
_lazyNameToProviderMap
=
null
;
private
ImmutableDictionary
<
string
,
CompletionProvider
>
NameToProviderMap
{
get
{
if
(
_lazyNameToProviderMap
==
null
)
{
Interlocked
.
CompareExchange
(
ref
_lazyNameToProviderMap
,
CreateNameToProviderMap
(),
null
);
}
return
_lazyNameToProviderMap
;
}
}
private
readonly
object
_gate
=
new
object
();
private
readonly
Dictionary
<
string
,
CompletionProvider
>
_nameToProvider
=
new
Dictionary
<
string
,
CompletionProvider
>();
private
ImmutableDictionary
<
string
,
CompletionProvider
>
CreateNameToProviderMap
()
{
...
...
@@ -150,15 +144,17 @@ protected virtual ImmutableArray<CompletionProvider> GetProviders(ImmutableHashS
internal
protected
CompletionProvider
GetProvider
(
CompletionItem
item
)
{
string
name
;
CompletionProvider
provider
;
CompletionProvider
provider
=
null
;
if
(
item
.
Properties
.
TryGetValue
(
"Provider"
,
out
name
)
&&
this
.
NameToProviderMap
.
TryGetValue
(
name
,
out
provider
))
if
(
item
.
Properties
.
TryGetValue
(
"Provider"
,
out
name
))
{
return
provider
;
lock
(
_gate
)
{
_nameToProvider
.
TryGetValue
(
name
,
out
provider
);
}
}
return
null
;
return
provider
;
}
public
override
async
Task
<
CompletionList
>
GetCompletionsAsync
(
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录