From 6539523e4d99fe302cdd6b522487f6ae95cda35c Mon Sep 17 00:00:00 2001 From: tpodolak Date: Sat, 10 Oct 2020 22:34:40 +0200 Subject: [PATCH] [GH-153] - removing indexer specific code from CallInfoAnalyzers --- .../DiagnosticAnalyzers/AbstractCallInfoAnalyzer.cs | 9 ++++++++- .../DiagnosticAnalyzers/CallInfoContext.cs | 12 ++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/NSubstitute.Analyzers.Shared/DiagnosticAnalyzers/AbstractCallInfoAnalyzer.cs b/src/NSubstitute.Analyzers.Shared/DiagnosticAnalyzers/AbstractCallInfoAnalyzer.cs index 97ba1921..62525242 100644 --- a/src/NSubstitute.Analyzers.Shared/DiagnosticAnalyzers/AbstractCallInfoAnalyzer.cs +++ b/src/NSubstitute.Analyzers.Shared/DiagnosticAnalyzers/AbstractCallInfoAnalyzer.cs @@ -334,7 +334,14 @@ private IReadOnlyList GetSubstituteCallArgumentOperations( private IndexerInfo GetIndexerInfo(SyntaxNodeAnalysisContext syntaxNodeAnalysisContext, TIndexerExpressionSyntax indexerExpressionSyntax) { - var info = GetIndexerSymbol(syntaxNodeAnalysisContext, indexerExpressionSyntax); + var operation = syntaxNodeAnalysisContext.SemanticModel.GetOperation(indexerExpressionSyntax); + ISymbol info = operation switch + { + IInvocationOperation inv => inv.TargetMethod, + IArrayElementReferenceOperation x => x.Type, + _ => null + }; + var symbol = info as IMethodSymbol; var verifyIndexerCast = symbol == null || symbol.Name != MetadataNames.CallInfoArgTypesMethod; var verifyAssignment = symbol == null; diff --git a/src/NSubstitute.Analyzers.Shared/DiagnosticAnalyzers/CallInfoContext.cs b/src/NSubstitute.Analyzers.Shared/DiagnosticAnalyzers/CallInfoContext.cs index 1d9b9751..17b0ba35 100644 --- a/src/NSubstitute.Analyzers.Shared/DiagnosticAnalyzers/CallInfoContext.cs +++ b/src/NSubstitute.Analyzers.Shared/DiagnosticAnalyzers/CallInfoContext.cs @@ -4,16 +4,16 @@ namespace NSubstitute.Analyzers.Shared.DiagnosticAnalyzers { internal class CallInfoContext { - public List IndexerAccesses { get; } + public IReadOnlyList IndexerAccesses { get; } - public List ArgAtInvocations { get; } + public IReadOnlyList ArgAtInvocations { get; } - public List ArgInvocations { get; } + public IReadOnlyList ArgInvocations { get; } public CallInfoContext( - List argAtInvocations, - List argInvocations, - List indexerAccesses) + IReadOnlyList argAtInvocations, + IReadOnlyList argInvocations, + IReadOnlyList indexerAccesses) { IndexerAccesses = indexerAccesses; ArgAtInvocations = argAtInvocations;