diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/outline/LSSymbolsContentProvider.java b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/outline/LSSymbolsContentProvider.java index 069e263ab..4ca90cff6 100644 --- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/outline/LSSymbolsContentProvider.java +++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/outline/LSSymbolsContentProvider.java @@ -338,16 +338,22 @@ protected void refreshTreeContentFromLS() { return; } + final int EXPAND_ROOT_LEVEL = 2; // Expansion level that displays root node and its children if (isQuickOutline) { viewer.refresh(); + viewer.expandToLevel(EXPAND_ROOT_LEVEL); } else { TreePath[] expandedElements = viewer.getExpandedTreePaths(); TreePath[] initialSelection = ((ITreeSelection) viewer.getSelection()).getPaths(); viewer.refresh(); - viewer.setExpandedTreePaths(Arrays.stream(expandedElements).map(symbolsModel::toUpdatedSymbol) + if (expandedElements.length > 0) { + viewer.setExpandedTreePaths(Arrays.stream(expandedElements).map(symbolsModel::toUpdatedSymbol) .filter(Objects::nonNull).toArray(TreePath[]::new)); - viewer.setSelection(new TreeSelection(Arrays.stream(initialSelection) - .map(symbolsModel::toUpdatedSymbol).filter(Objects::nonNull).toArray(TreePath[]::new))); + viewer.setSelection(new TreeSelection(Arrays.stream(initialSelection) + .map(symbolsModel::toUpdatedSymbol).filter(Objects::nonNull).toArray(TreePath[]::new))); + } else { + viewer.expandToLevel(EXPAND_ROOT_LEVEL); + } } if (linkWithEditor) {