State () { List<String> services = ContainerUtil.mapNotNull(myGroups.getOrDefault(ToolWindowId.SERVICES, Collections.emptyList()), contributor -> contributor.getViewDescriptor(myProject).getId()); List<String> includedByDefault = new ArrayList<>(); List<String> excludedByDefault = new ArrayList<>(); for (ServiceViewContributor<?> contributor : CONTRIBUTOR_EP_NAME.getExtensionList()) { String id = contributor.getViewDescriptor(myProject).getId(); if (id == null) continue; if (getContributorToolWindowDescriptor(contributor).isExcludedByDefault()) { excludedByDefault.add(id); } else { includedByDefault.add(id); } } myState.included.clear(); myState.included.addAll(excludedByDefault); myState.included.retainAll(services); myState.excluded.clear(); myState.excluded.addAll(includedByDefault); myState.excluded.removeAll(services); ContainerUtil.retainAll(myState.viewStates, state -> myGroups.containsKey(state.groupId)); for (ServiceViewContentHolder holder : myContentHolders) { ContainerUtil.retainAll(myState.viewStates, state -> !holder.toolWindowId.equals(state.groupId)); ServiceViewFilter mainFilter = holder.mainView.getModel().getFilter(); ServiceViewState mainState = new ServiceViewState(); myState.viewStates.add(mainState); holder.mainView.saveState(mainState); mainState.groupId = holder.toolWindowId; mainState.treeStateElement = new Element("root"); mainState.treeState.writeExternal(mainState.treeStateElement); mainState.clearTreeState(); List<ServiceView> processedViews = new SmartList<>(); for (Content content : holder.contentManager.getContents()) { ServiceView serviceView = getServiceView(content); if (serviceView == null || isMainView(serviceView)) continue; ServiceViewState viewState = new ServiceViewState(); processedViews.add(serviceView); myState.viewStates.add(viewState); serviceView.saveState(viewState); viewState.groupId = holder.toolWindowId; viewState.isSelected = holder.contentManager.isSelected(content); ServiceViewModel viewModel = serviceView.getModel(); if (viewModel instanceof ServiceListModel) { viewState.id = content.getDisplayName(); } ServiceViewFilter parentFilter = viewModel.getFilter().getParent(); if (parentFilter != null && !parentFilter.equals(mainFilter)) { for (int i = 0; i < processedViews.size(); i++) { ServiceView parentView = processedViews.get(i); if (parentView.getModel().getFilter().equals(parentFilter)) { viewState.parentView = i; break; } } } viewState.treeStateElement = new Element("root"); viewState.treeState.writeExternal(viewState.treeStateElement); viewState.clearTreeState(); } } return myState; }