提交 ee2eeed3 编写于 作者: J John Hamby

Respond to review feedback.

上级 d9429233
......@@ -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", "{16e93074-4252-466c-89a3-3b905abaf779}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpEditorServicesTest2", "src\EditorFeatures\CSharpTest2\CSharpEditorServicesTest2.csproj", "{16E93074-4252-466C-89A3-3B905ABAF779}"
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
{16e93074-4252-466c-89a3-3b905abaf779}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{16e93074-4252-466c-89a3-3b905abaf779}.Debug|Any CPU.Build.0 = Debug|Any CPU
{16e93074-4252-466c-89a3-3b905abaf779}.Debug|ARM.ActiveCfg = Debug|Any CPU
{16e93074-4252-466c-89a3-3b905abaf779}.Debug|ARM.Build.0 = Debug|Any CPU
{16e93074-4252-466c-89a3-3b905abaf779}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{16e93074-4252-466c-89a3-3b905abaf779}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{16e93074-4252-466c-89a3-3b905abaf779}.Debug|x64.ActiveCfg = Debug|Any CPU
{16e93074-4252-466c-89a3-3b905abaf779}.Debug|x64.Build.0 = Debug|Any CPU
{16e93074-4252-466c-89a3-3b905abaf779}.Debug|x86.ActiveCfg = Debug|Any CPU
{16e93074-4252-466c-89a3-3b905abaf779}.Debug|x86.Build.0 = Debug|Any CPU
{16e93074-4252-466c-89a3-3b905abaf779}.Release|Any CPU.ActiveCfg = Release|Any CPU
{16e93074-4252-466c-89a3-3b905abaf779}.Release|Any CPU.Build.0 = Release|Any CPU
{16e93074-4252-466c-89a3-3b905abaf779}.Release|ARM.ActiveCfg = Release|Any CPU
{16e93074-4252-466c-89a3-3b905abaf779}.Release|ARM.Build.0 = Release|Any CPU
{16e93074-4252-466c-89a3-3b905abaf779}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{16e93074-4252-466c-89a3-3b905abaf779}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{16e93074-4252-466c-89a3-3b905abaf779}.Release|x64.ActiveCfg = Release|Any CPU
{16e93074-4252-466c-89a3-3b905abaf779}.Release|x64.Build.0 = Release|Any CPU
{16e93074-4252-466c-89a3-3b905abaf779}.Release|x86.ActiveCfg = Release|Any CPU
{16e93074-4252-466c-89a3-3b905abaf779}.Release|x86.Build.0 = Release|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.Debug|Any CPU.Build.0 = Debug|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.Debug|ARM.ActiveCfg = Debug|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.Debug|ARM.Build.0 = Debug|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.Debug|x64.ActiveCfg = Debug|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.Debug|x64.Build.0 = Debug|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.Debug|x86.ActiveCfg = Debug|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.Debug|x86.Build.0 = Debug|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.Release|Any CPU.ActiveCfg = Release|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.Release|Any CPU.Build.0 = Release|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.Release|ARM.ActiveCfg = Release|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.Release|ARM.Build.0 = Release|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.Release|x64.ActiveCfg = Release|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.Release|x64.Build.0 = Release|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.Release|x86.ActiveCfg = Release|Any CPU
{16E93074-4252-466C-89A3-3B905ABAF779}.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|ARM
{308CEBD4-418A-4C3B-97A5-24723B288157}.Debug|ARM.Build.0 = Debug|ARM
{308CEBD4-418A-4C3B-97A5-24723B288157}.Debug|ARM.ActiveCfg = Debug|Any CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Debug|ARM.Build.0 = Debug|Any 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|ARM
{308CEBD4-418A-4C3B-97A5-24723B288157}.Release|ARM.Build.0 = Release|ARM
{308CEBD4-418A-4C3B-97A5-24723B288157}.Release|ARM.ActiveCfg = Release|Any CPU
{308CEBD4-418A-4C3B-97A5-24723B288157}.Release|ARM.Build.0 = Release|Any 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}
{16e93074-4252-466c-89a3-3b905abaf779} = {EE97CB90-33BB-4F3A-9B3D-69375DEC6AC6}
{16E93074-4252-466C-89A3-3B905ABAF779} = {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}
......
......@@ -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;
}
......
......@@ -1090,14 +1090,14 @@ private bool ShouldExecuteOperationActions(AnalysisScope analysisScope)
return analysisScope.Analyzers.Any(analyzer => this.OperationActionsByAnalyzerAndKind.ContainsKey(analyzer));
}
private bool ShouldExecuteCodeBlockActions(AnalysisScope analysisScope, ISymbol symbol)
private bool ShouldExecuteBlockActions<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 ShouldExecuteOperationBlockActions(AnalysisScope analysisScope, ISymbol symbol)
private bool ShouldExecuteCodeBlockActions(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.Analyzers)
if (shouldExecuteOperationActions)
{
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)
......
......@@ -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
......
......@@ -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.
......
......@@ -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.OperationBlocks.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.OperationBlocks.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.
先完成此消息的编辑!
想要评论请 注册