624 }
625
626 @Override
627 public void saveState(IMemento memento) {
628 memento.putString(COLUMNS_KEY, IntStream.of(getColumnWidths()).mapToObj(Integer::toString)
629 .collect(Collectors.joining(COLUMNS_SEPARATOR)));
630 methodFormatter.saveState(memento.createChild(METHOD_FORMAT_KEY));
631 memento.putBoolean(THREAD_ROOT_KEY, threadRootAtTop);
632 memento.putBoolean(TREE_LAYOUT_KEY, treeLayout);
633 memento.putBoolean(REDUCED_TREE_KEY, reducedTree);
634 FrameSeparator frameSeparator = frameSeparatorManager.getFrameSeparator();
635 memento.putBoolean(FRAME_OPTIMIZATION_KEY, frameSeparator.isDistinguishFramesByOptimization());
636 memento.putString(FRAME_CATEGORIZATION_KEY, frameSeparator.getCategorization().name());
637 }
638
639 @Override
640 public void selectionChanged(IWorkbenchPart part, ISelection selection) {
641 if (selection instanceof IStructuredSelection) {
642 Object first = ((IStructuredSelection) selection).getFirstElement();
643 IItemCollection items = AdapterUtil.getAdapter(first, IItemCollection.class);
644 if (items != null && !items.equals(itemsToShow)) {
645 setItems(items);
646 }
647 }
648 }
649
650 private void setItems(IItemCollection items) {
651 itemsToShow = items;
652 rebuildModel();
653 }
654
655 private StacktraceModel createStacktraceModel() {
656 return new StacktraceModel(threadRootAtTop, frameSeparatorManager.getFrameSeparator(), itemsToShow);
657 }
658
659 private void rebuildModel() {
660 // Release old model before building the new
661 setViewerInput(null);
662 CompletableFuture<StacktraceModel> modelPreparer = getModelPreparer(createStacktraceModel(), !treeLayout);
663 modelPreparer.thenAcceptAsync(this::setModel, DisplayToolkit.inDisplayThread())
664 .exceptionally(StacktraceView::handleModelBuildException);
|
624 }
625
626 @Override
627 public void saveState(IMemento memento) {
628 memento.putString(COLUMNS_KEY, IntStream.of(getColumnWidths()).mapToObj(Integer::toString)
629 .collect(Collectors.joining(COLUMNS_SEPARATOR)));
630 methodFormatter.saveState(memento.createChild(METHOD_FORMAT_KEY));
631 memento.putBoolean(THREAD_ROOT_KEY, threadRootAtTop);
632 memento.putBoolean(TREE_LAYOUT_KEY, treeLayout);
633 memento.putBoolean(REDUCED_TREE_KEY, reducedTree);
634 FrameSeparator frameSeparator = frameSeparatorManager.getFrameSeparator();
635 memento.putBoolean(FRAME_OPTIMIZATION_KEY, frameSeparator.isDistinguishFramesByOptimization());
636 memento.putString(FRAME_CATEGORIZATION_KEY, frameSeparator.getCategorization().name());
637 }
638
639 @Override
640 public void selectionChanged(IWorkbenchPart part, ISelection selection) {
641 if (selection instanceof IStructuredSelection) {
642 Object first = ((IStructuredSelection) selection).getFirstElement();
643 IItemCollection items = AdapterUtil.getAdapter(first, IItemCollection.class);
644 if(items == null) {
645 setItems(ItemCollectionToolkit.build(Stream.empty()));
646 }
647 else if (!items.equals(itemsToShow)) {
648 setItems(items);
649 }
650 }
651 }
652
653 private void setItems(IItemCollection items) {
654 itemsToShow = items;
655 rebuildModel();
656 }
657
658 private StacktraceModel createStacktraceModel() {
659 return new StacktraceModel(threadRootAtTop, frameSeparatorManager.getFrameSeparator(), itemsToShow);
660 }
661
662 private void rebuildModel() {
663 // Release old model before building the new
664 setViewerInput(null);
665 CompletableFuture<StacktraceModel> modelPreparer = getModelPreparer(createStacktraceModel(), !treeLayout);
666 modelPreparer.thenAcceptAsync(this::setModel, DisplayToolkit.inDisplayThread())
667 .exceptionally(StacktraceView::handleModelBuildException);
|