Skip to content

Commit ab922fd

Browse files
committed
Let hand down the declaration finder in InspectionBase to the implementations as method parameter
Before, the provider was protected and that was used, getting a new one in all base classes for the different kinds of inspections.
1 parent 42a602a commit ab922fd

19 files changed

+82
-181
lines changed

Rubberduck.CodeAnalysis/Inspections/Abstract/DeclarationInspectionBaseBase.cs

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,51 +10,41 @@ namespace Rubberduck.Inspections.Abstract
1010
{
1111
public abstract class DeclarationInspectionBaseBase : InspectionBase
1212
{
13-
protected readonly DeclarationType[] RelevantDeclarationTypes;
14-
protected readonly DeclarationType[] ExcludeDeclarationTypes;
13+
private readonly DeclarationType[] _relevantDeclarationTypes;
14+
private readonly DeclarationType[] _excludeDeclarationTypes;
1515

1616
protected DeclarationInspectionBaseBase(IDeclarationFinderProvider declarationFinderProvider, params DeclarationType[] relevantDeclarationTypes)
1717
: base(declarationFinderProvider)
1818
{
19-
RelevantDeclarationTypes = relevantDeclarationTypes;
20-
ExcludeDeclarationTypes = new DeclarationType[0];
19+
_relevantDeclarationTypes = relevantDeclarationTypes;
20+
_excludeDeclarationTypes = new DeclarationType[0];
2121
}
2222

2323
protected DeclarationInspectionBaseBase(IDeclarationFinderProvider declarationFinderProvider, DeclarationType[] relevantDeclarationTypes, DeclarationType[] excludeDeclarationTypes)
2424
: base(declarationFinderProvider)
2525
{
26-
RelevantDeclarationTypes = relevantDeclarationTypes;
27-
ExcludeDeclarationTypes = excludeDeclarationTypes;
26+
_relevantDeclarationTypes = relevantDeclarationTypes;
27+
_excludeDeclarationTypes = excludeDeclarationTypes;
2828
}
2929

30-
protected abstract IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder);
31-
32-
protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
30+
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(DeclarationFinder finder)
3331
{
34-
var finder = DeclarationFinderProvider.DeclarationFinder;
35-
3632
return finder.UserDeclarations(DeclarationType.Module)
3733
.Concat(finder.UserDeclarations(DeclarationType.Project))
3834
.Where(declaration => declaration != null)
3935
.SelectMany(declaration => DoGetInspectionResults(declaration.QualifiedModuleName, finder))
4036
.ToList();
4137
}
4238

43-
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
44-
{
45-
var finder = DeclarationFinderProvider.DeclarationFinder;
46-
return DoGetInspectionResults(module, finder);
47-
}
48-
4939
protected virtual IEnumerable<Declaration> RelevantDeclarationsInModule(QualifiedModuleName module, DeclarationFinder finder)
5040
{
51-
var potentiallyRelevantDeclarations = RelevantDeclarationTypes.Length == 0
41+
var potentiallyRelevantDeclarations = _relevantDeclarationTypes.Length == 0
5242
? finder.Members(module)
53-
: RelevantDeclarationTypes
43+
: _relevantDeclarationTypes
5444
.SelectMany(declarationType => finder.Members(module, declarationType))
5545
.Distinct();
5646
return potentiallyRelevantDeclarations
57-
.Where(declaration => !ExcludeDeclarationTypes.Contains(declaration.DeclarationType));
47+
.Where(declaration => !_excludeDeclarationTypes.Contains(declaration.DeclarationType));
5848
}
5949
}
6050
}

Rubberduck.CodeAnalysis/Inspections/Abstract/DeclarationInspectionUsingGlobalInformationBaseBase.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,8 @@ protected virtual T GlobalInformation(QualifiedModuleName module, DeclarationFin
3838
return GlobalInformation(finder);
3939
}
4040

41-
protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
41+
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(DeclarationFinder finder)
4242
{
43-
var finder = DeclarationFinderProvider.DeclarationFinder;
4443
var globalInformation = GlobalInformation(finder);
4544

4645
return finder.UserDeclarations(DeclarationType.Module)
@@ -50,9 +49,8 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
5049
.ToList();
5150
}
5251

53-
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
52+
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder)
5453
{
55-
var finder = DeclarationFinderProvider.DeclarationFinder;
5654
var globalInformation = GlobalInformation(module, finder);
5755
return DoGetInspectionResults(module, finder, globalInformation);
5856
}

Rubberduck.CodeAnalysis/Inspections/Abstract/IdentifierReferenceInspectionBase.cs

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,15 @@ protected IdentifierReferenceInspectionBase(IDeclarationFinderProvider declarati
2020

2121
protected virtual ICollection<string> DisabledQuickFixes(IdentifierReference reference) => new List<string>();
2222

23-
protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
23+
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(DeclarationFinder finder)
2424
{
25-
var finder = DeclarationFinderProvider.DeclarationFinder;
26-
2725
return finder.UserDeclarations(DeclarationType.Module)
2826
.Where(declaration => declaration != null)
2927
.SelectMany(declaration => DoGetInspectionResults(declaration.QualifiedModuleName, finder))
3028
.ToList();
3129
}
3230

33-
protected IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder)
31+
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder)
3432
{
3533
var objectionableReferences = ReferencesInModule(module, finder)
3634
.Where(reference => IsResultReference(reference, finder));
@@ -40,12 +38,6 @@ protected IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleN
4038
.ToList();
4139
}
4240

43-
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
44-
{
45-
var finder = DeclarationFinderProvider.DeclarationFinder;
46-
return DoGetInspectionResults(module, finder);
47-
}
48-
4941
protected virtual IEnumerable<IdentifierReference> ReferencesInModule(QualifiedModuleName module, DeclarationFinder finder)
5042
{
5143
return finder.IdentifierReferences(module);
@@ -73,16 +65,14 @@ protected IdentifierReferenceInspectionBase(IDeclarationFinderProvider declarati
7365

7466
protected virtual ICollection<string> DisabledQuickFixes(IdentifierReference reference, T properties) => new List<string>();
7567

76-
protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
68+
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(DeclarationFinder finder)
7769
{
78-
var finder = DeclarationFinderProvider.DeclarationFinder;
79-
8070
return finder.UserDeclarations(DeclarationType.Module)
8171
.Where(module => module != null)
8272
.SelectMany(module => DoGetInspectionResults(module.QualifiedModuleName, finder));
8373
}
8474

85-
protected IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder)
75+
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder)
8676
{
8777
var objectionableReferencesWithProperties = ReferencesInModule(module, finder)
8878
.Select(reference => ReferenceWithResultProperties(reference, finder))
@@ -102,12 +92,6 @@ protected IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleN
10292
: ((IdentifierReference reference, T properties)?)null;
10393
}
10494

105-
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
106-
{
107-
var finder = DeclarationFinderProvider.DeclarationFinder;
108-
return DoGetInspectionResults(module, finder);
109-
}
110-
11195
protected virtual IEnumerable<IdentifierReference> ReferencesInModule(QualifiedModuleName module, DeclarationFinder finder)
11296
{
11397
return finder.IdentifierReferences(module);

Rubberduck.CodeAnalysis/Inspections/Abstract/IdentifierReferenceInspectionFromDeclarationsBase.cs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@ protected IdentifierReferenceInspectionFromDeclarationsBase(IDeclarationFinderPr
2020

2121
protected virtual ICollection<string> DisabledQuickFixes(IdentifierReference reference) => new List<string>();
2222

23-
protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
23+
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(DeclarationFinder finder)
2424
{
25-
var finder = DeclarationFinderProvider.DeclarationFinder;
2625
var objectionableReferences = ObjectionableReferences(finder);
2726
var resultReferences = ResultReferences(objectionableReferences, finder);
2827
return resultReferences
@@ -45,9 +44,8 @@ protected virtual IEnumerable<IdentifierReference> ObjectionableReferences(Decla
4544

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

48-
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
47+
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder)
4948
{
50-
var finder = DeclarationFinderProvider.DeclarationFinder;
5149
var objectionableReferences = ObjectionableReferences(finder)
5250
.Where(reference => reference.QualifiedModuleName.Equals(module));
5351
var resultReferences = ResultReferences(objectionableReferences, finder);
@@ -79,9 +77,8 @@ protected IdentifierReferenceInspectionFromDeclarationsBase(IDeclarationFinderPr
7977

8078
protected virtual ICollection<string> DisabledQuickFixes(IdentifierReference reference, T properties) => new List<string>();
8179

82-
protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
80+
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(DeclarationFinder finder)
8381
{
84-
var finder = DeclarationFinderProvider.DeclarationFinder;
8582
var objectionableReferences = ObjectionableReferences(finder);
8683
var resultReferences = ResultReferences(objectionableReferences, finder);
8784
return resultReferences
@@ -112,9 +109,8 @@ protected virtual IEnumerable<IdentifierReference> ObjectionableReferences(Decla
112109
.SelectMany(declaration => declaration.References);
113110
}
114111

115-
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
112+
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder)
116113
{
117-
var finder = DeclarationFinderProvider.DeclarationFinder;
118114
var objectionableReferences = ObjectionableReferences(finder)
119115
.Where(reference => reference.QualifiedModuleName.Equals(module));
120116
var resultReferences = ResultReferences(objectionableReferences, finder);

Rubberduck.CodeAnalysis/Inspections/Abstract/InspectionBase.cs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,21 @@
1010
using NLog;
1111
using Rubberduck.Parsing.Inspections;
1212
using Rubberduck.Inspections.Inspections.Extensions;
13+
using Rubberduck.Parsing.VBA.DeclarationCaching;
1314

1415
namespace Rubberduck.Inspections.Abstract
1516
{
1617
public abstract class InspectionBase : IInspection
1718
{
18-
protected readonly IDeclarationFinderProvider DeclarationFinderProvider;
19+
private readonly IDeclarationFinderProvider _declarationFinderProvider;
1920

2021
protected readonly ILogger Logger;
2122

2223
protected InspectionBase(IDeclarationFinderProvider declarationFinderProvider)
2324
{
2425
Logger = LogManager.GetLogger(GetType().FullName);
2526

26-
DeclarationFinderProvider = declarationFinderProvider;
27+
_declarationFinderProvider = declarationFinderProvider;
2728
Name = GetType().Name;
2829
}
2930

@@ -67,8 +68,8 @@ protected InspectionBase(IDeclarationFinderProvider declarationFinderProvider)
6768
public int CompareTo(IInspection other) => string.Compare(InspectionType + Name, other.InspectionType + other.Name, StringComparison.Ordinal);
6869
public int CompareTo(object obj) => CompareTo(obj as IInspection);
6970

70-
protected abstract IEnumerable<IInspectionResult> DoGetInspectionResults();
71-
protected abstract IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module);
71+
protected abstract IEnumerable<IInspectionResult> DoGetInspectionResults(DeclarationFinder finder);
72+
protected abstract IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder);
7273

7374
/// <summary>
7475
/// A method that inspects the parser state and returns all issues it can find.
@@ -79,9 +80,9 @@ public IEnumerable<IInspectionResult> GetInspectionResults(CancellationToken tok
7980
{
8081
var stopwatch = new Stopwatch();
8182
stopwatch.Start();
82-
var declarationFinder = DeclarationFinderProvider.DeclarationFinder;
83-
var result = DoGetInspectionResults()
84-
.Where(ir => !ir.IsIgnoringInspectionResult(declarationFinder))
83+
var finder = _declarationFinderProvider.DeclarationFinder;
84+
var result = DoGetInspectionResults(finder)
85+
.Where(ir => !ir.IsIgnoringInspectionResult(finder))
8586
.ToList();
8687
stopwatch.Stop();
8788
Logger.Trace("Intercepted invocation of '{0}.{1}' returned {2} objects.", GetType().Name, nameof(DoGetInspectionResults), result.Count);
@@ -99,9 +100,9 @@ public IEnumerable<IInspectionResult> GetInspectionResults(QualifiedModuleName m
99100
{
100101
var stopwatch = new Stopwatch();
101102
stopwatch.Start();
102-
var declarationFinder = DeclarationFinderProvider.DeclarationFinder;
103-
var result = DoGetInspectionResults(module)
104-
.Where(ir => !ir.IsIgnoringInspectionResult(declarationFinder))
103+
var finder = _declarationFinderProvider.DeclarationFinder;
104+
var result = DoGetInspectionResults(module, finder)
105+
.Where(ir => !ir.IsIgnoringInspectionResult(finder))
105106
.ToList();
106107
stopwatch.Stop();
107108
Logger.Trace("Intercepted invocation of '{0}.{1}' returned {2} objects.", GetType().Name, nameof(DoGetInspectionResults), result.Count);

Rubberduck.CodeAnalysis/Inspections/Abstract/ParseTreeInspectionBase.cs

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using Rubberduck.Parsing.Grammar;
88
using Rubberduck.Parsing.Inspections.Abstract;
99
using Rubberduck.Parsing.VBA;
10+
using Rubberduck.Parsing.VBA.DeclarationCaching;
1011
using Rubberduck.Parsing.VBA.Parsing;
1112
using Rubberduck.VBEditor;
1213

@@ -25,22 +26,22 @@ protected ParseTreeInspectionBase(IDeclarationFinderProvider declarationFinderPr
2526

2627
protected abstract string ResultDescription(QualifiedContext<TContext> context);
2728

28-
protected virtual bool IsResultContext(QualifiedContext<TContext> context) => true;
29+
protected virtual bool IsResultContext(QualifiedContext<TContext> context, DeclarationFinder finder) => true;
2930

30-
protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
31+
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(DeclarationFinder finder)
3132
{
32-
return DoGetInspectionResults(ContextListener.Contexts());
33+
return DoGetInspectionResults(ContextListener.Contexts(), finder);
3334
}
3435

35-
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
36+
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder)
3637
{
37-
return DoGetInspectionResults(ContextListener.Contexts(module));
38+
return DoGetInspectionResults(ContextListener.Contexts(module), finder);
3839
}
3940

40-
private IEnumerable<IInspectionResult> DoGetInspectionResults(IEnumerable<QualifiedContext<TContext>> contexts)
41+
private IEnumerable<IInspectionResult> DoGetInspectionResults(IEnumerable<QualifiedContext<TContext>> contexts, DeclarationFinder finder)
4142
{
4243
var objectionableContexts = contexts
43-
.Where(IsResultContext);
44+
.Where(context => IsResultContext(context, finder));
4445

4546
return objectionableContexts
4647
.Select(InspectionResult)
@@ -72,22 +73,22 @@ protected ParseTreeInspectionBase(IDeclarationFinderProvider declarationFinderPr
7273

7374
protected abstract IInspectionListener<TContext> ContextListener { get; }
7475
protected abstract string ResultDescription(QualifiedContext<TContext> context, TProperties properties);
75-
protected abstract (bool isResult, TProperties properties) IsResultContextWithAdditionalProperties(QualifiedContext<TContext> context);
76+
protected abstract (bool isResult, TProperties properties) IsResultContextWithAdditionalProperties(QualifiedContext<TContext> context, DeclarationFinder finder);
7677

77-
protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
78+
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(DeclarationFinder finder)
7879
{
79-
return DoGetInspectionResults(ContextListener.Contexts());
80+
return DoGetInspectionResults(ContextListener.Contexts(), finder);
8081
}
8182

82-
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
83+
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder)
8384
{
84-
return DoGetInspectionResults(ContextListener.Contexts(module));
85+
return DoGetInspectionResults(ContextListener.Contexts(module), finder);
8586
}
8687

87-
private IEnumerable<IInspectionResult> DoGetInspectionResults(IEnumerable<QualifiedContext<TContext>> contexts)
88+
private IEnumerable<IInspectionResult> DoGetInspectionResults(IEnumerable<QualifiedContext<TContext>> contexts, DeclarationFinder finder)
8889
{
8990
var objectionableContexts = contexts
90-
.Select(ContextsWithResultProperties)
91+
.Select(context => ContextsWithResultProperties(context, finder))
9192
.Where(result => result.HasValue)
9293
.Select(result => result.Value);
9394

@@ -96,9 +97,9 @@ private IEnumerable<IInspectionResult> DoGetInspectionResults(IEnumerable<Qualif
9697
.ToList();
9798
}
9899

99-
private (QualifiedContext<TContext> context, TProperties properties)? ContextsWithResultProperties(QualifiedContext<TContext> context)
100+
private (QualifiedContext<TContext> context, TProperties properties)? ContextsWithResultProperties(QualifiedContext<TContext> context, DeclarationFinder finder)
100101
{
101-
var (isResult, properties) = IsResultContextWithAdditionalProperties(context);
102+
var (isResult, properties) = IsResultContextWithAdditionalProperties(context, finder);
102103
return isResult
103104
? (context, properties)
104105
: ((QualifiedContext<TContext> context, TProperties properties)?) null;

0 commit comments

Comments
 (0)