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

Refactor parse tree inspections #5404

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
137e3dc
Redesign ParseTreeInspection base class
MDoerner Feb 25, 2020
7d620a8
Remove declaration members and state from the InspectionBase
MDoerner Feb 26, 2020
f1b6bb0
Make ImplicitByRef- and RedundantByRefInspection declaration inspections
MDoerner Feb 26, 2020
46d3707
Move DeclarationExtensions to JunkDrawer
MDoerner Feb 26, 2020
0c7da5a
Make IllegalAnnotationInspection work for individual modules
MDoerner Feb 26, 2020
2fc4217
Reduce constructor requirements on inspections
MDoerner Feb 26, 2020
117f00f
Treat IUnknown like Object in incompatible Set type inspections
MDoerner Feb 26, 2020
15d6320
Make ObsoleteCallStatementInspection more precise
MDoerner Feb 26, 2020
c4e0fd8
Turn ProcedureCanBeWrittenAsFunctionInspection into a declaration ins…
MDoerner Feb 26, 2020
a7ccb69
Make UnreachableCaseInspection able to run by module
MDoerner Feb 27, 2020
b24cfcb
Make it possible to run inspections for single modules
MDoerner Feb 27, 2020
03bf899
Fix an NRE in UnreachableCaseInspector
MDoerner Feb 27, 2020
9fed0b3
Add RequiredArguments to IAnnotation
MDoerner Feb 27, 2020
8c2fae8
Make MissingAnnotationArguments use only the annotations
MDoerner Feb 27, 2020
d21dacf
Unquote the replacement documentation on ObsoleteAnnotation
MDoerner Feb 27, 2020
1c8f7a4
Add SuperfluousAnnotationArgumentsInspection
MDoerner Feb 28, 2020
e280deb
Stop using stale state in UnreachableCaseInspection
MDoerner Mar 1, 2020
ca77a8d
Allow to clear inspection listener contexts by module
MDoerner Mar 1, 2020
04aa262
Stop using inspector for parse tree inspections
MDoerner Mar 1, 2020
e5efb48
Pass declaration finder along in UnreacableCaseInspection
MDoerner Mar 1, 2020
deea59f
Refactor ParseTreeValueVisitor
MDoerner Mar 3, 2020
5eda095
Make the enum members part of the ParseTreeVisitorResults
MDoerner Mar 3, 2020
5689b95
Get enumeration statements from enumeration members instead of the li…
MDoerner Mar 3, 2020
fbdcf00
Remove most state from UnreachableCaseInspector
MDoerner Mar 3, 2020
13e1547
Make inspection listener base and parse tree inspection base generic
MDoerner Mar 5, 2020
42a602a
Let IdentifierReferenceInspectionResult take a DeclarationFinder inst…
MDoerner Mar 5, 2020
ab922fd
Let hand down the declaration finder in InspectionBase to the impleme…
MDoerner Mar 5, 2020
b26b8f4
Make ParseTreeValueVisitor.VisitChildren pure
MDoerner Mar 6, 2020
6a17bf7
Make UnreachableCaseInspector.InspectForUnreachableCases pure
MDoerner Mar 6, 2020
af2b026
Make all concrete inspection listeners private
MDoerner Mar 6, 2020
0a517ae
Make empty block inspections derive from the same base providing the …
MDoerner Mar 7, 2020
32e6201
Make inspection and quick fix implementation internal
MDoerner Mar 7, 2020
932ac85
Move inspection and quick fix interfaces into CodeAnalysis
MDoerner Mar 7, 2020
3cdd860
Move remainder of inspections API to CodeAnalysis
MDoerner Mar 7, 2020
e7c76e3
Adjust inspection and quick fix namespaces
MDoerner Mar 7, 2020
b527bb3
Remove experimental attribute from empty block inspections
MDoerner Mar 7, 2020
280bcc6
Fix wrong hasResult attributes in inspection xml-docs
MDoerner Mar 7, 2020
3b49f91
Fix inspection xml-doc analyzers
MDoerner Mar 7, 2020
0745617
Add inspection xml-doc analyzer for duplicate names
MDoerner Mar 7, 2020
5d3b03b
Add missing module elements to inspection xml-doc examples
MDoerner Mar 8, 2020
98ea837
Add analyzer for hostApp in inspections xml-doc
MDoerner Mar 8, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
@@ -1,13 +1,12 @@
using System.Collections.Generic;
using System.Linq;
using Rubberduck.Inspections.Abstract;
using Rubberduck.Parsing.Symbols;
using Rubberduck.Parsing.VBA;
using Rubberduck.Parsing.VBA.DeclarationCaching;

namespace Rubberduck.Inspections.Inspections.Abstract
namespace Rubberduck.CodeAnalysis.Inspections.Abstract
{
public abstract class ArgumentReferenceInspectionFromDeclarationsBase : IdentifierReferenceInspectionFromDeclarationsBase
internal abstract class ArgumentReferenceInspectionFromDeclarationsBase : IdentifierReferenceInspectionFromDeclarationsBase
{
protected ArgumentReferenceInspectionFromDeclarationsBase(RubberduckParserState state)
: base(state) { }
Expand All @@ -32,10 +31,11 @@ protected override bool IsResultReference(IdentifierReference reference, Declara
}
}

public abstract class ArgumentReferenceInspectionFromDeclarationsBase<T> : IdentifierReferenceInspectionFromDeclarationsBase<T>
internal abstract class ArgumentReferenceInspectionFromDeclarationsBase<T> : IdentifierReferenceInspectionFromDeclarationsBase<T>
{
protected ArgumentReferenceInspectionFromDeclarationsBase(RubberduckParserState state)
: base(state) { }
protected ArgumentReferenceInspectionFromDeclarationsBase(IDeclarationFinderProvider declarationFinderProvider)
: base(declarationFinderProvider)
{}

protected abstract (bool isResult, T properties) IsUnsuitableArgumentWithAdditionalProperties(ArgumentReference reference, DeclarationFinder finder);

Expand Down
@@ -1,22 +1,21 @@
using System.Collections.Generic;
using System.Linq;
using Rubberduck.Inspections.Results;
using Rubberduck.Parsing.Inspections.Abstract;
using Rubberduck.CodeAnalysis.Inspections.Results;
using Rubberduck.Parsing.Symbols;
using Rubberduck.Parsing.VBA;
using Rubberduck.Parsing.VBA.DeclarationCaching;
using Rubberduck.VBEditor;

namespace Rubberduck.Inspections.Abstract
namespace Rubberduck.CodeAnalysis.Inspections.Abstract
{
public abstract class DeclarationInspectionBase : DeclarationInspectionBaseBase
internal abstract class DeclarationInspectionBase : DeclarationInspectionBaseBase
{
protected DeclarationInspectionBase(RubberduckParserState state, params DeclarationType[] relevantDeclarationTypes)
: base(state, relevantDeclarationTypes)
protected DeclarationInspectionBase(IDeclarationFinderProvider declarationFinderProvider, params DeclarationType[] relevantDeclarationTypes)
: base(declarationFinderProvider, relevantDeclarationTypes)
{}

protected DeclarationInspectionBase(RubberduckParserState state, DeclarationType[] relevantDeclarationTypes, DeclarationType[] excludeDeclarationTypes)
: base(state, relevantDeclarationTypes, excludeDeclarationTypes)
protected DeclarationInspectionBase(IDeclarationFinderProvider declarationFinderProvider, DeclarationType[] relevantDeclarationTypes, DeclarationType[] excludeDeclarationTypes)
: base(declarationFinderProvider, relevantDeclarationTypes, excludeDeclarationTypes)
{}

protected abstract bool IsResultDeclaration(Declaration declaration, DeclarationFinder finder);
Expand Down Expand Up @@ -44,14 +43,14 @@ protected virtual IInspectionResult InspectionResult(Declaration declaration)
}
}

public abstract class DeclarationInspectionBase<T> : DeclarationInspectionBaseBase
internal abstract class DeclarationInspectionBase<T> : DeclarationInspectionBaseBase
{
protected DeclarationInspectionBase(RubberduckParserState state, params DeclarationType[] relevantDeclarationTypes)
: base(state, relevantDeclarationTypes)
protected DeclarationInspectionBase(IDeclarationFinderProvider declarationFinderProvider, params DeclarationType[] relevantDeclarationTypes)
: base(declarationFinderProvider, relevantDeclarationTypes)
{}

protected DeclarationInspectionBase(RubberduckParserState state, DeclarationType[] relevantDeclarationTypes, DeclarationType[] excludeDeclarationTypes)
: base(state, relevantDeclarationTypes, excludeDeclarationTypes)
protected DeclarationInspectionBase(IDeclarationFinderProvider declarationFinderProvider , DeclarationType[] relevantDeclarationTypes, DeclarationType[] excludeDeclarationTypes)
: base(declarationFinderProvider, relevantDeclarationTypes, excludeDeclarationTypes)
{}

protected abstract (bool isResult, T properties) IsResultDeclarationWithAdditionalProperties(Declaration declaration, DeclarationFinder finder);
Expand Down
@@ -1,60 +1,52 @@
using System.Collections.Generic;
using System.Linq;
using Rubberduck.Parsing.Inspections.Abstract;
using Rubberduck.Parsing.Symbols;
using Rubberduck.Parsing.VBA;
using Rubberduck.Parsing.VBA.DeclarationCaching;
using Rubberduck.VBEditor;

namespace Rubberduck.Inspections.Abstract
namespace Rubberduck.CodeAnalysis.Inspections.Abstract
{
public abstract class DeclarationInspectionBaseBase : InspectionBase
/// <summary>
/// This is a base class for the other declaration inspection base classes. It should not be implemented directly by concrete inspections.
/// </summary>
internal abstract class DeclarationInspectionBaseBase : InspectionBase
{
protected readonly DeclarationType[] RelevantDeclarationTypes;
protected readonly DeclarationType[] ExcludeDeclarationTypes;
private readonly DeclarationType[] _relevantDeclarationTypes;
private readonly DeclarationType[] _excludeDeclarationTypes;

protected DeclarationInspectionBaseBase(RubberduckParserState state, params DeclarationType[] relevantDeclarationTypes)
: base(state)
protected DeclarationInspectionBaseBase(IDeclarationFinderProvider declarationFinderProvider, params DeclarationType[] relevantDeclarationTypes)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is why I'm less certain than before about the one class: one file rule/guideline, @bclothier: I'm thinking the only reason this class needs a silly name here is because of one class: one file, because DeclarationInspectionBase<T> wants to go into a DeclarationInspectionBase.cs file.
I'm pretty sure we could have DeclarationInspectionBase and DeclarationInspectionBase<T> in the same DeclarationInspectionBase.cs file, and avoid needing to name our abstract classes ThingBaseBase 😜

@MDoerner what do you think?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll admit that I am not consistent on that guideline myself. But FWIW, in this particular case, I had files RefactoringDialogBase and RefactoringDialogBaseGeneric. Note that in the generic file, the class is just RefactoringDialogBase<>; no need for BaseBase.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, but then you sacrifice the consistency of classname.cs! #NamingIsHard

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, in this particular example, this isn't generic. It's basically a InspectionBase implementing a particular implementation for declaration inspections. In which case, I'm not sure it should be DeclarationInspectionBaseBase; simply just DeclarationInspectionBase is sufficient. The fact that it's based on another abstract class (InspectionBase) is not really material and shouldn't factor into the naming, IMO.

Yes, agreed on #NamingIsHard.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have to admit that I don't really like the name myself. It is called that way because it is the base class for the other declaration inspection base classes. Apart from the ones you already mentioned there are also the two multi result base classes.
That it is based on InspectionBase is irrelevant for the name.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Btw, the generic and non-generic versions of the base classes are already in the same file for each kind.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should I do something about this class or not? Options are

  1. Rename DeclarationInspectionBase to DeclaratiinInspectionSingleResultBase and DeclarationInspectionBaseBase to DeclarationInspectionBase. That removes the BaseBase but opens room for confusion since this class should exclusively be implemented by base classes and not concrete inspection.
  2. Inline the class into all three implementation inspection base classes.
  3. Leave it as-is.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your comment makes me realize that I had the BaseBase backward; I interpreted it as a Base class based on another Base class but you're meaning a Base class that needs to be implemented by other Base classes. I had to look at the DeclarationInspectionBase to see that it inherits DeclarationInspectionBaseBase. Obviously that ambiguity is not what we want.

The only suggestion I can think of is PartialBase, in similar fashion to the partial class to suggest that it's not a complete definition, but I am not sure that is any improvement. At very least, there should be a xml docs on the BaseBase explaining that it is meant to be implemented by other base classes and not directly.

: base(declarationFinderProvider)
{
RelevantDeclarationTypes = relevantDeclarationTypes;
ExcludeDeclarationTypes = new DeclarationType[0];
_relevantDeclarationTypes = relevantDeclarationTypes;
_excludeDeclarationTypes = new DeclarationType[0];
}

protected DeclarationInspectionBaseBase(RubberduckParserState state, DeclarationType[] relevantDeclarationTypes, DeclarationType[] excludeDeclarationTypes)
: base(state)
protected DeclarationInspectionBaseBase(IDeclarationFinderProvider declarationFinderProvider, DeclarationType[] relevantDeclarationTypes, DeclarationType[] excludeDeclarationTypes)
: base(declarationFinderProvider)
{
RelevantDeclarationTypes = relevantDeclarationTypes;
ExcludeDeclarationTypes = excludeDeclarationTypes;
_relevantDeclarationTypes = relevantDeclarationTypes;
_excludeDeclarationTypes = excludeDeclarationTypes;
}

protected abstract IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder);

protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(DeclarationFinder finder)
{
var finder = DeclarationFinderProvider.DeclarationFinder;

return finder.UserDeclarations(DeclarationType.Module)
.Concat(finder.UserDeclarations(DeclarationType.Project))
.Where(declaration => declaration != null)
.SelectMany(declaration => DoGetInspectionResults(declaration.QualifiedModuleName, finder))
.ToList();
}

protected virtual IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
{
var finder = DeclarationFinderProvider.DeclarationFinder;
return DoGetInspectionResults(module, finder);
}

protected virtual IEnumerable<Declaration> RelevantDeclarationsInModule(QualifiedModuleName module, DeclarationFinder finder)
{
var potentiallyRelevantDeclarations = RelevantDeclarationTypes.Length == 0
var potentiallyRelevantDeclarations = _relevantDeclarationTypes.Length == 0
? finder.Members(module)
: RelevantDeclarationTypes
: _relevantDeclarationTypes
.SelectMany(declarationType => finder.Members(module, declarationType))
.Distinct();
return potentiallyRelevantDeclarations
.Where(declaration => !ExcludeDeclarationTypes.Contains(declaration.DeclarationType));
.Where(declaration => !_excludeDeclarationTypes.Contains(declaration.DeclarationType));
}
}
}
@@ -1,22 +1,21 @@
using System.Collections.Generic;
using System.Linq;
using Rubberduck.Inspections.Results;
using Rubberduck.Parsing.Inspections.Abstract;
using Rubberduck.CodeAnalysis.Inspections.Results;
using Rubberduck.Parsing.Symbols;
using Rubberduck.Parsing.VBA;
using Rubberduck.Parsing.VBA.DeclarationCaching;
using Rubberduck.VBEditor;

namespace Rubberduck.Inspections.Abstract
namespace Rubberduck.CodeAnalysis.Inspections.Abstract
{
public abstract class DeclarationInspectionMultiResultBase<T> : DeclarationInspectionBaseBase
internal abstract class DeclarationInspectionMultiResultBase<T> : DeclarationInspectionBaseBase
{
protected DeclarationInspectionMultiResultBase(RubberduckParserState state, params DeclarationType[] relevantDeclarationTypes)
: base(state, relevantDeclarationTypes)
protected DeclarationInspectionMultiResultBase(IDeclarationFinderProvider declarationFinderProvider, params DeclarationType[] relevantDeclarationTypes)
: base(declarationFinderProvider, relevantDeclarationTypes)
{}

protected DeclarationInspectionMultiResultBase(RubberduckParserState state, DeclarationType[] relevantDeclarationTypes, DeclarationType[] excludeDeclarationTypes)
: base(state, relevantDeclarationTypes, excludeDeclarationTypes)
protected DeclarationInspectionMultiResultBase(IDeclarationFinderProvider declarationFinderProvider, DeclarationType[] relevantDeclarationTypes, DeclarationType[] excludeDeclarationTypes)
: base(declarationFinderProvider, relevantDeclarationTypes, excludeDeclarationTypes)
{}

protected abstract IEnumerable<T> ResultProperties(Declaration declaration, DeclarationFinder finder);
Expand Down
@@ -1,22 +1,21 @@
using System.Collections.Generic;
using System.Linq;
using Rubberduck.Inspections.Results;
using Rubberduck.Parsing.Inspections.Abstract;
using Rubberduck.CodeAnalysis.Inspections.Results;
using Rubberduck.Parsing.Symbols;
using Rubberduck.Parsing.VBA;
using Rubberduck.Parsing.VBA.DeclarationCaching;
using Rubberduck.VBEditor;

namespace Rubberduck.Inspections.Abstract
namespace Rubberduck.CodeAnalysis.Inspections.Abstract
{
public abstract class DeclarationInspectionUsingGlobalInformationBase<TGlobalInfo> : DeclarationInspectionUsingGlobalInformationBaseBase<TGlobalInfo>
internal abstract class DeclarationInspectionUsingGlobalInformationBase<TGlobalInfo> : DeclarationInspectionUsingGlobalInformationBaseBase<TGlobalInfo>
{
protected DeclarationInspectionUsingGlobalInformationBase(RubberduckParserState state, params DeclarationType[] relevantDeclarationTypes)
: base(state, relevantDeclarationTypes)
protected DeclarationInspectionUsingGlobalInformationBase(IDeclarationFinderProvider declarationFinderProvider, params DeclarationType[] relevantDeclarationTypes)
: base(declarationFinderProvider, relevantDeclarationTypes)
{}

protected DeclarationInspectionUsingGlobalInformationBase(RubberduckParserState state, DeclarationType[] relevantDeclarationTypes, DeclarationType[] excludeDeclarationTypes)
: base(state, relevantDeclarationTypes, excludeDeclarationTypes)
protected DeclarationInspectionUsingGlobalInformationBase(IDeclarationFinderProvider declarationFinderProvider, DeclarationType[] relevantDeclarationTypes, DeclarationType[] excludeDeclarationTypes)
: base(declarationFinderProvider, relevantDeclarationTypes, excludeDeclarationTypes)
{}

protected abstract bool IsResultDeclaration(Declaration declaration, DeclarationFinder finder, TGlobalInfo globalInfo);
Expand Down Expand Up @@ -44,14 +43,14 @@ protected virtual IInspectionResult InspectionResult(Declaration declaration)
}
}

public abstract class DeclarationInspectionUsingGlobalInformationBase<TGlobalInfo,TProperties> : DeclarationInspectionUsingGlobalInformationBaseBase<TGlobalInfo>
internal abstract class DeclarationInspectionUsingGlobalInformationBase<TGlobalInfo,TProperties> : DeclarationInspectionUsingGlobalInformationBaseBase<TGlobalInfo>
{
protected DeclarationInspectionUsingGlobalInformationBase(RubberduckParserState state, params DeclarationType[] relevantDeclarationTypes)
: base(state, relevantDeclarationTypes)
protected DeclarationInspectionUsingGlobalInformationBase(IDeclarationFinderProvider declarationFinderProvider, params DeclarationType[] relevantDeclarationTypes)
: base(declarationFinderProvider, relevantDeclarationTypes)
{}

protected DeclarationInspectionUsingGlobalInformationBase(RubberduckParserState state, DeclarationType[] relevantDeclarationTypes, DeclarationType[] excludeDeclarationTypes)
: base(state, relevantDeclarationTypes, excludeDeclarationTypes)
protected DeclarationInspectionUsingGlobalInformationBase(IDeclarationFinderProvider declarationFinderProvider, DeclarationType[] relevantDeclarationTypes, DeclarationType[] excludeDeclarationTypes)
: base(declarationFinderProvider, relevantDeclarationTypes, excludeDeclarationTypes)
{}

protected abstract (bool isResult, TProperties properties) IsResultDeclarationWithAdditionalProperties(Declaration declaration, DeclarationFinder finder, TGlobalInfo globalInformation);
Expand Down
@@ -1,27 +1,26 @@
using System.Collections.Generic;
using System.Linq;
using Rubberduck.Parsing.Inspections.Abstract;
using Rubberduck.Parsing.Symbols;
using Rubberduck.Parsing.VBA;
using Rubberduck.Parsing.VBA.DeclarationCaching;
using Rubberduck.VBEditor;

namespace Rubberduck.Inspections.Abstract
namespace Rubberduck.CodeAnalysis.Inspections.Abstract
{
public abstract class DeclarationInspectionUsingGlobalInformationBaseBase<T> : InspectionBase
internal abstract class DeclarationInspectionUsingGlobalInformationBaseBase<T> : InspectionBase
{
protected readonly DeclarationType[] RelevantDeclarationTypes;
protected readonly DeclarationType[] ExcludeDeclarationTypes;

protected DeclarationInspectionUsingGlobalInformationBaseBase(RubberduckParserState state, params DeclarationType[] relevantDeclarationTypes)
: base(state)
protected DeclarationInspectionUsingGlobalInformationBaseBase(IDeclarationFinderProvider declarationFinderProvider, params DeclarationType[] relevantDeclarationTypes)
: base(declarationFinderProvider)
{
RelevantDeclarationTypes = relevantDeclarationTypes;
ExcludeDeclarationTypes = new DeclarationType[0];
}

protected DeclarationInspectionUsingGlobalInformationBaseBase(RubberduckParserState state, DeclarationType[] relevantDeclarationTypes, DeclarationType[] excludeDeclarationTypes)
: base(state)
protected DeclarationInspectionUsingGlobalInformationBaseBase(IDeclarationFinderProvider declarationFinderProvider, DeclarationType[] relevantDeclarationTypes, DeclarationType[] excludeDeclarationTypes)
: base(declarationFinderProvider)
{
RelevantDeclarationTypes = relevantDeclarationTypes;
ExcludeDeclarationTypes = excludeDeclarationTypes;
Expand All @@ -38,9 +37,8 @@ protected virtual T GlobalInformation(QualifiedModuleName module, DeclarationFin
return GlobalInformation(finder);
}

protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(DeclarationFinder finder)
{
var finder = DeclarationFinderProvider.DeclarationFinder;
var globalInformation = GlobalInformation(finder);

return finder.UserDeclarations(DeclarationType.Module)
Expand All @@ -50,9 +48,8 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
.ToList();
}

protected virtual IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder)
{
var finder = DeclarationFinderProvider.DeclarationFinder;
var globalInformation = GlobalInformation(module, finder);
return DoGetInspectionResults(module, finder, globalInformation);
}
Expand Down