Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
61627a4e
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,发现更多精彩内容 >>
提交
61627a4e
编写于
9月 27, 2016
作者:
C
CyrusNajmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use immutable arrays in more places.
上级
afbb2817
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
22 addition
and
12 deletion
+22
-12
src/Workspaces/Core/Portable/FindSymbols/FindReferences/DependentTypeFinder.cs
...ortable/FindSymbols/FindReferences/DependentTypeFinder.cs
+22
-12
未找到文件。
src/Workspaces/Core/Portable/FindSymbols/FindReferences/DependentTypeFinder.cs
浏览文件 @
61627a4e
...
...
@@ -35,6 +35,9 @@ internal static class DependentTypeFinder
private
static
readonly
Func
<
INamedTypeSymbol
,
bool
>
s_isInterfaceOrNonSealedClass
=
t
=>
t
.
TypeKind
==
TypeKind
.
Interface
||
s_isNonSealedClass
(
t
);
private
static
readonly
ObjectPool
<
SymbolAndProjectIdSet
>
s_setPool
=
new
ObjectPool
<
SymbolAndProjectIdSet
>(
()
=>
new
SymbolAndProjectIdSet
());
/// <summary>
/// Used for implementing the Inherited-By relation for progression.
/// </summary>
...
...
@@ -92,7 +95,7 @@ internal static class DependentTypeFinder
/// Implementation of <see cref="SymbolFinder.FindImplementationsAsync(SymbolAndProjectId, Solution, IImmutableSet{Project}, CancellationToken)"/> for
/// <see cref="INamedTypeSymbol"/>s
/// </summary>
public
static
async
Task
<
I
Enumerable
<
SymbolAndProjectId
<
INamedTypeSymbol
>>>
FindTransitivelyImplementingTypesAsync
(
public
static
async
Task
<
I
mmutableArray
<
SymbolAndProjectId
<
INamedTypeSymbol
>>>
FindTransitivelyImplementingTypesAsync
(
INamedTypeSymbol
type
,
Solution
solution
,
IImmutableSet
<
Project
>
projects
,
...
...
@@ -103,7 +106,7 @@ internal static class DependentTypeFinder
transitive
:
true
,
cancellationToken
:
cancellationToken
).
ConfigureAwait
(
false
);
// We only want implementing types here, not derived interfaces.
return
derivedAndImplementingTypes
.
Where
(
t
=>
t
.
Symbol
.
TypeKind
==
TypeKind
.
Class
).
ToList
(
);
return
derivedAndImplementingTypes
.
Where
AsArray
(
t
=>
t
.
Symbol
.
TypeKind
==
TypeKind
.
Class
);
}
/// <summary>
...
...
@@ -214,7 +217,15 @@ internal static class DependentTypeFinder
transitive
,
cancellationToken
).
ConfigureAwait
(
false
);
}
return
result
.
ToImmutableArray
();
return
ToImmutableAndFree
(
result
);
}
private
static
ImmutableArray
<
SymbolAndProjectId
<
INamedTypeSymbol
>>
ToImmutableAndFree
(
SymbolAndProjectIdSet
set
)
{
var
array
=
set
.
ToImmutableArray
();
s_setPool
.
ClearAndFree
(
set
);
return
array
;
}
private
static
async
Task
FindTypesInProjectAsync
(
...
...
@@ -389,7 +400,7 @@ internal static class DependentTypeFinder
.
ToList
();
}
private
static
async
Task
<
I
Enumerable
<
SymbolAndProjectId
<
INamedTypeSymbol
>>>
FindAllMatchingMetadataTypesInProjectAsync
(
private
static
async
Task
<
I
mmutableArray
<
SymbolAndProjectId
<
INamedTypeSymbol
>>>
FindAllMatchingMetadataTypesInProjectAsync
(
SymbolAndProjectIdSet
metadataTypes
,
Project
project
,
Func
<
SymbolAndProjectIdSet
,
INamedTypeSymbol
,
bool
>
metadataTypeMatches
,
...
...
@@ -397,7 +408,7 @@ internal static class DependentTypeFinder
{
if
(
metadataTypes
.
Count
==
0
)
{
return
SpecializedCollections
.
EmptyEnumerable
<
SymbolAndProjectId
<
INamedTypeSymbol
>>()
;
return
ImmutableArray
<
SymbolAndProjectId
<
INamedTypeSymbol
>>.
Empty
;
}
var
compilation
=
await
project
.
GetCompilationAsync
(
cancellationToken
).
ConfigureAwait
(
false
);
...
...
@@ -425,7 +436,7 @@ internal static class DependentTypeFinder
currentTypes
=
immediateDerivedTypes
;
}
return
result
;
return
ToImmutableAndFree
(
result
)
;
}
private
static
async
Task
FindImmediateMatchingMetadataTypesInMetadataReferenceAsync
(
...
...
@@ -506,7 +517,7 @@ internal static class DependentTypeFinder
return
false
;
}
private
static
async
Task
<
I
Enumerable
<
SymbolAndProjectId
<
INamedTypeSymbol
>>>
FindSourceTypesInProjectAsync
(
private
static
async
Task
<
I
mmutableArray
<
SymbolAndProjectId
<
INamedTypeSymbol
>>>
FindSourceTypesInProjectAsync
(
SymbolAndProjectIdSet
sourceAndMetadataTypes
,
Project
project
,
Func
<
SymbolAndProjectIdSet
,
INamedTypeSymbol
,
bool
>
sourceTypeImmediatelyMatches
,
...
...
@@ -566,7 +577,7 @@ internal static class DependentTypeFinder
}
}
return
finalResult
;
return
ToImmutableAndFree
(
finalResult
)
;
}
private
static
bool
ImmediatelyDerivesOrImplementsFrom
(
...
...
@@ -588,7 +599,7 @@ internal static class DependentTypeFinder
return
false
;
}
private
static
async
Task
<
I
Enumerable
<
SymbolAndProjectId
<
INamedTypeSymbol
>>>
FindImmediatelyInheritingTypesInDocumentAsync
(
private
static
async
Task
<
I
mmutableArray
<
SymbolAndProjectId
<
INamedTypeSymbol
>>>
FindImmediatelyInheritingTypesInDocumentAsync
(
Document
document
,
SymbolAndProjectIdSet
typesToSearchFor
,
InheritanceQuery
inheritanceQuery
,
...
...
@@ -610,7 +621,7 @@ internal static class DependentTypeFinder
typeImmediatelyMatches
,
result
,
cancellationToken
).
ConfigureAwait
(
false
);
}
return
result
;
return
ToImmutableAndFree
(
result
)
;
}
private
static
async
Task
<
SymbolAndProjectIdSet
>
ProcessSymbolInfo
(
...
...
@@ -712,8 +723,7 @@ public InheritanceQuery(SymbolAndProjectIdSet sourceAndMetadataTypes)
private
static
SymbolAndProjectIdSet
CreateSymbolAndProjectIdSet
()
{
return
new
SymbolAndProjectIdSet
(
SymbolAndProjectIdComparer
<
INamedTypeSymbol
>.
SymbolEquivalenceInstance
);
return
s_setPool
.
Allocate
();
}
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录