Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
bbe62790
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,发现更多精彩内容 >>
提交
bbe62790
编写于
4月 29, 2020
作者:
C
Cyrus Najmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixup implementation searches to find enums/delegates
上级
bc4a0c56
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
42 addition
and
4 deletion
+42
-4
src/EditorFeatures/Test/SymbolFinder/DependentTypeFinderTests.cs
...torFeatures/Test/SymbolFinder/DependentTypeFinderTests.cs
+34
-1
src/Workspaces/Core/Portable/FindSymbols/FindReferences/DependentTypeFinder_ImplementingTypes.cs
...s/FindReferences/DependentTypeFinder_ImplementingTypes.cs
+8
-3
未找到文件。
src/EditorFeatures/Test/SymbolFinder/DependentTypeFinderTests.cs
浏览文件 @
bbe62790
...
...
@@ -563,7 +563,34 @@ struct OtherStruct { }
}
[
Theory
,
CombinatorialData
]
public
async
Task
ImplementingTypesDoesNotProduceEnums
(
TestHost
host
)
public
async
Task
ImplementingTypesDoesProduceDelegates
(
TestHost
host
)
{
using
var
workspace
=
GetWorkspace
(
host
);
var
solution
=
workspace
.
CurrentSolution
;
// create a normal assembly with a type derived from the portable abstract base
solution
=
AddProjectWithMetadataReferences
(
solution
,
"NormalProject"
,
LanguageNames
.
CSharp
,
@"
delegate void D();
"
,
MscorlibRef
);
// get symbols for types
var
compilation
=
await
GetNormalProject
(
solution
).
GetCompilationAsync
();
var
rootType
=
compilation
.
GetTypeByMetadataName
(
"System.ICloneable"
);
Assert
.
NotNull
(
rootType
);
var
transitiveImpls
=
await
SymbolFinder
.
FindImplementationsAsync
(
rootType
,
solution
,
transitive
:
true
);
var
delegates
=
transitiveImpls
.
Where
(
i
=>
i
.
TypeKind
==
TypeKind
.
Delegate
);
Assert
.
NotEmpty
(
delegates
);
// We should find delegates when looking for implementations
Assert
.
True
(
delegates
.
Any
(
i
=>
i
.
Locations
.
Any
(
loc
=>
loc
.
IsInMetadata
)),
"We should find a metadata delegate"
);
Assert
.
Single
(
delegates
.
Where
(
i
=>
i
.
Locations
.
Any
(
loc
=>
loc
.
IsInSource
)));
// We should find a single source delegate
}
[
Theory
,
CombinatorialData
]
public
async
Task
ImplementingTypesDoesProduceEnums
(
TestHost
host
)
{
using
var
workspace
=
GetWorkspace
(
host
);
var
solution
=
workspace
.
CurrentSolution
;
...
...
@@ -584,6 +611,12 @@ enum E
var
transitiveImpls
=
await
SymbolFinder
.
FindImplementationsAsync
(
rootType
,
solution
,
transitive
:
true
);
var
enums
=
transitiveImpls
.
Where
(
i
=>
i
.
TypeKind
==
TypeKind
.
Enum
);
Assert
.
NotEmpty
(
enums
);
// We should find enums when looking for implementations
Assert
.
True
(
enums
.
Any
(
i
=>
i
.
Locations
.
Any
(
loc
=>
loc
.
IsInMetadata
)),
"We should find a metadata enum"
);
Assert
.
Single
(
enums
.
Where
(
i
=>
i
.
Locations
.
Any
(
loc
=>
loc
.
IsInSource
)));
// We should find a single source type
}
}
}
src/Workspaces/Core/Portable/FindSymbols/FindReferences/DependentTypeFinder_ImplementingTypes.cs
浏览文件 @
bbe62790
...
...
@@ -84,9 +84,14 @@ static bool TypeMatches(INamedTypeSymbol type, SymbolSet set)
transitive
:
transitive
,
cancellationToken
:
cancellationToken
).
ConfigureAwait
(
false
);
// Only classes/struct implement interface types. Derived interfaces can be found with
// FindDerivedInterfacesAsync.
return
allTypes
.
WhereAsArray
(
t
=>
t
.
TypeKind
==
TypeKind
.
Class
||
t
.
TypeKind
==
TypeKind
.
Struct
);
// Only classes/struct/delegates/enums implement interface types. Derived interfaces can be found with
// FindDerivedInterfacesAsync. Delegates/Enums only happen in a few corner cases. For example, enums
// implement IComparable, and delegates implement ICloneable.
return
allTypes
.
WhereAsArray
(
t
=>
t
.
TypeKind
==
TypeKind
.
Class
||
t
.
TypeKind
==
TypeKind
.
Struct
||
t
.
TypeKind
==
TypeKind
.
Delegate
||
t
.
TypeKind
==
TypeKind
.
Enum
);
}
return
ImmutableArray
<
INamedTypeSymbol
>.
Empty
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录