void (final TreeSelectionEvent e) { if (myInsideChange>0) { return; } final Set<ComponentPtr> selectedElements = TreeUtil.collectSelectedObjectsOfType(myTree, ComponentPtrDescriptor.class) .stream() .map(descriptor -> descriptor.getElement()) .collect(Collectors.toSet()); myInsideChange++; try{ FormEditingUtil.clearSelection(myEditor.getRootContainer()); boolean hasComponentInTab = false; int count = 0; for(ComponentPtr ptr: selectedElements) { ptr.validate(); if(ptr.isValid()) { final RadComponent component=ptr.getComponent(); LOG.assertTrue(component!=null); if (!hasComponentInTab) { hasComponentInTab = FormEditingUtil.selectComponent(myEditor, component); } else { component.setSelected(true); } if (++count == selectedElements.size()) { myEditor.scrollComponentInView(component); } } } // Notify ComponentTree that selected component changed myEditor.fireSelectedComponentChanged(); }finally{ myInsideChange--; } }