Skip to content

Commit ef4d724

Browse files
committed
Some more optimization of ShadowedDeclarationInspection
1 parent dbfbe6d commit ef4d724

File tree

1 file changed

+6
-43
lines changed

1 file changed

+6
-43
lines changed

Rubberduck.Inspections/Concrete/ShadowedDeclarationInspection.cs

Lines changed: 6 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,8 @@
22
using System.Collections.Generic;
33
using System.Globalization;
44
using System.Linq;
5-
using Antlr4.Runtime;
6-
using Antlr4.Runtime.Tree;
7-
using Rubberduck.Common;
85
using Rubberduck.Inspections.Abstract;
96
using Rubberduck.Inspections.Results;
10-
using Rubberduck.Parsing;
11-
using Rubberduck.Parsing.Grammar;
127
using Rubberduck.Parsing.Inspections.Abstract;
138
using Rubberduck.Parsing.Inspections.Resources;
149
using Rubberduck.Parsing.Symbols;
@@ -28,27 +23,6 @@ private enum DeclarationSite
2823
SameComponent = 3
2924
}
3025

31-
private class EnumerationRuleIndexListener : VBAParserBaseListener
32-
{
33-
public Dictionary<ParserRuleContext, int> DeclarationIndexes { get; } = new Dictionary<ParserRuleContext, int>();
34-
35-
public override void EnterEnumerationStmt(VBAParser.EnumerationStmtContext context)
36-
{
37-
if (!DeclarationIndexes.ContainsKey(context))
38-
{
39-
DeclarationIndexes.Add(context, context.Start.TokenIndex);
40-
}
41-
}
42-
43-
public override void EnterEnumerationStmt_Constant(VBAParser.EnumerationStmt_ConstantContext context)
44-
{
45-
if (!DeclarationIndexes.ContainsKey(context))
46-
{
47-
DeclarationIndexes.Add(context, context.Start.TokenIndex);
48-
}
49-
}
50-
}
51-
5226
public ShadowedDeclarationInspection(RubberduckParserState state) : base(state, CodeInspectionSeverity.DoNotShow)
5327
{
5428
}
@@ -124,7 +98,7 @@ private static bool DeclarationIsPartOfBuiltInEventHandler(Declaration declarati
12498
return parameterDeclaration != null && builtInEventHandlers.Contains(parameterDeclaration.ParentDeclaration);
12599
}
126100

127-
private bool DeclarationCanBeShadowed(Declaration originalDeclaration, Declaration userDeclaration, DeclarationSite originalDeclarationSite)
101+
private static bool DeclarationCanBeShadowed(Declaration originalDeclaration, Declaration userDeclaration, DeclarationSite originalDeclarationSite)
128102
{
129103
if (originalDeclarationSite == DeclarationSite.NotApplicable)
130104
{
@@ -144,7 +118,7 @@ private bool DeclarationCanBeShadowed(Declaration originalDeclaration, Declarati
144118
return DeclarationInTheSameComponentCanBeShadowed(originalDeclaration, userDeclaration);
145119
}
146120

147-
private bool DeclarationInReferencedProjectCanBeShadowed(Declaration originalDeclaration, Declaration userDeclaration)
121+
private static bool DeclarationInReferencedProjectCanBeShadowed(Declaration originalDeclaration, Declaration userDeclaration)
148122
{
149123
if (DeclarationIsInsideOptionPrivateModule(originalDeclaration))
150124
{
@@ -271,7 +245,7 @@ private static bool DeclarationInAnotherComponentCanBeShadowed(Declaration origi
271245
return DeclarationAccessibilityCanBeShadowed(originalDeclaration);
272246
}
273247

274-
private bool DeclarationInTheSameComponentCanBeShadowed(Declaration originalDeclaration, Declaration userDeclaration)
248+
private static bool DeclarationInTheSameComponentCanBeShadowed(Declaration originalDeclaration, Declaration userDeclaration)
275249
{
276250
// Shadowing the component containing the declaration is not a problem, because it is possible to directly access declarations inside that component
277251
if (originalDeclaration.DeclarationType == DeclarationType.ProceduralModule || originalDeclaration.DeclarationType == DeclarationType.ClassModule ||
@@ -308,25 +282,14 @@ private bool DeclarationInTheSameComponentCanBeShadowed(Declaration originalDecl
308282
&& userDeclaration.DeclarationType == DeclarationType.EnumerationMember)
309283
|| (originalDeclaration.DeclarationType == DeclarationType.EnumerationMember
310284
&& userDeclaration.DeclarationType == DeclarationType.Enumeration)))
311-
{
312-
var listener = new EnumerationRuleIndexListener();
313-
if (!listener.DeclarationIndexes.ContainsKey(originalDeclaration.Context))
314-
{
315-
ParseTreeWalker.Default.Walk(listener,
316-
State.GetParseTree(originalDeclaration.QualifiedName.QualifiedModuleName));
317-
}
318-
319-
if (listener.DeclarationIndexes.ContainsKey(originalDeclaration.Context) &&
320-
listener.DeclarationIndexes.ContainsKey(userDeclaration.Context))
321-
{
322-
var originalDeclarationIndex = listener.DeclarationIndexes[originalDeclaration.Context];
323-
var userDeclarationIndex = listener.DeclarationIndexes[userDeclaration.Context];
285+
{
286+
var originalDeclarationIndex = originalDeclaration.Context.start.StartIndex;
287+
var userDeclarationIndex = userDeclaration.Context.start.StartIndex;
324288

325289
// First declaration wins
326290
return originalDeclarationIndex > userDeclarationIndex
327291
// Enumeration member can have the same name as enclosing enumeration
328292
&& !userDeclaration.Equals(originalDeclaration.ParentDeclaration);
329-
}
330293
}
331294

332295
// Events don't have a body, so their parameters can't be accessed

0 commit comments

Comments
 (0)