提交 6c322ae6 编写于 作者: C CyrusNajmabadi

Switch to using a string instead of a full diagnostic.

上级 26d9b997
......@@ -174,11 +174,11 @@ protected override bool CanAddImport(SyntaxNode node, CancellationToken cancella
}
protected override bool CanAddImportForMethod(
Diagnostic diagnostic, ISyntaxFactsService syntaxFacts, SyntaxNode node, out SimpleNameSyntax nameNode)
string diagnosticId, ISyntaxFactsService syntaxFacts, SyntaxNode node, out SimpleNameSyntax nameNode)
{
nameNode = null;
switch (diagnostic.Id)
switch (diagnosticId)
{
case CS7036:
case CS0428:
......@@ -264,18 +264,18 @@ protected override bool CanAddImport(SyntaxNode node, CancellationToken cancella
return true;
}
protected override bool CanAddImportForDeconstruct(Diagnostic diagnostic, SyntaxNode node)
=> diagnostic.Id == CS8129;
protected override bool CanAddImportForDeconstruct(string diagnosticId, SyntaxNode node)
=> diagnosticId == CS8129;
protected override bool CanAddImportForNamespace(Diagnostic diagnostic, SyntaxNode node, out SimpleNameSyntax nameNode)
protected override bool CanAddImportForNamespace(string diagnosticId, SyntaxNode node, out SimpleNameSyntax nameNode)
{
nameNode = null;
return false;
}
protected override bool CanAddImportForQuery(Diagnostic diagnostic, SyntaxNode node)
protected override bool CanAddImportForQuery(string diagnosticId, SyntaxNode node)
{
if (diagnostic.Id != CS1935)
if (diagnosticId != CS1935)
{
return false;
}
......@@ -283,10 +283,10 @@ protected override bool CanAddImportForQuery(Diagnostic diagnostic, SyntaxNode n
return node.AncestorsAndSelf().Any(n => n is QueryExpressionSyntax && !(n.Parent is QueryContinuationSyntax));
}
protected override bool CanAddImportForType(Diagnostic diagnostic, SyntaxNode node, out SimpleNameSyntax nameNode)
protected override bool CanAddImportForType(string diagnosticId, SyntaxNode node, out SimpleNameSyntax nameNode)
{
nameNode = null;
switch (diagnostic.Id)
switch (diagnosticId)
{
case CS0103:
case CS0246:
......
......@@ -41,11 +41,11 @@ internal abstract partial class AbstractAddImportCodeFixProvider<TSimpleNameSynt
}
protected abstract bool CanAddImport(SyntaxNode node, CancellationToken cancellationToken);
protected abstract bool CanAddImportForMethod(Diagnostic diagnostic, ISyntaxFactsService syntaxFacts, SyntaxNode node, out TSimpleNameSyntax nameNode);
protected abstract bool CanAddImportForNamespace(Diagnostic diagnostic, SyntaxNode node, out TSimpleNameSyntax nameNode);
protected abstract bool CanAddImportForDeconstruct(Diagnostic diagnostic, SyntaxNode node);
protected abstract bool CanAddImportForQuery(Diagnostic diagnostic, SyntaxNode node);
protected abstract bool CanAddImportForType(Diagnostic diagnostic, SyntaxNode node, out TSimpleNameSyntax nameNode);
protected abstract bool CanAddImportForMethod(string diagnosticId, ISyntaxFactsService syntaxFacts, SyntaxNode node, out TSimpleNameSyntax nameNode);
protected abstract bool CanAddImportForNamespace(string diagnosticId, SyntaxNode node, out TSimpleNameSyntax nameNode);
protected abstract bool CanAddImportForDeconstruct(string diagnosticId, SyntaxNode node);
protected abstract bool CanAddImportForQuery(string diagnosticId, SyntaxNode node);
protected abstract bool CanAddImportForType(string diagnosticId, SyntaxNode node, out TSimpleNameSyntax nameNode);
protected abstract ISet<INamespaceSymbol> GetImportNamespacesInScope(SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken);
protected abstract ITypeSymbol GetDeconstructInfo(SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken);
......@@ -99,7 +99,7 @@ private async Task<int> HandleDiagnosticAsync(CodeFixContext context, Diagnostic
if (this.CanAddImport(node, cancellationToken))
{
var semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false);
var allSymbolReferences = await FindResultsAsync(document, semanticModel, diagnostic, node, cancellationToken).ConfigureAwait(false);
var allSymbolReferences = await FindResultsAsync(document, semanticModel, diagnostic.Id, node, cancellationToken).ConfigureAwait(false);
// Nothing found at all. No need to proceed.
foreach (var reference in allSymbolReferences)
......@@ -150,7 +150,7 @@ private IPackageInstallerService GetPackageInstallerService(Document document)
}
private async Task<ImmutableArray<Reference>> FindResultsAsync(
Document document, SemanticModel semanticModel, Diagnostic diagnostic, SyntaxNode node, CancellationToken cancellationToken)
Document document, SemanticModel semanticModel, string diagnosticId, SyntaxNode node, CancellationToken cancellationToken)
{
// Caches so we don't produce the same data multiple times while searching
// all over the solution.
......@@ -158,7 +158,7 @@ private IPackageInstallerService GetPackageInstallerService(Document document)
var projectToAssembly = new ConcurrentDictionary<Project, AsyncLazy<IAssemblySymbol>>(concurrencyLevel: 2, capacity: project.Solution.ProjectIds.Count);
var referenceToCompilation = new ConcurrentDictionary<PortableExecutableReference, Compilation>(concurrencyLevel: 2, capacity: project.Solution.Projects.Sum(p => p.MetadataReferences.Count));
var finder = new SymbolReferenceFinder(this, document, semanticModel, diagnostic, node, cancellationToken);
var finder = new SymbolReferenceFinder(this, document, semanticModel, diagnosticId, node, cancellationToken);
// Look for exact matches first:
var exactReferences = await FindResultsAsync(projectToAssembly, referenceToCompilation, project, finder, exact: true, cancellationToken: cancellationToken).ConfigureAwait(false);
......
......@@ -20,7 +20,7 @@ private partial class SymbolReferenceFinder
{
private const string AttributeSuffix = nameof(Attribute);
private readonly Diagnostic _diagnostic;
private readonly string _diagnosticId;
private readonly Document _document;
private readonly SemanticModel _semanticModel;
......@@ -35,13 +35,13 @@ private partial class SymbolReferenceFinder
public SymbolReferenceFinder(
AbstractAddImportCodeFixProvider<TSimpleNameSyntax> owner,
Document document, SemanticModel semanticModel,
Diagnostic diagnostic, SyntaxNode node,
string diagnosticId, SyntaxNode node,
CancellationToken cancellationToken)
{
_owner = owner;
_document = document;
_semanticModel = semanticModel;
_diagnostic = diagnostic;
_diagnosticId = diagnosticId;
_node = node;
_containingType = semanticModel.GetEnclosingNamedType(node.SpanStart, cancellationToken);
......@@ -155,7 +155,7 @@ private ImmutableArray<SymbolReference> DeDupeAndSortReferences(ImmutableArray<S
private async Task<ImmutableArray<SymbolReference>> GetReferencesForMatchingTypesAsync(SearchScope searchScope)
{
searchScope.CancellationToken.ThrowIfCancellationRequested();
if (!_owner.CanAddImportForType(_diagnostic, _node, out var nameNode))
if (!_owner.CanAddImportForType(_diagnosticId, _node, out var nameNode))
{
return ImmutableArray<SymbolReference>.Empty;
}
......@@ -223,7 +223,7 @@ private async Task<ImmutableArray<SymbolReference>> GetReferencesForMatchingType
SearchScope searchScope)
{
searchScope.CancellationToken.ThrowIfCancellationRequested();
if (_owner.CanAddImportForNamespace(_diagnostic, _node, out var nameNode))
if (_owner.CanAddImportForNamespace(_diagnosticId, _node, out var nameNode))
{
_syntaxFacts.GetNameAndArityOfSimpleName(nameNode, out var name, out var arity);
......@@ -250,7 +250,7 @@ private async Task<ImmutableArray<SymbolReference>> GetReferencesForMatchingType
SearchScope searchScope)
{
searchScope.CancellationToken.ThrowIfCancellationRequested();
if (_owner.CanAddImportForMethod(_diagnostic, _syntaxFacts, _node, out var nameNode) &&
if (_owner.CanAddImportForMethod(_diagnosticId, _syntaxFacts, _node, out var nameNode) &&
nameNode != null)
{
// We have code like "Color.Black". "Color" bound to a 'Color Color' property, and
......@@ -310,7 +310,7 @@ private bool HasAccessibleStaticFieldOrProperty(INamedTypeSymbol namedType, stri
private async Task<ImmutableArray<SymbolReference>> GetReferencesForMatchingExtensionMethodsAsync(SearchScope searchScope)
{
searchScope.CancellationToken.ThrowIfCancellationRequested();
if (_owner.CanAddImportForMethod(_diagnostic, _syntaxFacts, _node, out var nameNode) &&
if (_owner.CanAddImportForMethod(_diagnosticId, _syntaxFacts, _node, out var nameNode) &&
nameNode != null)
{
searchScope.CancellationToken.ThrowIfCancellationRequested();
......@@ -368,7 +368,7 @@ private async Task<ImmutableArray<SymbolReference>> GetReferencesForMatchingExte
private async Task<ImmutableArray<SymbolReference>> GetReferencesForCollectionInitializerMethodsAsync(SearchScope searchScope)
{
searchScope.CancellationToken.ThrowIfCancellationRequested();
if (!_owner.CanAddImportForMethod(_diagnostic, _syntaxFacts, _node, out var nameNode))
if (!_owner.CanAddImportForMethod(_diagnosticId, _syntaxFacts, _node, out var nameNode))
{
return ImmutableArray<SymbolReference>.Empty;
}
......@@ -403,7 +403,7 @@ private async Task<ImmutableArray<SymbolReference>> GetReferencesForQueryPattern
{
searchScope.CancellationToken.ThrowIfCancellationRequested();
if (_owner.CanAddImportForQuery(_diagnostic, _node))
if (_owner.CanAddImportForQuery(_diagnosticId, _node))
{
var type = _owner.GetQueryClauseInfo(_semanticModel, _node, searchScope.CancellationToken);
if (type != null)
......@@ -426,7 +426,7 @@ private async Task<ImmutableArray<SymbolReference>> GetReferencesForDeconstructA
{
searchScope.CancellationToken.ThrowIfCancellationRequested();
if (_owner.CanAddImportForDeconstruct(_diagnostic, _node))
if (_owner.CanAddImportForDeconstruct(_diagnosticId, _node))
{
var type = _owner.GetDeconstructInfo(_semanticModel, _node, searchScope.CancellationToken);
if (type != null)
......
......@@ -23,7 +23,7 @@ private partial class SymbolReferenceFinder
return;
}
if (!_owner.CanAddImportForType(_diagnostic, _node, out var nameNode))
if (!_owner.CanAddImportForType(_diagnosticId, _node, out var nameNode))
{
return;
}
......
......@@ -120,11 +120,11 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.AddImport
End Function
Protected Overrides Function CanAddImportForMethod(
diagnostic As Diagnostic,
diagnosticId As String,
syntaxFacts As ISyntaxFactsService,
node As SyntaxNode,
ByRef nameNode As SimpleNameSyntax) As Boolean
Select Case diagnostic.Id
Select Case diagnosticId
Case BC30456, BC30390, BC42309, BC30451
Exit Select
Case BC30512
......@@ -177,8 +177,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.AddImport
Return True
End Function
Protected Overrides Function CanAddImportForNamespace(diagnostic As Diagnostic, node As SyntaxNode, ByRef nameNode As SimpleNameSyntax) As Boolean
Select Case diagnostic.Id
Protected Overrides Function CanAddImportForNamespace(diagnosticId As String, node As SyntaxNode, ByRef nameNode As SimpleNameSyntax) As Boolean
Select Case diagnosticId
Case BC30002, BC30451
Exit Select
Case Else
......@@ -188,13 +188,13 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.AddImport
Return CanAddImportForTypeOrNamespaceCore(node, nameNode)
End Function
Protected Overrides Function CanAddImportForDeconstruct(diagnostic As Diagnostic, node As SyntaxNode) As Boolean
Protected Overrides Function CanAddImportForDeconstruct(diagnosticId As String, node As SyntaxNode) As Boolean
' Not supported yet.
Return False
End Function
Protected Overrides Function CanAddImportForQuery(diagnostic As Diagnostic, node As SyntaxNode) As Boolean
If diagnostic.Id <> BC36593 Then
Protected Overrides Function CanAddImportForQuery(diagnosticId As String, node As SyntaxNode) As Boolean
If diagnosticId <> BC36593 Then
Return False
End If
......@@ -208,8 +208,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.AddImport
End Function
Protected Overrides Function CanAddImportForType(
diagnostic As Diagnostic, node As SyntaxNode, ByRef nameNode As SimpleNameSyntax) As Boolean
Select Case diagnostic.Id
diagnosticId As String, node As SyntaxNode, ByRef nameNode As SimpleNameSyntax) As Boolean
Select Case diagnosticId
Case BC30002, BC30451, BC32042, BC32045, BC30389, BC31504, BC36610, BC30182
Exit Select
Case BC42309
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册