diff --git a/src/NSubstitute.Analyzers.CSharp/DiagnosticAnalyzers/NonSubstitutableMemberReceivedInOrderAnalyzer.cs b/src/NSubstitute.Analyzers.CSharp/DiagnosticAnalyzers/NonSubstitutableMemberReceivedInOrderAnalyzer.cs index e50ed0e0..abf7d106 100644 --- a/src/NSubstitute.Analyzers.CSharp/DiagnosticAnalyzers/NonSubstitutableMemberReceivedInOrderAnalyzer.cs +++ b/src/NSubstitute.Analyzers.CSharp/DiagnosticAnalyzers/NonSubstitutableMemberReceivedInOrderAnalyzer.cs @@ -21,10 +21,5 @@ public NonSubstitutableMemberReceivedInOrderAnalyzer() protected override SyntaxKind InvocationExpressionKind { get; } = SyntaxKind.InvocationExpression; protected override ImmutableArray IgnoredAncestorPaths { get; } = IgnoredPaths; - - protected override ISymbol GetDeclarationSymbol(SemanticModel semanticModel, SyntaxNode node) - { - return semanticModel.GetDeclaredSymbol(node); - } } } \ No newline at end of file diff --git a/src/NSubstitute.Analyzers.Shared/DiagnosticAnalyzers/AbstractNonSubstitutableMemberReceivedInOrderAnalyzer.cs b/src/NSubstitute.Analyzers.Shared/DiagnosticAnalyzers/AbstractNonSubstitutableMemberReceivedInOrderAnalyzer.cs index 62e76edc..426fcea6 100644 --- a/src/NSubstitute.Analyzers.Shared/DiagnosticAnalyzers/AbstractNonSubstitutableMemberReceivedInOrderAnalyzer.cs +++ b/src/NSubstitute.Analyzers.Shared/DiagnosticAnalyzers/AbstractNonSubstitutableMemberReceivedInOrderAnalyzer.cs @@ -44,8 +44,6 @@ protected sealed override void InitializeAnalyzer(AnalysisContext context) context.RegisterSyntaxNodeAction(_analyzeInvocationAction, InvocationExpressionKind); } - protected abstract ISymbol GetDeclarationSymbol(SemanticModel semanticModel, SyntaxNode node); - protected override Location GetSubstitutionNodeActualLocation(in NonSubstitutableMemberAnalysisResult analysisResult) { return analysisResult.Member.GetSubstitutionNodeActualLocation(analysisResult.Symbol); @@ -104,7 +102,7 @@ operation.Parent is IInvocationOperation invocationOperation && return false; } - var symbol = GetDeclarationSymbol(semanticModel, maybeIgnoredExpression); + var symbol = GetVariableDeclaratorSymbol(operation); if (symbol == null) { @@ -123,6 +121,16 @@ operation.Parent is IInvocationOperation invocationOperation && return !dataFlowAnalysis.ReadInside.Contains(symbol); } + private static ILocalSymbol GetVariableDeclaratorSymbol(IOperation operation) + { + return operation switch + { + IVariableDeclaratorOperation declarator => declarator.Symbol, + IVariableDeclarationOperation declarationOperation => declarationOperation.Declarators.FirstOrDefault()?.Symbol, + _ => null + }; + } + private SyntaxNode FindIgnoredEnclosingExpression(SyntaxNode syntaxNode) { return syntaxNode.Ancestors().FirstOrDefault(ancestor => IgnoredAncestorPaths.Contains(ancestor.RawKind)); diff --git a/src/NSubstitute.Analyzers.VisualBasic/DiagnosticAnalyzers/NonSubstitutableMemberReceivedInOrderAnalyzer.cs b/src/NSubstitute.Analyzers.VisualBasic/DiagnosticAnalyzers/NonSubstitutableMemberReceivedInOrderAnalyzer.cs index f956883b..a66aa2aa 100644 --- a/src/NSubstitute.Analyzers.VisualBasic/DiagnosticAnalyzers/NonSubstitutableMemberReceivedInOrderAnalyzer.cs +++ b/src/NSubstitute.Analyzers.VisualBasic/DiagnosticAnalyzers/NonSubstitutableMemberReceivedInOrderAnalyzer.cs @@ -23,29 +23,5 @@ public NonSubstitutableMemberReceivedInOrderAnalyzer() protected override SyntaxKind InvocationExpressionKind { get; } = SyntaxKind.InvocationExpression; protected override ImmutableArray IgnoredAncestorPaths { get; } = IgnoredPaths; - - protected override ISymbol GetDeclarationSymbol(SemanticModel semanticModel, SyntaxNode node) - { - var symbol = semanticModel.GetDeclaredSymbol(node); - - if (symbol != null) - { - return symbol; - } - - if (!(node is VariableDeclaratorSyntax variableDeclaratorSyntax)) - { - return null; - } - - var modifiedIdentifierSyntax = variableDeclaratorSyntax.Names.FirstOrDefault(); - - if (modifiedIdentifierSyntax == null) - { - return null; - } - - return semanticModel.GetDeclaredSymbol(modifiedIdentifierSyntax); - } } } \ No newline at end of file