void (@NotNull RunConfigurationBase configuration, @NotNull ProcessHandler handler, @Nullable RunnerSettings runnerSettings) { if (runnerSettings == null && isApplicableFor(configuration)) { Disposable disposable = Disposer.newDisposable(); final MessageBusConnection connection = configuration.getProject().getMessageBus().connect(); TestDiscoveryDataSocketListener listener = SOCKET_LISTENER_KEY.get(configuration); if (listener == null) { final Alarm processTracesAlarm = new Alarm(Alarm.ThreadToUse.POOLED_THREAD, disposable); connection.subscribe(SMTRunnerEventsListener.TEST_STATUS, new SMTRunnerEventsAdapter() { @Override public void onTestingFinished(@NotNull SMTestProxy.SMRootTestProxy testsRoot) { if (testsRoot.getHandler() != handler) return; processTracesAlarm.cancelAllRequests(); processTracesAlarm.addRequest(() -> processTracesFile((JavaTestConfigurationWithDiscoverySupport)configuration), 0); connection.disconnect(); Disposer.dispose(disposable); } }); } else { listener.attach(handler); } } }