Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ArgumentException on ReEntrantSetupAnalyzer on first load #46

Closed
dtchepak opened this issue Oct 25, 2018 · 8 comments
Closed

ArgumentException on ReEntrantSetupAnalyzer on first load #46

dtchepak opened this issue Oct 25, 2018 · 8 comments
Assignees
Labels
bug Something isn't working
Milestone

Comments

@dtchepak
Copy link
Member

Using 1.0.0 C#.

On first adding the package, or first loading the project in VS, I get the following error (anonymised slightly). It seems to go away after running a build.

Error	AD0001	Analyzer 'NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantSetupAnalyzer' threw an exception of type 'System.ArgumentException' with message 'SyntaxTree is not part of the compilation
Parameter name: syntaxTree'.	SampleTests		1	Active	Analyzer 'NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantSetupAnalyzer' threw the following exception:
'Exception occurred with following context:
Compilation: SampleTests
SyntaxTree: C:\dev\git\sample\SampleTests\SampleFixture.cs
SyntaxNode: _sample.Actions ... [InvocationExpressionSyntax]@[4394..4580) (99,12)-(99,198)

System.ArgumentException: SyntaxTree is not part of the compilation
Parameter name: syntaxTree
   at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.GetSemanticModel(SyntaxTree syntaxTree, Boolean ignoreAccessibility)
   at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.CommonGetSemanticModel(SyntaxTree syntaxTree, Boolean ignoreAccessibility)
   at NSubstitute.Analyzers.Shared.DiagnosticAnalyzers.AbstractReEntrantCallFinder.<GetRelatedNodes>d__3.MoveNext()
   at NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantCallFinder.ReEntrantCallVisitor.VisitRelatedSymbols(SyntaxNode syntaxNode)
   at NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantCallFinder.ReEntrantCallVisitor.DefaultVisit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor.VisitIdentifierName(IdentifierNameSyntax node)
   at Microsoft.CodeAnalysis.CSharp.Syntax.IdentifierNameSyntax.Accept(CSharpSyntaxVisitor visitor)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.Visit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.DefaultVisit(SyntaxNode node)
   at NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantCallFinder.ReEntrantCallVisitor.DefaultVisit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor.VisitPropertyDeclaration(PropertyDeclarationSyntax node)
   at Microsoft.CodeAnalysis.CSharp.Syntax.PropertyDeclarationSyntax.Accept(CSharpSyntaxVisitor visitor)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.Visit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.DefaultVisit(SyntaxNode node)
   at NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantCallFinder.ReEntrantCallVisitor.DefaultVisit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor.VisitInterfaceDeclaration(InterfaceDeclarationSyntax node)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InterfaceDeclarationSyntax.Accept(CSharpSyntaxVisitor visitor)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.Visit(SyntaxNode node)
   at NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantCallFinder.ReEntrantCallVisitor.VisitRelatedSymbols(SyntaxNode syntaxNode)
   at NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantCallFinder.ReEntrantCallVisitor.DefaultVisit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor.VisitIdentifierName(IdentifierNameSyntax node)
   at Microsoft.CodeAnalysis.CSharp.Syntax.IdentifierNameSyntax.Accept(CSharpSyntaxVisitor visitor)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.Visit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.DefaultVisit(SyntaxNode node)
   at NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantCallFinder.ReEntrantCallVisitor.DefaultVisit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor.VisitMethodDeclaration(MethodDeclarationSyntax node)
   at Microsoft.CodeAnalysis.CSharp.Syntax.MethodDeclarationSyntax.Accept(CSharpSyntaxVisitor visitor)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.Visit(SyntaxNode node)
   at NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantCallFinder.ReEntrantCallVisitor.VisitRelatedSymbols(SyntaxNode syntaxNode)
   at NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantCallFinder.ReEntrantCallVisitor.DefaultVisit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor.VisitIdentifierName(IdentifierNameSyntax node)
   at Microsoft.CodeAnalysis.CSharp.Syntax.IdentifierNameSyntax.Accept(CSharpSyntaxVisitor visitor)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.Visit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.DefaultVisit(SyntaxNode node)
   at NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantCallFinder.ReEntrantCallVisitor.DefaultVisit(SyntaxNode node)
   at NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantCallFinder.ReEntrantCallVisitor.VisitInvocationExpression(InvocationExpressionSyntax node)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InvocationExpressionSyntax.Accept(CSharpSyntaxVisitor visitor)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.Visit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.DefaultVisit(SyntaxNode node)
   at NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantCallFinder.ReEntrantCallVisitor.DefaultVisit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor.VisitEqualsValueClause(EqualsValueClauseSyntax node)
   at Microsoft.CodeAnalysis.CSharp.Syntax.EqualsValueClauseSyntax.Accept(CSharpSyntaxVisitor visitor)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.Visit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.DefaultVisit(SyntaxNode node)
   at NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantCallFinder.ReEntrantCallVisitor.DefaultVisit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor.VisitVariableDeclarator(VariableDeclaratorSyntax node)
   at Microsoft.CodeAnalysis.CSharp.Syntax.VariableDeclaratorSyntax.Accept(CSharpSyntaxVisitor visitor)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.Visit(SyntaxNode node)
   at NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantCallFinder.ReEntrantCallVisitor.VisitRelatedSymbols(SyntaxNode syntaxNode)
   at NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantCallFinder.ReEntrantCallVisitor.DefaultVisit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor.VisitIdentifierName(IdentifierNameSyntax node)
   at Microsoft.CodeAnalysis.CSharp.Syntax.IdentifierNameSyntax.Accept(CSharpSyntaxVisitor visitor)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.Visit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.DefaultVisit(SyntaxNode node)
   at NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantCallFinder.ReEntrantCallVisitor.DefaultVisit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor.VisitInitializerExpression(InitializerExpressionSyntax node)
   at Microsoft.CodeAnalysis.CSharp.Syntax.InitializerExpressionSyntax.Accept(CSharpSyntaxVisitor visitor)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.Visit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.DefaultVisit(SyntaxNode node)
   at NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantCallFinder.ReEntrantCallVisitor.DefaultVisit(SyntaxNode node)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor.VisitImplicitArrayCreationExpression(ImplicitArrayCreationExpressionSyntax node)
   at Microsoft.CodeAnalysis.CSharp.Syntax.ImplicitArrayCreationExpressionSyntax.Accept(CSharpSyntaxVisitor visitor)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.Visit(SyntaxNode node)
   at NSubstitute.Analyzers.CSharp.DiagnosticAnalyzers.ReEntrantCallFinder.GetReEntrantSymbols(Compilation compilation, SyntaxNode rootNode)
   at NSubstitute.Analyzers.Shared.DiagnosticAnalyzers.AbstractReEntrantCallFinder.GetReEntrantCalls(Compilation compilation, SyntaxNode rootNode)
   at NSubstitute.Analyzers.Shared.DiagnosticAnalyzers.AbstractReEntrantSetupAnalyzer`2.AnalyzeInvocation(SyntaxNodeAnalysisContext syntaxNodeContext)
   at Microsoft.CodeAnalysis.Diagnostics.AnalyzerExecutor.<>c__44`1.<ExecuteSyntaxNodeAction>b__44_0(ValueTuple`2 data)
   at Microsoft.CodeAnalysis.Diagnostics.AnalyzerExecutor.ExecuteAndCatchIfThrows_NoLock[TArg](DiagnosticAnalyzer analyzer, Action`1 analyze, TArg argument, Nullable`1 info)
-----
'.
@tpodolak
Copy link
Member

Hi @dtchepak could you share the source code of the project or the problematic file? I am guessing that compilation is not yet ready and I have to somehow guard against that

@dtchepak
Copy link
Member Author

I can't sorry. It is a large project in a private repo.

If it is not observable with a new blank project then maybe just close this. (Unless can defensively code DiagnosticAnalyzers.AbstractReEntrantSetupAnalyzer<T>.AnalyzeInvocation?)

@tpodolak
Copy link
Member

I will try to do some defensive checks, simillary as in
https://github.com/SonarSource/sonar-csharp/pull/1927/files/ef36ce367b947d74ce9fee5fb003f1e74b541667
but I wont probably be able to test it locally or with integration tests. Will you be willing to test it on your repo using private NuGet package?

@dtchepak
Copy link
Member Author

@tpodolak Of course, happy to test using a local nuget package!

@tpodolak
Copy link
Member

@dtchepak I've added a defensive check for verifying if syntax tree is within compilation, as I still cannot reproduce the issue, please try to use this package and check if the issue exists (change zip to nupkg)
NSubstitute.Analyzers.CSharp.1.0.1-GH-46-argument-exce1.zip

@dtchepak
Copy link
Member Author

@tpodolak Thanks! I'll test as soon as I can.
Could you please push up the branch as well?

@tpodolak
Copy link
Member

@dtchepak
Copy link
Member Author

@tpodolak This seems to fix it in my testing!

The change looks nice and straightforward too! 😄

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants