Skip to content

Commit a2a3ad0

Browse files
committed
Fix built-in event discovery
1 parent f32c499 commit a2a3ad0

6 files changed

+12
-22
lines changed

RetailCoder.VBE/Common/DeclarationExtensions.cs

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -225,35 +225,25 @@ public static IEnumerable<Declaration> FindBuiltInEventHandlers(this IEnumerable
225225
var declarationList = declarations.ToList();
226226

227227
var handlerNames = declarationList.Where(declaration => declaration.IsBuiltIn && declaration.DeclarationType == DeclarationType.Event)
228-
.Select(e => e.ParentDeclaration.IdentifierName + "_" + e.IdentifierName);
228+
.SelectMany(e =>
229+
{
230+
var parentModuleSubtypes = ((ClassModuleDeclaration) e.ParentDeclaration).Subtypes;
231+
return parentModuleSubtypes.Any()
232+
? parentModuleSubtypes.Select(v => v.IdentifierName + "_" + e.IdentifierName)
233+
: new[] { e.ParentDeclaration.IdentifierName + "_" + e.IdentifierName };
234+
});
229235

230236
// class module built-in events
231237
var classModuleHandlers = declarationList.Where(item =>
232238
item.DeclarationType == DeclarationType.Procedure &&
233239
item.ParentDeclaration.DeclarationType == DeclarationType.ClassModule &&
234240
(item.IdentifierName == "Class_Initialize" || item.IdentifierName == "Class_Terminate"));
235241

236-
// user form built-in events
237-
var userFormHandlers = declarationList.Where(item =>
238-
item.DeclarationType == DeclarationType.Procedure &&
239-
item.ParentDeclaration.DeclarationType == DeclarationType.ClassModule &&
240-
item.QualifiedName.QualifiedModuleName.Component.Type == vbext_ComponentType.vbext_ct_MSForm &&
241-
new[]
242-
{
243-
"UserForm_Activate", "UserForm_AddControl", "UserForm_BeforeDragOver", "UserForm_BeforeDropOrPaste",
244-
"UserForm_Click", "UserForm_DblClick", "UserForm_Deactivate", "UserForm_Error",
245-
"UserForm_Initialize", "UserForm_KeyDown", "UserForm_KeyPress", "UserForm_KeyUp", "UserForm_Layout",
246-
"UserForm_MouseDown", "UserForm_MouseMove", "UserForm_MouseUp", "UserForm_QueryClose",
247-
"UserForm_RemoveControl", "UserForm_Resize", "UserForm_Scroll", "UserForm_Terminate",
248-
"UserForm_Zoom"
249-
}.Contains(item.IdentifierName));
250-
251242
var handlers = declarationList.Where(declaration => !declaration.IsBuiltIn
252243
&& declaration.DeclarationType == DeclarationType.Procedure
253244
&& handlerNames.Contains(declaration.IdentifierName)).ToList();
254245

255246
handlers.AddRange(classModuleHandlers);
256-
handlers.AddRange(userFormHandlers);
257247

258248
return handlers;
259249
}

RetailCoder.VBE/Inspections/ImplicitByRefParameterInspection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public override IEnumerable<InspectionResultBase> GetInspectionResults()
3030
// ParamArray parameters do not allow an explicit "ByRef" parameter mechanism.
3131
&& !((ParameterDeclaration)item).IsParamArray
3232
&& !interfaceMembers.Select(m => m.Scope).Contains(item.ParentScope)
33-
&& !UserDeclarations.FindBuiltInEventHandlers().Contains(item.ParentDeclaration)
33+
&& !State.AllDeclarations.FindBuiltInEventHandlers().Contains(item.ParentDeclaration)
3434
let arg = item.Context as VBAParser.ArgContext
3535
where arg != null && arg.BYREF() == null && arg.BYVAL() == null
3636
select new QualifiedContext<VBAParser.ArgContext>(item.QualifiedName, arg))

RetailCoder.VBE/Inspections/ParameterCanBeByValInspection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public override IEnumerable<InspectionResultBase> GetInspectionResults()
4949

5050
var eventScopes = declarations.Where(item =>
5151
!item.IsBuiltIn && item.DeclarationType == DeclarationType.Event)
52-
.Select(e => e.Scope).Concat(declarations.FindBuiltInEventHandlers().Select(e => e.Scope));
52+
.Select(e => e.Scope).Concat(State.AllDeclarations.FindBuiltInEventHandlers().Select(e => e.Scope));
5353

5454
var declareScopes = declarations.Where(item =>
5555
item.DeclarationType == DeclarationType.LibraryFunction

RetailCoder.VBE/Inspections/ParameterNotUsedInspection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public override IEnumerable<InspectionResultBase> GetInspectionResults()
3333
var interfaceMemberScopes = declarations.FindInterfaceMembers().Select(m => m.Scope).ToList();
3434
var interfaceImplementationMemberScopes = declarations.FindInterfaceImplementationMembers().Select(m => m.Scope).ToList();
3535

36-
var builtInHandlers = declarations.FindBuiltInEventHandlers();
36+
var builtInHandlers = State.AllDeclarations.FindBuiltInEventHandlers();
3737

3838
var parameters = declarations.Where(parameter => parameter.DeclarationType == DeclarationType.Parameter
3939
&& parameter.ParentDeclaration.DeclarationType != DeclarationType.Event

RetailCoder.VBE/Inspections/ProcedureCanBeWrittenAsFunctionInspection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public override IEnumerable<InspectionResultBase> GetInspectionResults()
7272

7373
return UserDeclarations.Where(item => item.IsWithEvents)
7474
.All(withEvents => UserDeclarations.FindEventProcedures(withEvents) == null) &&
75-
!UserDeclarations.FindBuiltInEventHandlers().Contains(declaration);
75+
!State.AllDeclarations.FindBuiltInEventHandlers().Contains(declaration);
7676
});
7777

7878
return ParseTreeResults.ArgListsWithOneByRefParam

RetailCoder.VBE/Inspections/ProcedureNotUsedInspection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public override IEnumerable<InspectionResultBase> GetInspectionResults()
4242
handlers.AddRange(forms.SelectMany(form => declarations.FindFormEventHandlers(form)));
4343
}
4444

45-
handlers.AddRange(declarations.FindBuiltInEventHandlers());
45+
handlers.AddRange(State.AllDeclarations.FindBuiltInEventHandlers());
4646

4747
var items = declarations
4848
.Where(item => !IsIgnoredDeclaration(declarations, item, handlers, classes, modules)

0 commit comments

Comments
 (0)