From 7351210eca0c2619ee90cc2330e70ed350f55fe5 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Mon, 13 Aug 2018 17:53:56 +0200 Subject: [PATCH] small optimization: do not filter if map is empty, do not allocate condition - prefer to use old good "for" and allocate list for result only if need --- .../util/messages/impl/MessageBusImpl.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/platform/util/src/com/intellij/util/messages/impl/MessageBusImpl.java b/platform/util/src/com/intellij/util/messages/impl/MessageBusImpl.java index 02aed77abdf5..ce8aff98a361 100644 --- a/platform/util/src/com/intellij/util/messages/impl/MessageBusImpl.java +++ b/platform/util/src/com/intellij/util/messages/impl/MessageBusImpl.java @@ -4,7 +4,6 @@ package com.intellij.util.messages.impl; import com.intellij.openapi.Disposable; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProcessCanceledException; -import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Disposer; import com.intellij.util.ConcurrencyUtil; import com.intellij.util.EventDispatcher; @@ -333,15 +332,19 @@ public class MessageBusImpl implements MessageBus { } else { final Map map = asRoot().myWaitingBuses.get(); - if (map != null) { - List buses = ContainerUtil.filter(map.keySet(), new Condition() { - @Override - public boolean value(MessageBusImpl bus) { - return ensureAlive(map, bus); + if (map != null && !map.isEmpty()) { + List liveBuses = null; + for (MessageBusImpl bus : map.keySet()) { + if (ensureAlive(map, bus)) { + if (liveBuses == null) { + liveBuses = new SmartList(); + } + liveBuses.add(bus); } - }); - if (!buses.isEmpty()) { - pumpWaitingBuses(buses); + } + + if (liveBuses != null) { + pumpWaitingBuses(liveBuses); } } }