Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
d27c2df9
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,发现更多精彩内容 >>
提交
d27c2df9
编写于
2月 27, 2017
作者:
C
CyrusNajmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Move and simplify code.
上级
c2fbd9c6
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
47 addition
and
32 deletion
+47
-32
src/Features/Core/Portable/AddImport/SymbolReferenceFinder.cs
...Features/Core/Portable/AddImport/SymbolReferenceFinder.cs
+47
-32
未找到文件。
src/Features/Core/Portable/AddImport/SymbolReferenceFinder.cs
浏览文件 @
d27c2df9
...
@@ -311,11 +311,23 @@ private async Task<ImmutableArray<SymbolReference>> GetReferencesForMatchingExte
...
@@ -311,11 +311,23 @@ private async Task<ImmutableArray<SymbolReference>> GetReferencesForMatchingExte
private
ImmutableArray
<
SymbolResult
<
IMethodSymbol
>>
GetViableExtensionMethods
(
private
ImmutableArray
<
SymbolResult
<
IMethodSymbol
>>
GetViableExtensionMethods
(
ImmutableArray
<
SymbolResult
<
IMethodSymbol
>>
methodSymbols
,
ImmutableArray
<
SymbolResult
<
IMethodSymbol
>>
methodSymbols
,
SyntaxNode
expression
,
CancellationToken
cancellationToken
)
SyntaxNode
expression
,
CancellationToken
cancellationToken
)
{
return
GetViableExtensionMethodsWorker
(
methodSymbols
,
cancellationToken
).
WhereAsArray
(
s
=>
_owner
.
IsViableExtensionMethod
(
s
.
Symbol
,
expression
,
_semanticModel
,
_syntaxFacts
,
cancellationToken
));
}
private
ImmutableArray
<
SymbolResult
<
IMethodSymbol
>>
GetViableExtensionMethods
(
ImmutableArray
<
SymbolResult
<
IMethodSymbol
>>
methodSymbols
,
ITypeSymbol
typeSymbol
,
CancellationToken
cancellationToken
)
{
return
GetViableExtensionMethodsWorker
(
methodSymbols
,
cancellationToken
).
WhereAsArray
(
s
=>
_owner
.
IsViableExtensionMethod
(
s
.
Symbol
,
typeSymbol
));
}
private
ImmutableArray
<
SymbolResult
<
IMethodSymbol
>>
GetViableExtensionMethodsWorker
(
ImmutableArray
<
SymbolResult
<
IMethodSymbol
>>
methodSymbols
,
CancellationToken
cancellationToken
)
{
{
return
methodSymbols
.
WhereAsArray
(
return
methodSymbols
.
WhereAsArray
(
s
=>
s
.
Symbol
.
IsExtensionMethod
&&
s
=>
s
.
Symbol
.
IsExtensionMethod
&&
s
.
Symbol
.
IsAccessibleWithin
(
_semanticModel
.
Compilation
.
Assembly
)
&&
s
.
Symbol
.
IsAccessibleWithin
(
_semanticModel
.
Compilation
.
Assembly
));
_owner
.
IsViableExtensionMethod
(
s
.
Symbol
,
expression
,
_semanticModel
,
_syntaxFacts
,
cancellationToken
));
}
}
/// <summary>
/// <summary>
...
@@ -352,6 +364,39 @@ private async Task<ImmutableArray<SymbolReference>> GetReferencesForCollectionIn
...
@@ -352,6 +364,39 @@ private async Task<ImmutableArray<SymbolReference>> GetReferencesForCollectionIn
viableMethods
.
SelectAsArray
(
m
=>
m
.
WithSymbol
(
m
.
Symbol
.
ContainingNamespace
)));
viableMethods
.
SelectAsArray
(
m
=>
m
.
WithSymbol
(
m
.
Symbol
.
ContainingNamespace
)));
}
}
/// <summary>
/// Searches for extension methods exactly called 'Select'. Returns
/// <see cref="SymbolReference"/>s to the <see cref="INamespaceSymbol"/>s that contain
/// the static classes that those extension methods are contained in.
/// </summary>
private
async
Task
<
ImmutableArray
<
SymbolReference
>>
GetReferencesForQueryPatternsAsync
(
SearchScope
searchScope
)
{
searchScope
.
CancellationToken
.
ThrowIfCancellationRequested
();
if
(
_owner
.
CanAddImportForQuery
(
_diagnostic
,
_node
))
{
var
type
=
_owner
.
GetQueryClauseInfo
(
_semanticModel
,
_node
,
searchScope
.
CancellationToken
);
if
(
type
!=
null
)
{
// find extension methods named "Select"
var
symbols
=
await
searchScope
.
FindDeclarationsAsync
(
nameof
(
Enumerable
.
Select
),
nameNode
:
null
,
filter
:
SymbolFilter
.
Member
).
ConfigureAwait
(
false
);
// Note: there is no "desiredName" when doing this. We're not going to do any
// renames of the user code. We're just looking for an extension method called
// "Select", but that name has no bearing on the code in question that we're
// trying to fix up.
var
methodSymbols
=
OfType
<
IMethodSymbol
>(
symbols
).
SelectAsArray
(
s
=>
s
.
WithDesiredName
(
null
));
var
viableExtensionMethods
=
GetViableExtensionMethods
(
methodSymbols
,
type
,
searchScope
.
CancellationToken
);
var
namespaceSymbols
=
viableExtensionMethods
.
SelectAsArray
(
s
=>
s
.
WithSymbol
(
s
.
Symbol
.
ContainingNamespace
));
return
GetNamespaceSymbolReferences
(
searchScope
,
namespaceSymbols
);
}
}
return
ImmutableArray
<
SymbolReference
>.
Empty
;
}
internal
async
Task
FindNugetOrReferenceAssemblyReferencesAsync
(
internal
async
Task
FindNugetOrReferenceAssemblyReferencesAsync
(
ArrayBuilder
<
Reference
>
allReferences
,
CancellationToken
cancellationToken
)
ArrayBuilder
<
Reference
>
allReferences
,
CancellationToken
cancellationToken
)
{
{
...
@@ -603,36 +648,6 @@ private static string GetDesiredName(bool isAttributeSearch, string typeName)
...
@@ -603,36 +648,6 @@ private static string GetDesiredName(bool isAttributeSearch, string typeName)
return
symbolInfo
.
Symbol
!=
null
;
return
symbolInfo
.
Symbol
!=
null
;
}
}
private
async
Task
<
ImmutableArray
<
SymbolReference
>>
GetReferencesForQueryPatternsAsync
(
SearchScope
searchScope
)
{
searchScope
.
CancellationToken
.
ThrowIfCancellationRequested
();
if
(!
_owner
.
CanAddImportForQuery
(
_diagnostic
,
_node
))
{
return
ImmutableArray
<
SymbolReference
>.
Empty
;
}
var
type
=
_owner
.
GetQueryClauseInfo
(
_semanticModel
,
_node
,
searchScope
.
CancellationToken
);
if
(
type
==
null
)
{
return
ImmutableArray
<
SymbolReference
>.
Empty
;
}
// find extension methods named "Select"
var
symbols
=
await
searchScope
.
FindDeclarationsAsync
(
"Select"
,
nameNode
:
null
,
filter
:
SymbolFilter
.
Member
).
ConfigureAwait
(
false
);
// Note: there is no "desiredName" when doing this. We're not going to do any
// renames of the user code. We're just looking for an extension method called
// "Select", but that name has no bearing on the code in question that we're
// trying to fix up.
var
extensionMethodSymbols
=
OfType
<
IMethodSymbol
>(
symbols
)
.
WhereAsArray
(
s
=>
s
.
Symbol
.
IsExtensionMethod
&&
_owner
.
IsViableExtensionMethod
(
s
.
Symbol
,
type
))
.
SelectAsArray
(
s
=>
s
.
WithDesiredName
(
null
));
return
GetNamespaceSymbolReferences
(
searchScope
,
extensionMethodSymbols
.
SelectAsArray
(
s
=>
s
.
WithSymbol
(
s
.
Symbol
.
ContainingNamespace
)));
}
private
ImmutableArray
<
SymbolReference
>
GetNamespaceSymbolReferences
(
private
ImmutableArray
<
SymbolReference
>
GetNamespaceSymbolReferences
(
SearchScope
scope
,
ImmutableArray
<
SymbolResult
<
INamespaceSymbol
>>
namespaces
)
SearchScope
scope
,
ImmutableArray
<
SymbolResult
<
INamespaceSymbol
>>
namespaces
)
{
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录