Skip to content

Commit 10a773a

Browse files
committed
Fix threading for FindBuiltinEventHandlers
1 parent 230bd52 commit 10a773a

File tree

1 file changed

+22
-22
lines changed

1 file changed

+22
-22
lines changed

Rubberduck.Parsing/Symbols/DeclarationFinder.cs

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public DeclarationFinder(IReadOnlyList<Declaration> declarations, IEnumerable<IA
6666
declarations.Where(declaration => !declaration.IsBuiltIn)
6767
.GroupBy(declaration => declaration.DeclarationType)
6868
.ToDictionary(grouping => grouping.Key, grouping => grouping.ToArray()));
69-
_builtinEvents = new ConcurrentBag<Declaration>(FindBuiltInEventHandlers(declarations));
69+
_builtinEvents = new Lazy<ConcurrentBag<Declaration>>(() => FindBuiltInEventHandlers(declarations));
7070

7171
_projects = _projects = declarations.Where(d => d.DeclarationType == DeclarationType.Project).ToList();
7272
_classes = _declarations.AllValues().Where(d => d.DeclarationType == DeclarationType.ClassModule).ToList();
@@ -146,12 +146,12 @@ public IEnumerable<Declaration> FindDeclarationsWithNonBaseAsType()
146146
}
147147
}
148148

149-
private readonly ConcurrentBag<Declaration> _builtinEvents;
149+
private readonly Lazy<ConcurrentBag<Declaration>> _builtinEvents;
150150
public IEnumerable<Declaration> FindBuiltinEventHandlers()
151151
{
152152
lock (ThreadLock)
153153
{
154-
return _builtinEvents.ToList();
154+
return _builtinEvents.Value;
155155
}
156156
}
157157

@@ -622,7 +622,7 @@ private IEnumerable<Declaration> FindAllInReferencedProjectByPriority(Declaratio
622622
}
623623
}
624624

625-
public static IEnumerable<Declaration> FindBuiltInEventHandlers(IEnumerable<Declaration> declarations)
625+
public static ConcurrentBag<Declaration> FindBuiltInEventHandlers(IEnumerable<Declaration> declarations)
626626
{
627627
var declarationList = declarations.ToList();
628628

@@ -640,24 +640,24 @@ public static IEnumerable<Declaration> FindBuiltInEventHandlers(IEnumerable<Decl
640640

641641
var handlers = declarationList.Where(item =>
642642
// class module built-in events
643-
(item.DeclarationType == DeclarationType.Procedure &&
644-
item.ParentDeclaration.DeclarationType == DeclarationType.ClassModule && (
645-
item.IdentifierName.Equals("Class_Initialize", StringComparison.InvariantCultureIgnoreCase) ||
646-
item.IdentifierName.Equals("Class_Terminate", StringComparison.InvariantCultureIgnoreCase))) ||
647-
// standard module built-in handlers (Excel specific):
648-
(host != null &&
649-
host.ApplicationName.Equals("Excel", StringComparison.InvariantCultureIgnoreCase) &&
650-
item.DeclarationType == DeclarationType.Procedure &&
651-
item.ParentDeclaration.DeclarationType == DeclarationType.ProceduralModule && (
652-
item.IdentifierName.Equals("auto_open", StringComparison.InvariantCultureIgnoreCase) ||
653-
item.IdentifierName.Equals("auto_close", StringComparison.InvariantCultureIgnoreCase))) ||
654-
// user handlers:
655-
(!item.IsBuiltIn &&
656-
item.DeclarationType == DeclarationType.Procedure &&
657-
handlerNames.Contains(item.IdentifierName))
658-
).ToList();
659-
660-
return handlers;
643+
(item.DeclarationType == DeclarationType.Procedure &&
644+
item.ParentDeclaration.DeclarationType == DeclarationType.ClassModule && (
645+
item.IdentifierName.Equals("Class_Initialize", StringComparison.InvariantCultureIgnoreCase) ||
646+
item.IdentifierName.Equals("Class_Terminate", StringComparison.InvariantCultureIgnoreCase))) ||
647+
// standard module built-in handlers (Excel specific):
648+
(host != null &&
649+
host.ApplicationName.Equals("Excel", StringComparison.InvariantCultureIgnoreCase) &&
650+
item.DeclarationType == DeclarationType.Procedure &&
651+
item.ParentDeclaration.DeclarationType == DeclarationType.ProceduralModule && (
652+
item.IdentifierName.Equals("auto_open", StringComparison.InvariantCultureIgnoreCase) ||
653+
item.IdentifierName.Equals("auto_close", StringComparison.InvariantCultureIgnoreCase))) ||
654+
// user handlers:
655+
(!item.IsBuiltIn &&
656+
item.DeclarationType == DeclarationType.Procedure &&
657+
handlerNames.Contains(item.IdentifierName))
658+
);
659+
660+
return new ConcurrentBag<Declaration>(handlers);
661661
}
662662
}
663663
}

0 commit comments

Comments
 (0)