void (List<Runnable> runOnEdt, StartBuildEvent startBuildEvent) { long currentTime = System.currentTimeMillis(); DefaultListModel<AbstractViewManager.BuildInfo> listModel = (DefaultListModel<AbstractViewManager.BuildInfo>)myBuildsList.getModel(); boolean clearAll = !listModel.isEmpty(); List<AbstractViewManager.BuildInfo> sameBuildsToClear = new SmartList<>(); for (int i = 0; i < listModel.getSize(); i++) { AbstractViewManager.BuildInfo build = listModel.getElementAt(i); boolean sameBuildKind = build.getWorkingDir().equals(startBuildEvent.getBuildDescriptor().getWorkingDir()); boolean differentBuildsFromSameBuildGroup = !build.getId().equals(startBuildEvent.getBuildDescriptor().getId()) && build.getGroupId() != null && build.getGroupId().equals(startBuildEvent.getBuildDescriptor().getGroupId()); if (!build.isRunning() && sameBuildKind && !differentBuildsFromSameBuildGroup) { sameBuildsToClear.add(build); } boolean buildFinishedRecently = currentTime - build.endTime < TimeUnit.SECONDS.toMillis(1); if (build.isRunning() || !sameBuildKind && buildFinishedRecently || differentBuildsFromSameBuildGroup) { clearAll = false; } } if (clearAll) { myBuildsMap.clear(); SmartList<BuildView> viewsToDispose = new SmartList<>(myViewMap.values()); runOnEdt.add(() -> viewsToDispose.forEach(Disposer::dispose)); myViewMap.clear(); listModel.clear(); runOnEdt.add(() -> { myBuildsList.setVisible(false); myThreeComponentsSplitter.setFirstComponent(null); setActiveView(null); }); myToolbarActions.removeAll(); isFirstErrorShown.set(false); } else { sameBuildsToClear.forEach(info -> { BuildView buildView = myViewMap.remove(info); if (buildView != null) { runOnEdt.add(() -> Disposer.dispose(buildView)); } listModel.removeElement(info); }); } }