Skip to content

Commit d76917c

Browse files
committed
Refactor inspection base classes
Loosely based on review comments to PR #5384
1 parent b4ae264 commit d76917c

6 files changed

+61
-73
lines changed

Rubberduck.CodeAnalysis/Inspections/Abstract/DeclarationInspectionBase.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,23 @@ protected DeclarationInspectionBase(RubberduckParserState state, DeclarationType
6262
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder)
6363
{
6464
var objectionableDeclarationsWithAdditionalProperties = RelevantDeclarationsInModule(module, finder)
65-
.Select(declaration => (declaration, IsResultDeclarationWithAdditionalProperties(declaration, finder)))
66-
.Where(tpl => tpl.Item2.isResult)
67-
.Select(tpl => (tpl.declaration, tpl.Item2.properties));
65+
.Select(declaration => DeclarationWithResultProperties(declaration, finder))
66+
.Where(result => result.HasValue)
67+
.Select(result => result.Value);
6868

6969
return objectionableDeclarationsWithAdditionalProperties
7070
.Select(tpl => InspectionResult(tpl.declaration, tpl.properties))
7171
.ToList();
7272
}
7373

74+
private (Declaration declaration, T properties)? DeclarationWithResultProperties(Declaration declaration, DeclarationFinder finder)
75+
{
76+
var (isResult, properties) = IsResultDeclarationWithAdditionalProperties(declaration, finder);
77+
return isResult
78+
? (declaration, properties)
79+
: ((Declaration declaration, T properties)?) null;
80+
}
81+
7482
protected virtual IInspectionResult InspectionResult(Declaration declaration, T properties)
7583
{
7684
return new DeclarationInspectionResult<T>(

Rubberduck.CodeAnalysis/Inspections/Abstract/DeclarationInspectionBaseBase.cs

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -33,30 +33,11 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
3333
{
3434
var finder = DeclarationFinderProvider.DeclarationFinder;
3535

36-
var results = new List<IInspectionResult>();
37-
foreach (var moduleDeclaration in finder.UserDeclarations(DeclarationType.Module))
38-
{
39-
if (moduleDeclaration == null)
40-
{
41-
continue;
42-
}
43-
44-
var module = moduleDeclaration.QualifiedModuleName;
45-
results.AddRange(DoGetInspectionResults(module, finder));
46-
}
47-
48-
foreach (var projectDeclaration in finder.UserDeclarations(DeclarationType.Project))
49-
{
50-
if (projectDeclaration == null)
51-
{
52-
continue;
53-
}
54-
55-
var module = projectDeclaration.QualifiedModuleName;
56-
results.AddRange(DoGetInspectionResults(module, finder));
57-
}
58-
59-
return results;
36+
return finder.UserDeclarations(DeclarationType.Module)
37+
.Concat(finder.UserDeclarations(DeclarationType.Project))
38+
.Where(declaration => declaration != null)
39+
.SelectMany(declaration => DoGetInspectionResults(declaration.QualifiedModuleName, finder))
40+
.ToList();
6041
}
6142

6243
protected virtual IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)

Rubberduck.CodeAnalysis/Inspections/Abstract/DeclarationInspectionUsingGlobalInformationBase.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,23 @@ protected DeclarationInspectionUsingGlobalInformationBase(RubberduckParserState
6262
protected override IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder, TGlobalInfo globalInformation)
6363
{
6464
var objectionableDeclarationsWithAdditionalProperties = RelevantDeclarationsInModule(module, finder)
65-
.Select(declaration => (declaration, IsResultDeclarationWithAdditionalProperties(declaration, finder, globalInformation)))
66-
.Where(tpl => tpl.Item2.isResult)
67-
.Select(tpl => (tpl.declaration, tpl.Item2.properties));
65+
.Select(declaration => DeclarationWithResultProperties(declaration, finder, globalInformation))
66+
.Where(result => result.HasValue)
67+
.Select(result => result.Value);
6868

6969
return objectionableDeclarationsWithAdditionalProperties
7070
.Select(tpl => InspectionResult(tpl.declaration, tpl.properties))
7171
.ToList();
7272
}
7373

74+
private (Declaration declaration, TProperties properties)? DeclarationWithResultProperties(Declaration declaration, DeclarationFinder finder, TGlobalInfo globalInformation)
75+
{
76+
var (isResult, properties) = IsResultDeclarationWithAdditionalProperties(declaration, finder, globalInformation);
77+
return isResult
78+
? (declaration, properties)
79+
: ((Declaration declaration, TProperties properties)?)null;
80+
}
81+
7482
protected virtual IInspectionResult InspectionResult(Declaration declaration, TProperties properties)
7583
{
7684
return new DeclarationInspectionResult<TProperties>(

Rubberduck.CodeAnalysis/Inspections/Abstract/DeclarationInspectionUsingGlobalInformationBaseBase.cs

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ protected DeclarationInspectionUsingGlobalInformationBaseBase(RubberduckParserSt
3030
protected abstract IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder, T globalInformation);
3131
protected abstract T GlobalInformation(DeclarationFinder finder);
3232

33+
/// <summary>
34+
/// Can be overwritten to enhance performance if providing the global information for one module module only is cheaper than getting it for all modules.
35+
/// </summary>
3336
protected virtual T GlobalInformation(QualifiedModuleName module, DeclarationFinder finder)
3437
{
3538
return GlobalInformation(finder);
@@ -40,30 +43,11 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
4043
var finder = DeclarationFinderProvider.DeclarationFinder;
4144
var globalInformation = GlobalInformation(finder);
4245

43-
var results = new List<IInspectionResult>();
44-
foreach (var moduleDeclaration in finder.UserDeclarations(DeclarationType.Module))
45-
{
46-
if (moduleDeclaration == null)
47-
{
48-
continue;
49-
}
50-
51-
var module = moduleDeclaration.QualifiedModuleName;
52-
results.AddRange(DoGetInspectionResults(module, finder, globalInformation));
53-
}
54-
55-
foreach (var projectDeclaration in finder.UserDeclarations(DeclarationType.Project))
56-
{
57-
if (projectDeclaration == null)
58-
{
59-
continue;
60-
}
61-
62-
var module = projectDeclaration.QualifiedModuleName;
63-
results.AddRange(DoGetInspectionResults(module, finder, globalInformation));
64-
}
65-
66-
return results;
46+
return finder.UserDeclarations(DeclarationType.Module)
47+
.Concat(finder.UserDeclarations(DeclarationType.Project))
48+
.Where(declaration => declaration != null)
49+
.SelectMany(declaration => DoGetInspectionResults(declaration.QualifiedModuleName, finder, globalInformation))
50+
.ToList();
6751
}
6852

6953
protected virtual IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)

Rubberduck.CodeAnalysis/Inspections/Abstract/IdentifierReferenceInspectionBase.cs

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,10 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
2424
{
2525
var finder = DeclarationFinderProvider.DeclarationFinder;
2626

27-
var results = new List<IInspectionResult>();
28-
foreach (var moduleDeclaration in State.DeclarationFinder.UserDeclarations(DeclarationType.Module))
29-
{
30-
if (moduleDeclaration == null)
31-
{
32-
continue;
33-
}
34-
35-
var module = moduleDeclaration.QualifiedModuleName;
36-
results.AddRange(DoGetInspectionResults(module, finder));
37-
}
38-
39-
return results;
27+
return finder.UserDeclarations(DeclarationType.Module)
28+
.Where(declaration => declaration != null)
29+
.SelectMany(declaration => DoGetInspectionResults(declaration.QualifiedModuleName, finder))
30+
.ToList();
4031
}
4132

4233
protected IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder)
@@ -104,15 +95,23 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
10495
protected IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module, DeclarationFinder finder)
10596
{
10697
var objectionableReferencesWithProperties = ReferencesInModule(module, finder)
107-
.Select(reference => (reference, IsResultReferenceWithAdditionalProperties(reference, finder)))
108-
.Where(tpl => tpl.Item2.isResult)
109-
.Select(tpl => (tpl.reference, tpl.Item2.properties));
98+
.Select(reference => ReferenceWithResultProperties(reference, finder))
99+
.Where(result => result.HasValue)
100+
.Select(result => result.Value);
110101

111102
return objectionableReferencesWithProperties
112103
.Select(tpl => InspectionResult(tpl.reference, DeclarationFinderProvider, tpl.properties))
113104
.ToList();
114105
}
115106

107+
private (IdentifierReference reference, T properties)? ReferenceWithResultProperties(IdentifierReference reference, DeclarationFinder finder)
108+
{
109+
var (isResult, properties) = IsResultReferenceWithAdditionalProperties(reference, finder);
110+
return isResult
111+
? (reference, properties)
112+
: ((IdentifierReference reference, T properties)?)null;
113+
}
114+
116115
protected IEnumerable<IInspectionResult> DoGetInspectionResults(QualifiedModuleName module)
117116
{
118117
var finder = DeclarationFinderProvider.DeclarationFinder;

Rubberduck.CodeAnalysis/Inspections/Abstract/IdentifierReferenceInspectionFromDeclarationsBase.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,17 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
9292
private IEnumerable<(IdentifierReference reference, T properties)> ResultReferences(IEnumerable<IdentifierReference> potentialResultReferences, DeclarationFinder finder)
9393
{
9494
return potentialResultReferences
95-
.Select(reference => (reference, IsResultReferenceWithAdditionalProperties(reference, finder)))
96-
.Where(tpl => tpl.Item2.isResult)
97-
.Select(tpl => (tpl.reference, tpl.Item2.properties));
95+
.Select(reference => ReferenceWithResultProperties(reference, finder))
96+
.Where(result => result.HasValue)
97+
.Select(result => result.Value); ;
98+
}
99+
100+
private (IdentifierReference reference, T properties)? ReferenceWithResultProperties(IdentifierReference reference, DeclarationFinder finder)
101+
{
102+
var (isResult, properties) = IsResultReferenceWithAdditionalProperties(reference, finder);
103+
return isResult
104+
? (reference, properties)
105+
: ((IdentifierReference reference, T properties)?)null;
98106
}
99107

100108
protected virtual IEnumerable<IdentifierReference> ObjectionableReferences(DeclarationFinder finder)

0 commit comments

Comments
 (0)