void (@NotNull ArrayChunk chunk, @NotNull PyDebugValue originalDebugValue, @NotNull DataViewStrategy strategy, boolean modifier) { PyDebugValue debugValue = chunk.getValue(); AsyncArrayTableModel model = strategy.createTableModel(chunk.getRows(), chunk.getColumns(), this, debugValue); model.addToCache(chunk); UIUtil.invokeLaterIfNeeded(() -> { myTable.setModel(model, modifier); // Debugger generates a temporary name for every slice evaluation, so we should select a correct name for it @NlsSafe String realName = debugValue.getName().equals(originalDebugValue.getTempName()) ? originalDebugValue.getName() : chunk.getSlicePresentation(); String shownName = realName; if (modifier && !myOriginalVarName.equals(shownName)) { shownName = String.format(MODIFIED_VARIABLE_FORMAT, myOriginalVarName); } else { myOriginalVarName = realName; } mySliceTextField.setText(myOriginalVarName); // Modifier flag means that variable changes are temporary myModifiedVarName = realName; if (mySliceTextField.getEditor() != null) { mySliceTextField.getCaretModel().moveToOffset(myOriginalVarName.length()); } for (Listener listener : myListeners) { listener.onNameChanged(shownName); } myFormatTextField.setText(chunk.getFormat()); ColoredCellRenderer cellRenderer = strategy.createCellRenderer(Double.MIN_VALUE, Double.MAX_VALUE, chunk); cellRenderer.setColored(myColored); ((AsyncArrayTableModel)myTable.getModel()).fireTableDataChanged(); ((AsyncArrayTableModel)myTable.getModel()).fireTableCellUpdated(0, 0); if (myTable.getColumnCount() > 0) { myTable.setDefaultRenderer(myTable.getColumnClass(0), cellRenderer); } myTable.setShowColumns(strategy.showColumnHeader()); }); }