Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
ee2eeed3
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,发现更多精彩内容 >>
提交
ee2eeed3
编写于
10月 21, 2015
作者:
J
John Hamby
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Respond to review feedback.
上级
d9429233
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
92 addition
and
100 deletion
+92
-100
Roslyn.sln
Roslyn.sln
+30
-30
src/Compilers/Core/CodeAnalysisTest/Diagnostics/SystemLanguageAnalyzer.cs
...re/CodeAnalysisTest/Diagnostics/SystemLanguageAnalyzer.cs
+5
-5
src/Compilers/Core/Portable/DiagnosticAnalyzer/AnalyzerDriver.cs
...pilers/Core/Portable/DiagnosticAnalyzer/AnalyzerDriver.cs
+41
-40
src/Compilers/Core/Portable/DiagnosticAnalyzer/AnalyzerExecutor.cs
...lers/Core/Portable/DiagnosticAnalyzer/AnalyzerExecutor.cs
+8
-13
src/Compilers/Core/Portable/DiagnosticAnalyzer/DiagnosticAnalysisContext.cs
.../Portable/DiagnosticAnalyzer/DiagnosticAnalysisContext.cs
+1
-1
src/Compilers/Core/Portable/PublicAPI.Unshipped.txt
src/Compilers/Core/Portable/PublicAPI.Unshipped.txt
+7
-11
未找到文件。
Roslyn.sln
浏览文件 @
ee2eeed3
...
...
@@ -134,7 +134,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InteractiveWindow", "src\In
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpEditorServicesTest", "src\EditorFeatures\CSharpTest\CSharpEditorServicesTest.csproj", "{AC2BCEFB-9298-4621-AC48-1FF5E639E48D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpEditorServicesTest2", "src\EditorFeatures\CSharpTest2\CSharpEditorServicesTest2.csproj", "{16
e93074-4252-466c-89a3-3b905abaf
779}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpEditorServicesTest2", "src\EditorFeatures\CSharpTest2\CSharpEditorServicesTest2.csproj", "{16
E93074-4252-466C-89A3-3B905ABAF
779}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EditorServicesTest", "src\EditorFeatures\Test\EditorServicesTest.csproj", "{8CEE3609-A5A9-4A9B-86D7-33118F5D6B33}"
EndProject
...
...
@@ -1436,26 +1436,26 @@ Global
{AC2BCEFB-9298-4621-AC48-1FF5E639E48D}.Release|x64.Build.0 = Release|Any CPU
{AC2BCEFB-9298-4621-AC48-1FF5E639E48D}.Release|x86.ActiveCfg = Release|Any CPU
{AC2BCEFB-9298-4621-AC48-1FF5E639E48D}.Release|x86.Build.0 = Release|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Debug|Any CPU.Build.0 = Debug|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Debug|ARM.ActiveCfg = Debug|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Debug|ARM.Build.0 = Debug|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Debug|x64.ActiveCfg = Debug|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Debug|x64.Build.0 = Debug|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Debug|x86.ActiveCfg = Debug|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Debug|x86.Build.0 = Debug|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Release|Any CPU.ActiveCfg = Release|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Release|Any CPU.Build.0 = Release|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Release|ARM.ActiveCfg = Release|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Release|ARM.Build.0 = Release|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Release|x64.ActiveCfg = Release|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Release|x64.Build.0 = Release|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Release|x86.ActiveCfg = Release|Any CPU
{16
e93074-4252-466c-89a3-3b905abaf
779}.Release|x86.Build.0 = Release|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Debug|Any CPU.Build.0 = Debug|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Debug|ARM.ActiveCfg = Debug|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Debug|ARM.Build.0 = Debug|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Debug|x64.ActiveCfg = Debug|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Debug|x64.Build.0 = Debug|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Debug|x86.ActiveCfg = Debug|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Debug|x86.Build.0 = Debug|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Release|Any CPU.ActiveCfg = Release|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Release|Any CPU.Build.0 = Release|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Release|ARM.ActiveCfg = Release|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Release|ARM.Build.0 = Release|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Release|x64.ActiveCfg = Release|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Release|x64.Build.0 = Release|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Release|x86.ActiveCfg = Release|Any CPU
{16
E93074-4252-466C-89A3-3B905ABAF
779}.Release|x86.Build.0 = Release|Any CPU
{8CEE3609-A5A9-4A9B-86D7-33118F5D6B33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8CEE3609-A5A9-4A9B-86D7-33118F5D6B33}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8CEE3609-A5A9-4A9B-86D7-33118F5D6B33}.Debug|ARM.ActiveCfg = Debug|Any CPU
...
...
@@ -2638,22 +2638,22 @@ Global
{ECBB1F28-2672-4344-8CB3-83882F291739}.Release|x86.Build.0 = Release|Any CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Debug|Any CPU.Build.0 = Debug|Any CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Debug|ARM.ActiveCfg = Debug|A
RM
{308CEBD4-418A-4C3B-97A5-24723B288157}.Debug|ARM.Build.0 = Debug|A
RM
{308CEBD4-418A-4C3B-97A5-24723B288157}.Debug|ARM.ActiveCfg = Debug|A
ny CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Debug|ARM.Build.0 = Debug|A
ny CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Debug|x64.ActiveCfg = Debug|
x64
{308CEBD4-418A-4C3B-97A5-24723B288157}.Debug|x64.Build.0 = Debug|
x64
{308CEBD4-418A-4C3B-97A5-24723B288157}.Debug|x64.ActiveCfg = Debug|
Any CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Debug|x64.Build.0 = Debug|
Any CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Debug|x86.ActiveCfg = Debug|Any CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Debug|x86.Build.0 = Debug|Any CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Release|Any CPU.ActiveCfg = Release|Any CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Release|Any CPU.Build.0 = Release|Any CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Release|ARM.ActiveCfg = Release|A
RM
{308CEBD4-418A-4C3B-97A5-24723B288157}.Release|ARM.Build.0 = Release|A
RM
{308CEBD4-418A-4C3B-97A5-24723B288157}.Release|ARM.ActiveCfg = Release|A
ny CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Release|ARM.Build.0 = Release|A
ny CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Release|x64.ActiveCfg = Release|
x64
{308CEBD4-418A-4C3B-97A5-24723B288157}.Release|x64.Build.0 = Release|
x64
{308CEBD4-418A-4C3B-97A5-24723B288157}.Release|x64.ActiveCfg = Release|
Any CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Release|x64.Build.0 = Release|
Any CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Release|x86.ActiveCfg = Release|Any CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Release|x86.Build.0 = Release|Any CPU
{0835A7FB-C472-4F7D-A500-F9FD072CFF21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
...
...
@@ -2779,7 +2779,7 @@ Global
{8E2A252E-A140-45A6-A81A-2652996EA589} = {2491A9B9-C0A8-49EE-9077-A32DE76E1E94}
{01E9BD68-0339-4A13-B42F-A3CA84D164F3} = {999FBDA2-33DA-4F74-B957-03AC72CCE5EC}
{AC2BCEFB-9298-4621-AC48-1FF5E639E48D} = {EE97CB90-33BB-4F3A-9B3D-69375DEC6AC6}
{16
e93074-4252-466c-89a3-3b905abaf
779} = {EE97CB90-33BB-4F3A-9B3D-69375DEC6AC6}
{16
E93074-4252-466C-89A3-3B905ABAF
779} = {EE97CB90-33BB-4F3A-9B3D-69375DEC6AC6}
{8CEE3609-A5A9-4A9B-86D7-33118F5D6B33} = {EE97CB90-33BB-4F3A-9B3D-69375DEC6AC6}
{3CEA0D69-00D3-40E5-A661-DC41EA07269B} = {EE97CB90-33BB-4F3A-9B3D-69375DEC6AC6}
{76C6F005-C89D-4348-BB4A-39189DDBEB52} = {EE97CB90-33BB-4F3A-9B3D-69375DEC6AC6}
...
...
src/Compilers/Core/CodeAnalysisTest/Diagnostics/SystemLanguageAnalyzer.cs
浏览文件 @
ee2eeed3
...
...
@@ -45,13 +45,13 @@ public sealed override void Initialize(AnalysisContext context)
if
(
containingMethod
!=
null
)
{
bool
inConstructor
=
containingMethod
.
MethodKind
==
MethodKind
.
Constructor
;
ITypeSymbol
inStaticConstructor
=
containingMethod
.
MethodKind
==
MethodKind
.
StaticConstructor
?
containingMethod
.
ContainingType
:
null
;
ITypeSymbol
staticConstructorType
=
containingMethod
.
MethodKind
==
MethodKind
.
StaticConstructor
?
containingMethod
.
ContainingType
:
null
;
operationBlockContext
.
RegisterOperationAction
(
(
operationContext
)
=>
{
IAssignmentExpression
assignment
=
(
IAssignmentExpression
)
operationContext
.
Operation
;
AssignTo
(
assignment
.
Target
,
inConstructor
,
inStaticConstructor
,
assignedToFields
,
mightBecomeReadOnlyFields
);
AssignTo
(
assignment
.
Target
,
inConstructor
,
staticConstructorType
,
assignedToFields
,
mightBecomeReadOnlyFields
);
},
OperationKind
.
AssignmentExpression
,
OperationKind
.
CompoundAssignmentExpression
);
...
...
@@ -64,7 +64,7 @@ public sealed override void Initialize(AnalysisContext context)
{
if
(
argument
.
Parameter
.
RefKind
==
RefKind
.
Out
||
argument
.
Parameter
.
RefKind
==
RefKind
.
Ref
)
{
AssignTo
(
argument
.
Value
,
inConstructor
,
inStaticConstructor
,
assignedToFields
,
mightBecomeReadOnlyFields
);
AssignTo
(
argument
.
Value
,
inConstructor
,
staticConstructorType
,
assignedToFields
,
mightBecomeReadOnlyFields
);
}
}
},
...
...
@@ -95,7 +95,7 @@ public sealed override void Initialize(AnalysisContext context)
});
}
static
void
AssignTo
(
IExpression
target
,
bool
inConstructor
,
ITypeSymbol
inStaticConstructor
,
HashSet
<
IFieldSymbol
>
assignedToFields
,
HashSet
<
IFieldSymbol
>
mightBecomeReadOnlyFields
)
static
void
AssignTo
(
IExpression
target
,
bool
inConstructor
,
ITypeSymbol
staticConstructorType
,
HashSet
<
IFieldSymbol
>
assignedToFields
,
HashSet
<
IFieldSymbol
>
mightBecomeReadOnlyFields
)
{
if
(
target
.
Kind
==
OperationKind
.
FieldReferenceExpression
)
{
...
...
@@ -113,7 +113,7 @@ static void AssignTo(IExpression target, bool inConstructor, ITypeSymbol inStati
IFieldSymbol
targetField
=
fieldReference
.
Field
;
if
(
inStaticConstructor
!=
null
&&
targetField
.
IsStatic
&&
targetField
.
ContainingType
==
inStaticConstructor
)
if
(
staticConstructorType
!=
null
&&
targetField
.
IsStatic
&&
targetField
.
ContainingType
==
staticConstructorType
)
{
return
;
}
...
...
src/Compilers/Core/Portable/DiagnosticAnalyzer/AnalyzerDriver.cs
浏览文件 @
ee2eeed3
...
...
@@ -1090,14 +1090,14 @@ private bool ShouldExecuteOperationActions(AnalysisScope analysisScope)
return
analysisScope
.
Analyzers
.
Any
(
analyzer
=>
this
.
OperationActionsByAnalyzerAndKind
.
ContainsKey
(
analyzer
));
}
private
bool
ShouldExecute
CodeBlockActions
(
AnalysisScope
analysisScope
,
ISymbol
symbol
)
private
bool
ShouldExecute
BlockActions
<
T0
,
T1
>(
ImmutableDictionary
<
DiagnosticAnalyzer
,
ImmutableArray
<
T0
>>
blockStartActions
,
ImmutableDictionary
<
DiagnosticAnalyzer
,
ImmutableArray
<
T1
>>
blockActions
,
AnalysisScope
analysisScope
,
ISymbol
symbol
)
{
if
(
AnalyzerExecutor
.
CanHaveExecutableCodeBlock
(
symbol
))
{
foreach
(
var
analyzer
in
analysisScope
.
Analyzers
)
{
if
(
this
.
CodeBlockStartActionsByAnalyzer
.
ContainsKey
(
analyzer
)
||
this
.
CodeBlockActionsByAnalyzer
.
ContainsKey
(
analyzer
))
if
(
blockStartActions
.
ContainsKey
(
analyzer
)
||
blockActions
.
ContainsKey
(
analyzer
))
{
return
true
;
}
...
...
@@ -1107,21 +1107,14 @@ private bool ShouldExecuteCodeBlockActions(AnalysisScope analysisScope, ISymbol
return
false
;
}
private
bool
ShouldExecute
Operation
BlockActions
(
AnalysisScope
analysisScope
,
ISymbol
symbol
)
private
bool
ShouldExecute
Code
BlockActions
(
AnalysisScope
analysisScope
,
ISymbol
symbol
)
{
if
(
AnalyzerExecutor
.
CanHaveExecutableCodeBlock
(
symbol
))
{
foreach
(
var
analyzer
in
analysisScope
.
Analyzers
)
{
if
(
this
.
OperationBlockStartActionsByAnalyzer
.
ContainsKey
(
analyzer
)
||
this
.
OperationBlockActionsByAnalyzer
.
ContainsKey
(
analyzer
))
{
return
true
;
}
}
}
return
ShouldExecuteBlockActions
(
this
.
CodeBlockStartActionsByAnalyzer
,
this
.
CodeBlockActionsByAnalyzer
,
analysisScope
,
symbol
);
}
return
false
;
private
bool
ShouldExecuteOperationBlockActions
(
AnalysisScope
analysisScope
,
ISymbol
symbol
)
{
return
ShouldExecuteBlockActions
(
this
.
OperationBlockStartActionsByAnalyzer
,
this
.
OperationBlockActionsByAnalyzer
,
analysisScope
,
symbol
);
}
protected
override
void
ExecuteDeclaringReferenceActions
(
...
...
@@ -1311,53 +1304,61 @@ private static void ComputeDeclarationsInNode(SemanticModel semanticModel, ISymb
{
// Compute the executable code blocks of interest.
var
executableCodeBlocks
=
ImmutableArray
<
SyntaxNode
>.
Empty
;
IEnumerable
<
CodeBlockAnalyzerActions
>
codeBlockActions
=
null
;
foreach
(
var
declInNode
in
declarationAnalysisData
.
DeclarationsInNode
)
{
if
(
declInNode
.
DeclaredNode
==
declarationAnalysisData
.
TopmostNodeForAnalysis
||
declInNode
.
DeclaredNode
==
declarationAnalysisData
.
DeclaringReferenceSyntax
)
{
executableCodeBlocks
=
declInNode
.
ExecutableCodeBlocks
;
// Execute operation actions.
if
((
shouldExecuteOperationActions
||
shouldExecuteOperationBlockActions
)
&&
executableCodeBlocks
.
Any
())
if
(
executableCodeBlocks
.
Any
())
{
var
operationBlocksToAnalyze
=
GetOperationBlocksToAnalyze
(
executableCodeBlocks
,
semanticModel
,
cancellationToken
);
var
operationsToAnalyze
=
GetOperationsToAnalyze
(
operationBlocksToAnalyze
);
if
(
shouldExecuteCodeBlockActions
||
shouldExecuteOperationBlockActions
)
{
codeBlockActions
=
GetCodeBlockActions
(
analysisScope
);
}
if
(!
operationsToAnalyze
.
IsEmpty
)
// Execute operation actions.
if
(
shouldExecuteOperationActions
||
shouldExecuteOperationBlockActions
)
{
if
(
shouldExecuteOperationActions
)
var
operationBlocksToAnalyze
=
GetOperationBlocksToAnalyze
(
executableCodeBlocks
,
semanticModel
,
cancellationToken
);
var
operationsToAnalyze
=
GetOperationsToAnalyze
(
operationBlocksToAnalyze
);
if
(!
operationsToAnalyze
.
IsEmpty
)
{
foreach
(
var
analyzer
in
analysisScope
.
Analyzer
s
)
if
(
shouldExecuteOperationAction
s
)
{
ImmutableDictionary
<
OperationKind
,
ImmutableArray
<
OperationAnalyzerAction
>>
operationActionsByKind
;
if
(
this
.
OperationActionsByAnalyzerAndKind
.
TryGetValue
(
analyzer
,
out
operationActionsByKind
))
foreach
(
var
analyzer
in
analysisScope
.
Analyzers
)
{
analyzerExecutor
.
ExecuteOperationActions
(
operationsToAnalyze
,
operationActionsByKind
,
analyzer
,
semanticModel
,
declarationAnalysisData
.
TopmostNodeForAnalysis
.
FullSpan
,
decl
,
analysisScope
,
analysisStateOpt
);
ImmutableDictionary
<
OperationKind
,
ImmutableArray
<
OperationAnalyzerAction
>>
operationActionsByKind
;
if
(
this
.
OperationActionsByAnalyzerAndKind
.
TryGetValue
(
analyzer
,
out
operationActionsByKind
))
{
analyzerExecutor
.
ExecuteOperationActions
(
operationsToAnalyze
,
operationActionsByKind
,
analyzer
,
semanticModel
,
declarationAnalysisData
.
TopmostNodeForAnalysis
.
FullSpan
,
decl
,
analysisScope
,
analysisStateOpt
);
}
}
}
}
if
(
shouldExecuteOperationBlockActions
)
{
foreach
(
var
analyzerActions
in
GetCodeBlockActions
(
analysisScope
))
if
(
shouldExecuteOperationBlockActions
)
{
analyzerExecutor
.
ExecuteOperationBlockActions
(
analyzerActions
.
OperationBlockStartActions
,
analyzerActions
.
OperationBlockActions
,
analyzerActions
.
OpererationBlockEndActions
,
analyzerActions
.
Analyzer
,
declarationAnalysisData
.
TopmostNodeForAnalysis
,
symbol
,
operationBlocksToAnalyze
,
operationsToAnalyze
,
semanticModel
,
decl
,
analysisScope
,
analysisStateOpt
);
foreach
(
var
analyzerActions
in
codeBlockActions
)
{
analyzerExecutor
.
ExecuteOperationBlockActions
(
analyzerActions
.
OperationBlockStartActions
,
analyzerActions
.
OperationBlockActions
,
analyzerActions
.
OpererationBlockEndActions
,
analyzerActions
.
Analyzer
,
declarationAnalysisData
.
TopmostNodeForAnalysis
,
symbol
,
operationBlocksToAnalyze
,
operationsToAnalyze
,
semanticModel
,
decl
,
analysisScope
,
analysisStateOpt
);
}
}
}
}
}
break
;
break
;
}
}
}
if
(
executableCodeBlocks
.
Any
()
&&
shouldExecuteCodeBlockActions
)
{
foreach
(
var
analyzerActions
in
GetCodeBlockActions
(
analysisScope
)
)
foreach
(
var
analyzerActions
in
codeBlockActions
)
{
analyzerExecutor
.
ExecuteCodeBlockActions
(
analyzerActions
.
CodeBlockStartActions
,
analyzerActions
.
CodeBlockActions
,
...
...
@@ -1393,7 +1394,7 @@ private struct CodeBlockAnalyzerActions
public
ImmutableArray
<
OperationBlockAnalyzerAction
>
OperationBlockActions
;
public
ImmutableArray
<
OperationBlockAnalyzerAction
>
OpererationBlockEndActions
;
}
private
IEnumerable
<
CodeBlockAnalyzerActions
>
GetCodeBlockActions
(
AnalysisScope
analysisScope
)
{
foreach
(
var
analyzer
in
analysisScope
.
Analyzers
)
...
...
src/Compilers/Core/Portable/DiagnosticAnalyzer/AnalyzerExecutor.cs
浏览文件 @
ee2eeed3
...
...
@@ -454,7 +454,7 @@ private void ExecuteCompilationActionsCore(ImmutableArray<CompilationAnalyzerAct
analyzerStateOpt
?.
ProcessedActions
.
Add
(
operationAction
);
}
}
public
void
ExecuteCodeBlockActions
<
TLanguageKindEnum
>(
IEnumerable
<
CodeBlockStartAnalyzerAction
<
TLanguageKindEnum
>>
codeBlockStartActions
,
IEnumerable
<
CodeBlockAnalyzerAction
>
codeBlockActions
,
...
...
@@ -591,7 +591,6 @@ private void ExecuteCompilationActionsCore(ImmutableArray<CompilationAnalyzerAct
syntaxNodeActions
.
AddRange
(
codeBlockScope
.
SyntaxNodeActions
);
});
}
else
{
var
operationBlockStartAction
=
startAction
as
OperationBlockStartAnalyzerAction
;
...
...
@@ -666,22 +665,18 @@ private void ExecuteCompilationActionsCore(ImmutableArray<CompilationAnalyzerAct
Func
<
Diagnostic
,
bool
>
isSupportedDiagnostic
=
d
=>
IsSupportedDiagnostic
(
blockAction
.
Analyzer
,
d
);
if
(
codeBlockAction
!=
null
)
{
ExecuteAndCatchIfThrows
(
codeBlockAction
.
Analyzer
,
()
=>
{
codeBlockAction
.
Action
(
new
CodeBlockAnalysisContext
(
declaredNode
,
declaredSymbol
,
semanticModel
,
_analyzerOptions
,
addDiagnostic
,
isSupportedDiagnostic
,
_cancellationToken
));
});
ExecuteAndCatchIfThrows
(
codeBlockAction
.
Analyzer
,
()
=>
codeBlockAction
.
Action
(
new
CodeBlockAnalysisContext
(
declaredNode
,
declaredSymbol
,
semanticModel
,
_analyzerOptions
,
addDiagnostic
,
isSupportedDiagnostic
,
_cancellationToken
)));
}
else
{
var
operationBlockAction
=
blockAction
as
OperationBlockAnalyzerAction
;
if
(
operationBlockAction
!=
null
)
{
ExecuteAndCatchIfThrows
(
operationBlockAction
.
Analyzer
,
()
=>
{
operationBlockAction
.
Action
(
new
OperationBlockAnalysisContext
(
operationBlocks
,
declaredSymbol
,
_analyzerOptions
,
addDiagnostic
,
isSupportedDiagnostic
,
_cancellationToken
));
});
ExecuteAndCatchIfThrows
(
operationBlockAction
.
Analyzer
,
()
=>
operationBlockAction
.
Action
(
new
OperationBlockAnalysisContext
(
operationBlocks
,
declaredSymbol
,
_analyzerOptions
,
addDiagnostic
,
isSupportedDiagnostic
,
_cancellationToken
)));
}
}
...
...
@@ -691,7 +686,7 @@ private void ExecuteCompilationActionsCore(ImmutableArray<CompilationAnalyzerAct
blockActions
.
Free
();
}
internal
static
ImmutableDictionary
<
TLanguageKindEnum
,
ImmutableArray
<
SyntaxNodeAnalyzerAction
<
TLanguageKindEnum
>>>
GetNodeActionsByKind
<
TLanguageKindEnum
>(
IEnumerable
<
SyntaxNodeAnalyzerAction
<
TLanguageKindEnum
>>
nodeActions
)
where
TLanguageKindEnum
:
struct
...
...
src/Compilers/Core/Portable/DiagnosticAnalyzer/DiagnosticAnalysisContext.cs
浏览文件 @
ee2eeed3
...
...
@@ -712,7 +712,7 @@ public struct OperationBlockAnalysisContext
/// <summary>
/// Code block that is the subject of the analysis.
/// </summary>
public
ImmutableArray
<
IOperation
>
CodeBlock
=>
_operationBlocks
;
public
ImmutableArray
<
IOperation
>
OperationBlocks
=>
_operationBlocks
;
/// <summary>
/// <see cref="ISymbol"/> for which the code block provides a definition or value.
...
...
src/Compilers/Core/Portable/PublicAPI.Unshipped.txt
浏览文件 @
ee2eeed3
...
...
@@ -80,12 +80,7 @@ Microsoft.CodeAnalysis.Diagnostics.AnalysisContext.RegisterOperationAction(Syste
Microsoft.CodeAnalysis.Diagnostics.CompilationStartAnalysisContext.RegisterOperationAction(System.Action<Microsoft.CodeAnalysis.Diagnostics.OperationAnalysisContext> action, params Microsoft.CodeAnalysis.Semantics.OperationKind[] operationKinds) -> void
abstract Microsoft.CodeAnalysis.Diagnostics.AnalysisContext.RegisterOperationAction(System.Action<Microsoft.CodeAnalysis.Diagnostics.OperationAnalysisContext> action, System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.Semantics.OperationKind> operationKinds) -> void
abstract Microsoft.CodeAnalysis.Diagnostics.CompilationStartAnalysisContext.RegisterOperationAction(System.Action<Microsoft.CodeAnalysis.Diagnostics.OperationAnalysisContext> action, System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.Semantics.OperationKind> operationKinds) -> void
Microsoft.CodeAnalysis.Diagnostics.OperationAnalysisContext
Microsoft.CodeAnalysis.Diagnostics.OperationAnalysisContext.Options.get -> Microsoft.CodeAnalysis.Diagnostics.AnalyzerOptions
Microsoft.CodeAnalysis.Diagnostics.OperationAnalysisContext.CancellationToken.get -> System.Threading.CancellationToken
Microsoft.CodeAnalysis.Diagnostics.OperationAnalysisContext.ReportDiagnostic(Microsoft.CodeAnalysis.Diagnostic diagnostic) -> void
Microsoft.CodeAnalysis.Diagnostics.OperationAnalysisContext.Operation.get -> Microsoft.CodeAnalysis.Semantics.IOperation
Microsoft.CodeAnalysis.Diagnostics.OperationAnalysisContext.OperationAnalysisContext(Microsoft.CodeAnalysis.Semantics.IOperation operation, Microsoft.CodeAnalysis.Diagnostics.AnalyzerOptions options, System.Action<Microsoft.CodeAnalysis.Diagnostic> reportDiagnostic, System.Func<Microsoft.CodeAnalysis.Diagnostic, bool> isSupportedDiagnostic, System.Threading.CancellationToken cancellationToken) -> void
abstract Microsoft.CodeAnalysis.Diagnostics.CompilationStartAnalysisContext.RegisterOperationBlockStartAction(System.Action<Microsoft.CodeAnalysis.Diagnostics.OperationBlockStartAnalysisContext> action) -> void
Microsoft.CodeAnalysis.Semantics.IOperation
Microsoft.CodeAnalysis.Semantics.IOperation.Kind.get -> Microsoft.CodeAnalysis.Semantics.OperationKind
Microsoft.CodeAnalysis.Semantics.IOperation.Syntax.get -> Microsoft.CodeAnalysis.SyntaxNode
...
...
@@ -636,18 +631,19 @@ Microsoft.CodeAnalysis.Semantics.OperationKind.ConditionalAccessExpression = 60
Microsoft.CodeAnalysis.Semantics.OperationKind.IncrementExpression = 61 -> Microsoft.CodeAnalysis.Semantics.OperationKind
Microsoft.CodeAnalysis.Diagnostics.OperationBlockAnalysisContext
Microsoft.CodeAnalysis.Diagnostics.OperationBlockAnalysisContext.CancellationToken.get -> System.Threading.CancellationToken
Microsoft.CodeAnalysis.Diagnostics.OperationBlockAnalysisContext.OperationBlock
.get -> Microsoft.CodeAnalysis.Semantics.IOperation
Microsoft.CodeAnalysis.Diagnostics.OperationBlockAnalysisContext.OperationBlockAnalysisContext(
Microsoft.CodeAnalysis.Semantics.IOperation operationBlock
, Microsoft.CodeAnalysis.ISymbol owningSymbol, Microsoft.CodeAnalysis.Diagnostics.AnalyzerOptions options, System.Action<Microsoft.CodeAnalysis.Diagnostic> reportDiagnostic, System.Func<Microsoft.CodeAnalysis.Diagnostic, bool> isSupportedDiagnostic, System.Threading.CancellationToken cancellationToken) -> void
Microsoft.CodeAnalysis.Diagnostics.OperationBlockAnalysisContext.OperationBlock
s.get -> System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.Semantics.IOperation>
Microsoft.CodeAnalysis.Diagnostics.OperationBlockAnalysisContext.OperationBlockAnalysisContext(
System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.Semantics.IOperation> operationBlocks
, Microsoft.CodeAnalysis.ISymbol owningSymbol, Microsoft.CodeAnalysis.Diagnostics.AnalyzerOptions options, System.Action<Microsoft.CodeAnalysis.Diagnostic> reportDiagnostic, System.Func<Microsoft.CodeAnalysis.Diagnostic, bool> isSupportedDiagnostic, System.Threading.CancellationToken cancellationToken) -> void
Microsoft.CodeAnalysis.Diagnostics.OperationBlockAnalysisContext.Options.get -> Microsoft.CodeAnalysis.Diagnostics.AnalyzerOptions
Microsoft.CodeAnalysis.Diagnostics.OperationBlockAnalysisContext.OwningSymbol.get -> Microsoft.CodeAnalysis.ISymbol
Microsoft.CodeAnalysis.Diagnostics.OperationBlockAnalysisContext.ReportDiagnostic(Microsoft.CodeAnalysis.Diagnostic diagnostic) -> void
Microsoft.CodeAnalysis.Diagnostics.OperationBlockStartAnalysisContext
Microsoft.CodeAnalysis.Diagnostics.OperationBlockStartAnalysisContext.CancellationToken.get -> System.Threading.CancellationToken
Microsoft.CodeAnalysis.Diagnostics.OperationBlockStartAnalysisContext.OperationBlock
.get -> Microsoft.CodeAnalysis.Semantics.IOperation
Microsoft.CodeAnalysis.Diagnostics.OperationBlockStartAnalysisContext.OperationBlockStartAnalysisContext(
Microsoft.CodeAnalysis.Semantics.IOperation operationBlock
, Microsoft.CodeAnalysis.ISymbol owningSymbol, Microsoft.CodeAnalysis.Diagnostics.AnalyzerOptions options, System.Threading.CancellationToken cancellationToken) -> void
Microsoft.CodeAnalysis.Diagnostics.OperationBlockStartAnalysisContext.OperationBlock
s.get -> System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.Semantics.IOperation>
Microsoft.CodeAnalysis.Diagnostics.OperationBlockStartAnalysisContext.OperationBlockStartAnalysisContext(
System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.Semantics.IOperation> operationBlocks
, Microsoft.CodeAnalysis.ISymbol owningSymbol, Microsoft.CodeAnalysis.Diagnostics.AnalyzerOptions options, System.Threading.CancellationToken cancellationToken) -> void
Microsoft.CodeAnalysis.Diagnostics.OperationBlockStartAnalysisContext.Options.get -> Microsoft.CodeAnalysis.Diagnostics.AnalyzerOptions
Microsoft.CodeAnalysis.Diagnostics.OperationBlockStartAnalysisContext.OwningSymbol.get -> Microsoft.CodeAnalysis.ISymbol
abstract Microsoft.CodeAnalysis.Diagnostics.OperationBlockStartAnalysisContext.RegisterOperationAction(System.Action<Microsoft.CodeAnalysis.Diagnostics.OperationAnalysisContext> action, params Microsoft.CodeAnalysis.Semantics.OperationKind[] operationKinds) -> void
Microsoft.CodeAnalysis.Diagnostics.OperationBlockStartAnalysisContext.RegisterOperationAction(System.Action<Microsoft.CodeAnalysis.Diagnostics.OperationAnalysisContext> action, params Microsoft.CodeAnalysis.Semantics.OperationKind[] operationKinds) -> void
abstract Microsoft.CodeAnalysis.Diagnostics.OperationBlockStartAnalysisContext.RegisterOperationAction(System.Action<Microsoft.CodeAnalysis.Diagnostics.OperationAnalysisContext> action, System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.Semantics.OperationKind> operationKinds) -> void
abstract Microsoft.CodeAnalysis.Diagnostics.OperationBlockStartAnalysisContext.RegisterOperationBlockEndAction(System.Action<Microsoft.CodeAnalysis.Diagnostics.OperationBlockAnalysisContext> action) -> void
Microsoft.CodeAnalysis.Diagnostics.OperationAnalysisContext
Microsoft.CodeAnalysis.Diagnostics.OperationAnalysisContext.CancellationToken.get -> System.Threading.CancellationToken
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录