Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
c22a87e9
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,发现更多精彩内容 >>
提交
c22a87e9
编写于
10月 10, 2017
作者:
S
Sam Harwell
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Convert unreachable code analyzer to a semantic model analyzer
Fixes #22635
上级
ab843e50
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
5 addition
and
26 deletion
+5
-26
src/Features/CSharp/Portable/RemoveUnreachableCode/CSharpRemoveUnreachableCodeDiagnosticAnalyzer.cs
...ableCode/CSharpRemoveUnreachableCodeDiagnosticAnalyzer.cs
+5
-26
未找到文件。
src/Features/CSharp/Portable/RemoveUnreachableCode/CSharpRemoveUnreachableCodeDiagnosticAnalyzer.cs
浏览文件 @
c22a87e9
...
...
@@ -34,18 +34,10 @@ public override bool OpenFileOnly(Workspace workspace)
=>
false
;
protected
override
void
InitializeWorker
(
AnalysisContext
context
)
=>
context
.
RegisterS
yntaxNodeAction
(
AnalyzeBlock
,
ImmutableArray
.
Create
(
SyntaxKind
.
Block
)
);
=>
context
.
RegisterS
emanticModelAction
(
AnalyzeSemanticModel
);
private
void
Analyze
Block
(
SyntaxNode
AnalysisContext
context
)
private
void
Analyze
SemanticModel
(
SemanticModel
AnalysisContext
context
)
{
var
block
=
context
.
Node
;
if
(!
IsOutermostBlock
(
block
))
{
// Don't bother processing inner blocks. We'll have already checked them when
// we processed the outer block
return
;
}
var
options
=
context
.
Options
as
WorkspaceAnalyzerOptions
;
if
(
options
==
null
)
{
...
...
@@ -54,6 +46,7 @@ private void AnalyzeBlock(SyntaxNodeAnalysisContext context)
var
fadeCode
=
options
.
Services
.
Workspace
.
Options
.
GetOption
(
FadingOptions
.
FadeOutUnreachableCode
,
LanguageNames
.
CSharp
);
var
tree
=
context
.
SemanticModel
.
SyntaxTree
;
var
semanticModel
=
context
.
SemanticModel
;
var
cancellationToken
=
context
.
CancellationToken
;
...
...
@@ -69,7 +62,7 @@ private void AnalyzeBlock(SyntaxNodeAnalysisContext context)
// binding diagnostics directly on the SourceMethodSymbol containing this block, and
// so it can retrieve the diagnostics at practically no cost.
var
root
=
semanticModel
.
SyntaxTree
.
GetRoot
(
cancellationToken
);
var
diagnostics
=
semanticModel
.
GetDiagnostics
(
block
.
Span
,
cancellationToken
);
var
diagnostics
=
semanticModel
.
GetDiagnostics
(
cancellationToken
:
cancellationToken
);
foreach
(
var
diagnostic
in
diagnostics
)
{
cancellationToken
.
ThrowIfCancellationRequested
();
...
...
@@ -81,22 +74,8 @@ private void AnalyzeBlock(SyntaxNodeAnalysisContext context)
}
}
private
bool
IsOutermostBlock
(
SyntaxNode
block
)
{
// Avoid linq/allocations as we will be calling this on every block in the solution.
for
(
var
current
=
block
.
Parent
;
current
!=
null
;
current
=
current
.
Parent
)
{
if
(
current
.
Kind
()
==
SyntaxKind
.
Block
)
{
return
false
;
}
}
return
true
;
}
private
void
ProcessUnreachableDiagnostic
(
S
yntaxNode
AnalysisContext
context
,
SyntaxNode
root
,
TextSpan
sourceSpan
,
bool
fadeOutCode
)
S
emanticModel
AnalysisContext
context
,
SyntaxNode
root
,
TextSpan
sourceSpan
,
bool
fadeOutCode
)
{
var
node
=
root
.
FindNode
(
sourceSpan
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录