35
35
* @since 2201.1.1
36
36
*/
37
37
public class EventSyncPubSubHolder {
38
+
38
39
private static final LanguageServerContext .Key <EventSyncPubSubHolder > SUBSCRIBERS_HOLDER_KEY =
39
40
new LanguageServerContext .Key <>();
40
41
private static final Map <EventKind , EventPublisher > publisherMap = new HashMap <>();
@@ -56,8 +57,8 @@ private void initialize(LSClientLogger lsClientLogger) {
56
57
57
58
ServiceLoader <EventPublisher > publishers = ServiceLoader .load (EventPublisher .class );
58
59
publishers .forEach (eventPublisher -> {
59
- for ( EventSubscriber eventSubscriber : eventSubscribersMap . get (eventPublisher .getKind ())) {
60
- publisherMap . put (eventPublisher .getKind (), eventPublisher );
60
+ publisherMap . put (eventPublisher .getKind (), eventPublisher );
61
+ for ( EventSubscriber eventSubscriber : eventSubscribersMap . get (eventPublisher .getKind ())) {
61
62
eventPublisher .subscribe (eventSubscriber );
62
63
lsClientLogger .logTrace (String .format ("%s subscribed to %s" , eventSubscriber .getName (),
63
64
eventPublisher .getName ()));
@@ -73,9 +74,13 @@ private void initialize(LSClientLogger lsClientLogger) {
73
74
public static EventSyncPubSubHolder getInstance (LanguageServerContext serverContext ) {
74
75
EventSyncPubSubHolder subscribersHolder = serverContext .get (SUBSCRIBERS_HOLDER_KEY );
75
76
if (subscribersHolder == null ) {
76
- subscribersHolder = new EventSyncPubSubHolder (serverContext );
77
+ synchronized (SUBSCRIBERS_HOLDER_KEY ) {
78
+ subscribersHolder = serverContext .get (SUBSCRIBERS_HOLDER_KEY );
79
+ if (subscribersHolder == null ) {
80
+ subscribersHolder = new EventSyncPubSubHolder (serverContext );
81
+ }
82
+ }
77
83
}
78
-
79
84
return subscribersHolder ;
80
85
}
81
86
0 commit comments