void (@Nullable XStackFrame frame, @NotNull List<PyAsyncValue<String>> pyAsyncValues) { PyDebugValueExecutionService.getInstance(myProject).submitTask(this, () -> { try { List<String> evaluationExpressions = new ArrayList<>(); for (PyAsyncValue<String> asyncValue : pyAsyncValues) { evaluationExpressions.add(GetVariableCommand.composeName(asyncValue.getDebugValue())); } final int seq = getNextFullValueSeq(); myCallbackHashMap.put(seq, pyAsyncValues); getPythonConsoleBackendClient().loadFullValue(seq, evaluationExpressions); // previously `loadFullValue()` might return `List<PyDebugValue>` but this is no longer true } catch (CommunicationClosedException | PyConsoleProcessFinishedException | TException e) { for (PyAsyncValue<String> asyncValue : pyAsyncValues) { PyDebugValue value = asyncValue.getDebugValue(); for (XValueNode node : value.getValueNodes()) { if (node != null && !node.isObsolete()) { if (e.getMessage().startsWith("Timeout") || e.getMessage().startsWith("Console already exited")) { value.updateNodeValueAfterLoading(node, " ", "", PyBundle.message("debugger.variables.view.loading.timed.out")); } else { LOG.error(e); } } } } } }); }