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 24 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
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -34,8 +34,9 @@ protected override bool IsResultReference(IdentifierReference reference, Declara

public 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
Expand Up @@ -11,12 +11,12 @@ namespace Rubberduck.Inspections.Abstract
{
public 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 @@ -46,12 +46,12 @@ protected virtual IInspectionResult InspectionResult(Declaration declaration)

public 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
Expand Up @@ -13,15 +13,15 @@ public abstract class DeclarationInspectionBaseBase : InspectionBase
protected readonly DeclarationType[] RelevantDeclarationTypes;
protected 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];
}

protected DeclarationInspectionBaseBase(RubberduckParserState state, DeclarationType[] relevantDeclarationTypes, DeclarationType[] excludeDeclarationTypes)
: base(state)
protected DeclarationInspectionBaseBase(IDeclarationFinderProvider declarationFinderProvider, DeclarationType[] relevantDeclarationTypes, DeclarationType[] excludeDeclarationTypes)
: base(declarationFinderProvider)
{
RelevantDeclarationTypes = relevantDeclarationTypes;
ExcludeDeclarationTypes = excludeDeclarationTypes;
Expand All @@ -40,7 +40,7 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
.ToList();
}

protected virtual IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
{
var finder = DeclarationFinderProvider.DeclarationFinder;
return DoGetInspectionResults(module, finder);
Expand Down
Expand Up @@ -11,12 +11,12 @@ namespace Rubberduck.Inspections.Abstract
{
public 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
Expand Up @@ -11,12 +11,12 @@ namespace Rubberduck.Inspections.Abstract
{
public 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 @@ -46,12 +46,12 @@ protected virtual IInspectionResult InspectionResult(Declaration declaration)

public 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
Expand Up @@ -13,15 +13,15 @@ public abstract class DeclarationInspectionUsingGlobalInformationBaseBase<T> : I
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 Down Expand Up @@ -50,7 +50,7 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
.ToList();
}

protected virtual IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
{
var finder = DeclarationFinderProvider.DeclarationFinder;
var globalInformation = GlobalInformation(module, finder);
Expand Down
Expand Up @@ -11,8 +11,8 @@ namespace Rubberduck.Inspections.Abstract
{
public abstract class IdentifierReferenceInspectionBase : InspectionBase
{
protected IdentifierReferenceInspectionBase(RubberduckParserState state)
: base(state)
protected IdentifierReferenceInspectionBase(IDeclarationFinderProvider declarationFinderProvider)
: base(declarationFinderProvider)
{}

protected abstract bool IsResultReference(IdentifierReference reference, DeclarationFinder finder);
Expand Down Expand Up @@ -40,7 +40,7 @@ protected IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleN
.ToList();
}

protected IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
{
var finder = DeclarationFinderProvider.DeclarationFinder;
return DoGetInspectionResults(module, finder);
Expand All @@ -64,9 +64,9 @@ protected virtual IInspectionResult InspectionResult(IdentifierReference referen

public abstract class IdentifierReferenceInspectionBase<T> : InspectionBase
{
protected IdentifierReferenceInspectionBase(RubberduckParserState state)
: base(state)
{ }
protected IdentifierReferenceInspectionBase(IDeclarationFinderProvider declarationFinderProvider)
: base(declarationFinderProvider)
{}

protected abstract (bool isResult, T properties) IsResultReferenceWithAdditionalProperties(IdentifierReference reference, DeclarationFinder finder);
protected abstract string ResultDescription(IdentifierReference reference, T properties);
Expand All @@ -77,19 +77,9 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
{
var finder = DeclarationFinderProvider.DeclarationFinder;

var results = new List<IInspectionResult>();
foreach (var moduleDeclaration in State.DeclarationFinder.UserDeclarations(DeclarationType.Module))
{
if (moduleDeclaration == null)
{
continue;
}

var module = moduleDeclaration.QualifiedModuleName;
results.AddRange(DoGetInspectionResults(module, finder));
}

return results;
return finder.UserDeclarations(DeclarationType.Module)
.Where(module => module != null)
.SelectMany(module => DoGetInspectionResults(module.QualifiedModuleName, finder));
}

protected IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder)
Expand All @@ -112,7 +102,7 @@ protected IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleN
: ((IdentifierReference reference, T properties)?)null;
}

protected IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
{
var finder = DeclarationFinderProvider.DeclarationFinder;
return DoGetInspectionResults(module, finder);
Expand Down
Expand Up @@ -11,8 +11,8 @@ namespace Rubberduck.Inspections.Abstract
{
public abstract class IdentifierReferenceInspectionFromDeclarationsBase : InspectionBase
{
protected IdentifierReferenceInspectionFromDeclarationsBase(RubberduckParserState state)
: base(state)
protected IdentifierReferenceInspectionFromDeclarationsBase(IDeclarationFinderProvider declarationFinderProvider)
: base(declarationFinderProvider)
{}

protected abstract IEnumerable<Declaration> ObjectionableDeclarations(DeclarationFinder finder);
Expand Down Expand Up @@ -45,7 +45,7 @@ protected virtual IEnumerable<IdentifierReference> ObjectionableReferences(Decla

protected virtual bool IsResultReference(IdentifierReference reference, DeclarationFinder finder) => true;

protected IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
{
var finder = DeclarationFinderProvider.DeclarationFinder;
var objectionableReferences = ObjectionableReferences(finder)
Expand All @@ -69,9 +69,9 @@ protected virtual IInspectionResult InspectionResult(IdentifierReference referen

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

protected abstract IEnumerable<Declaration> ObjectionableDeclarations(DeclarationFinder finder);
protected abstract (bool isResult, T properties) IsResultReferenceWithAdditionalProperties(IdentifierReference reference, DeclarationFinder finder);
Expand Down Expand Up @@ -112,7 +112,7 @@ protected virtual IEnumerable<IdentifierReference> ObjectionableReferences(Decla
.SelectMany(declaration => declaration.References);
}

protected IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
{
var finder = DeclarationFinderProvider.DeclarationFinder;
var objectionableReferences = ObjectionableReferences(finder)
Expand Down
Expand Up @@ -6,12 +6,12 @@ namespace Rubberduck.Inspections.Abstract
{
public abstract class ImplicitTypeInspectionBase : DeclarationInspectionBase
{
protected ImplicitTypeInspectionBase(RubberduckParserState state, params DeclarationType[] relevantDeclarationTypes)
: base(state, relevantDeclarationTypes)
protected ImplicitTypeInspectionBase(IDeclarationFinderProvider declarationFinderProvider, params DeclarationType[] relevantDeclarationTypes)
: base(declarationFinderProvider, relevantDeclarationTypes)
{}

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

protected override bool IsResultDeclaration(Declaration declaration, DeclarationFinder finder)
Expand Down