Skip to content

Commit 7d620a8

Browse files
committed
Remove declaration members and state from the InspectionBase
The DeclarationFinderProvider remains protected for now.
1 parent 137e3dc commit 7d620a8

10 files changed

+59
-82
lines changed

Rubberduck.CodeAnalysis/Inspections/Abstract/IdentifierReferenceInspectionBase.cs

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -77,19 +77,9 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
7777
{
7878
var finder = DeclarationFinderProvider.DeclarationFinder;
7979

80-
var results = new List<IInspectionResult>();
81-
foreach (var moduleDeclaration in State.DeclarationFinder.UserDeclarations(DeclarationType.Module))
82-
{
83-
if (moduleDeclaration == null)
84-
{
85-
continue;
86-
}
87-
88-
var module = moduleDeclaration.QualifiedModuleName;
89-
results.AddRange(DoGetInspectionResults(module, finder));
90-
}
91-
92-
return results;
80+
return finder.UserDeclarations(DeclarationType.Module)
81+
.Where(module => module != null)
82+
.SelectMany(module => DoGetInspectionResults(module.QualifiedModuleName, finder));
9383
}
9484

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

Rubberduck.CodeAnalysis/Inspections/Abstract/InspectionBase.cs

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using System.Globalization;
44
using System.Linq;
55
using Rubberduck.Parsing.Inspections.Abstract;
6-
using Rubberduck.Parsing.Symbols;
76
using Rubberduck.Parsing.VBA;
87
using Rubberduck.VBEditor;
98
using System.Diagnostics;
@@ -16,17 +15,15 @@ namespace Rubberduck.Inspections.Abstract
1615
{
1716
public abstract class InspectionBase : IInspection
1817
{
19-
protected readonly RubberduckParserState State;
2018
protected readonly IDeclarationFinderProvider DeclarationFinderProvider;
2119

2220
protected readonly ILogger Logger;
2321

24-
protected InspectionBase(RubberduckParserState state)
22+
protected InspectionBase(IDeclarationFinderProvider declarationFinderProvider)
2523
{
2624
Logger = LogManager.GetLogger(GetType().FullName);
2725

28-
State = state;
29-
DeclarationFinderProvider = state;
26+
DeclarationFinderProvider = declarationFinderProvider;
3027
Name = GetType().Name;
3128
}
3229

@@ -67,26 +64,6 @@ protected InspectionBase(RubberduckParserState state)
6764
/// </summary>
6865
public virtual string AnnotationName => Name.Replace("Inspection", string.Empty);
6966

70-
/// <summary>
71-
/// Gets all declarations in the parser state without an @Ignore annotation for this inspection.
72-
/// </summary>
73-
protected virtual IEnumerable<Declaration> Declarations => DeclarationFinderProvider
74-
.DeclarationFinder
75-
.AllDeclarations
76-
.Where(declaration => !declaration.IsIgnoringInspectionResultFor(AnnotationName));
77-
78-
/// <summary>
79-
/// Gets all user declarations in the parser state without an @Ignore annotation for this inspection.
80-
/// </summary>
81-
protected virtual IEnumerable<Declaration> UserDeclarations => DeclarationFinderProvider
82-
.DeclarationFinder
83-
.AllUserDeclarations
84-
.Where(declaration => !declaration.IsIgnoringInspectionResultFor(AnnotationName));
85-
86-
protected virtual IEnumerable<Declaration> BuiltInDeclarations => DeclarationFinderProvider
87-
.DeclarationFinder
88-
.AllBuiltInDeclarations;
89-
9067
public int CompareTo(IInspection other) => string.Compare(InspectionType + Name, other.InspectionType + other.Name, StringComparison.Ordinal);
9168
public int CompareTo(object obj) => CompareTo(obj as IInspection);
9269

Rubberduck.CodeAnalysis/Inspections/Concrete/Excel/ApplicationWorksheetFunctionInspection.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,18 +63,18 @@ public ApplicationWorksheetFunctionInspection(RubberduckParserState state)
6363

6464
protected override IEnumerable<Declaration> ObjectionableDeclarations(DeclarationFinder finder)
6565
{
66-
var excel = State.DeclarationFinder.Projects.SingleOrDefault(item => !item.IsUserDefined && item.IdentifierName == "Excel");
66+
var excel = finder.Projects.SingleOrDefault(item => !item.IsUserDefined && item.IdentifierName == "Excel");
6767
if (excel == null)
6868
{
6969
return Enumerable.Empty<Declaration>();
7070
}
7171

72-
if (!(State.DeclarationFinder.FindClassModule("WorksheetFunction", excel, true) is ModuleDeclaration worksheetFunctionsModule))
72+
if (!(finder.FindClassModule("WorksheetFunction", excel, true) is ModuleDeclaration worksheetFunctionsModule))
7373
{
7474
return Enumerable.Empty<Declaration>();
7575
}
7676

77-
if (!(State.DeclarationFinder.FindClassModule("Application", excel, true) is ModuleDeclaration excelApplicationClass))
77+
if (!(finder.FindClassModule("Application", excel, true) is ModuleDeclaration excelApplicationClass))
7878
{
7979
return Enumerable.Empty<Declaration>();
8080
}

Rubberduck.CodeAnalysis/Inspections/Concrete/Excel/ExcelUdfNameIsValidCellReferenceInspection.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,11 @@ public ExcelUdfNameIsValidCellReferenceInspection(RubberduckParserState state)
4343

4444
protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
4545
{
46-
if (!State.DeclarationFinder.Projects.Any(project => !project.IsUserDefined
47-
&& project.IdentifierName == "Excel"))
46+
//FIXME As-is, both this method and the base method get a declaration finder.
47+
var finder = DeclarationFinderProvider.DeclarationFinder;
48+
49+
if (!finder.Projects.Any(project => !project.IsUserDefined
50+
&& project.IdentifierName == "Excel"))
4851
{
4952
return Enumerable.Empty<IInspectionResult>();
5053
}
@@ -54,8 +57,11 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
5457

5558
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
5659
{
57-
if (!State.DeclarationFinder.Projects.Any(project => !project.IsUserDefined
58-
&& project.IdentifierName == "Excel"))
60+
//FIXME As-is, both this method and the base method get a declaration finder.
61+
var finder = DeclarationFinderProvider.DeclarationFinder;
62+
63+
if (!finder.Projects.Any(project => !project.IsUserDefined
64+
&& project.IdentifierName == "Excel"))
5965
{
6066
return Enumerable.Empty<IInspectionResult>();
6167
}

Rubberduck.CodeAnalysis/Inspections/Concrete/IllegalAnnotationInspection.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,21 @@ namespace Rubberduck.Inspections.Concrete
4141
/// </example>
4242
public sealed class IllegalAnnotationInspection : InspectionBase
4343
{
44+
private readonly RubberduckParserState _state;
45+
4446
public IllegalAnnotationInspection(RubberduckParserState state)
4547
: base(state)
46-
{}
48+
{
49+
_state = state;
50+
}
4751

4852
protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
4953
{
50-
var userDeclarations = State.DeclarationFinder.AllUserDeclarations.ToList();
51-
var identifierReferences = State.DeclarationFinder.AllIdentifierReferences().ToList();
52-
var annotations = State.AllAnnotations;
54+
var finder = DeclarationFinderProvider.DeclarationFinder;
55+
56+
var userDeclarations = finder.AllUserDeclarations.ToList();
57+
var identifierReferences = finder.AllIdentifierReferences().ToList();
58+
var annotations = _state.AllAnnotations;
5359

5460
var unboundAnnotations = UnboundAnnotations(annotations, userDeclarations, identifierReferences)
5561
.Where(annotation => !annotation.Annotation.Target.HasFlag(AnnotationTarget.General)

Rubberduck.CodeAnalysis/Inspections/Concrete/ImplicitByRefModifierInspection.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,9 @@ protected override string ResultDescription(QualifiedContext<ParserRuleContext>
5656
protected override bool IsResultContext(QualifiedContext<ParserRuleContext> context)
5757
{
5858
//FIXME : This should really be a declaration inspection on the parameter.
59-
var builtInEventHandlerContexts = State.DeclarationFinder.FindEventHandlers().Select(handler => handler.Context).ToHashSet();
60-
var interfaceImplementationMemberContexts = State.DeclarationFinder.FindAllInterfaceImplementingMembers().Select(member => member.Context).ToHashSet();
59+
var finder = DeclarationFinderProvider.DeclarationFinder;
60+
var builtInEventHandlerContexts = finder.FindEventHandlers().Select(handler => handler.Context).ToHashSet();
61+
var interfaceImplementationMemberContexts = finder.FindAllInterfaceImplementingMembers().Select(member => member.Context).ToHashSet();
6162

6263
return !builtInEventHandlerContexts.Contains(context.Context.Parent.Parent)
6364
&& !interfaceImplementationMemberContexts.Contains(context.Context.Parent.Parent);

Rubberduck.CodeAnalysis/Inspections/Concrete/ObjectWhereProcedureIsRequiredInspection.cs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -63,24 +63,21 @@ public ObjectWhereProcedureIsRequiredInspection(RubberduckParserState state)
6363

6464
protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
6565
{
66-
var results = new List<IInspectionResult>();
67-
foreach (var moduleDeclaration in State.DeclarationFinder.UserDeclarations(DeclarationType.Module))
68-
{
69-
if (moduleDeclaration == null)
70-
{
71-
continue;
72-
}
73-
74-
var module = moduleDeclaration.QualifiedModuleName;
75-
results.AddRange(DoGetInspectionResults(module));
76-
}
66+
var finder = DeclarationFinderProvider.DeclarationFinder;
7767

78-
return results;
68+
return finder.UserDeclarations(DeclarationType.Module)
69+
.Where(module => module != null)
70+
.SelectMany(module => DoGetInspectionResults(module.QualifiedModuleName));
7971
}
8072

8173
private IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
8274
{
8375
var finder = DeclarationFinderProvider.DeclarationFinder;
76+
return DoGetInspectionResults(module, finder);
77+
}
78+
79+
private IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder)
80+
{
8481
return BoundInspectionResults(module, finder)
8582
.Concat(UnboundInspectionResults(module, finder));
8683
}

Rubberduck.CodeAnalysis/Inspections/Concrete/ProcedureCanBeWrittenAsFunctionInspection.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,15 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
5959
return Enumerable.Empty<IInspectionResult>();
6060
}
6161

62-
var userDeclarations = State.AllUserDeclarations.ToList();
63-
var builtinHandlers = State.DeclarationFinder.FindEventHandlers().ToList();
62+
var finder = DeclarationFinderProvider.DeclarationFinder;
63+
64+
var userDeclarations = finder.AllUserDeclarations.ToList();
65+
var builtinHandlers = finder.FindEventHandlers().ToList();
6466

6567
var contextLookup = userDeclarations.Where(decl => decl.Context != null).ToDictionary(decl => decl.Context);
6668

67-
var ignored = new HashSet<Declaration>( State.DeclarationFinder.FindAllInterfaceMembers()
68-
.Concat(State.DeclarationFinder.FindAllInterfaceImplementingMembers())
69+
var ignored = new HashSet<Declaration>(finder.FindAllInterfaceMembers()
70+
.Concat(finder.FindAllInterfaceImplementingMembers())
6971
.Concat(builtinHandlers)
7072
.Concat(userDeclarations.Where(item => item.IsWithEvents)));
7173

@@ -76,7 +78,7 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
7678
.Where(decl => decl != null &&
7779
!ignored.Contains(decl) &&
7880
userDeclarations.Where(item => item.IsWithEvents)
79-
.All(withEvents => !State.DeclarationFinder.FindHandlersForWithEventsField(withEvents).Any()) &&
81+
.All(withEvents => !finder.FindHandlersForWithEventsField(withEvents).Any()) &&
8082
!builtinHandlers.Contains(decl))
8183
.Select(result => new DeclarationInspectionResult(this,
8284
string.Format(InspectionResults.ProcedureCanBeWrittenAsFunctionInspection, result.IdentifierName),

Rubberduck.CodeAnalysis/Inspections/Concrete/RedundantByRefModifierInspection.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,9 @@ protected override string ResultDescription(QualifiedContext<ParserRuleContext>
6262
protected override bool IsResultContext(QualifiedContext<ParserRuleContext> context)
6363
{
6464
//FIXME This should be an inspection on parameter declarations.
65-
var builtInEventHandlerContexts = State.DeclarationFinder.FindEventHandlers().Select(handler => handler.Context).ToHashSet();
66-
var interfaceImplementationMemberContexts = State.DeclarationFinder.FindAllInterfaceImplementingMembers().Select(member => member.Context).ToHashSet();
65+
var finder = DeclarationFinderProvider.DeclarationFinder;
66+
var builtInEventHandlerContexts = finder.FindEventHandlers().Select(handler => handler.Context).ToHashSet();
67+
var interfaceImplementationMemberContexts = finder.FindAllInterfaceImplementingMembers().Select(member => member.Context).ToHashSet();
6768

6869
return !builtInEventHandlerContexts.Contains(context.Context.Parent.Parent)
6970
&& !interfaceImplementationMemberContexts.Contains(context.Context.Parent.Parent);

Rubberduck.CodeAnalysis/Inspections/Concrete/SuspiciousLetAssignmentInspection.cs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,24 +53,21 @@ public SuspiciousLetAssignmentInspection(RubberduckParserState state)
5353

5454
protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
5555
{
56-
var results = new List<IInspectionResult>();
57-
foreach (var moduleDeclaration in State.DeclarationFinder.UserDeclarations(DeclarationType.Module))
58-
{
59-
if (moduleDeclaration == null || moduleDeclaration.IsIgnoringInspectionResultFor(AnnotationName))
60-
{
61-
continue;
62-
}
63-
64-
var module = moduleDeclaration.QualifiedModuleName;
65-
results.AddRange(DoGetInspectionResults(module));
66-
}
56+
var finder = DeclarationFinderProvider.DeclarationFinder;
6757

68-
return results;
58+
return finder.UserDeclarations(DeclarationType.Module)
59+
.Where(module => module != null)
60+
.SelectMany(module => DoGetInspectionResults(module.QualifiedModuleName, finder));
6961
}
7062

7163
private IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
7264
{
7365
var finder = DeclarationFinderProvider.DeclarationFinder;
66+
return DoGetInspectionResults(module, finder);
67+
}
68+
69+
private IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder)
70+
{
7471
return BoundLhsInspectionResults(module, finder)
7572
.Concat(UnboundLhsInspectionResults(module, finder));
7673
}

0 commit comments

Comments
 (0)