From 3ddd155e56841c2f7b443790fd6715b93fa770f4 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Wed, 3 May 2017 15:18:54 +0300 Subject: [PATCH] IDEA-170381 Hide empty middle packages bug --- .../ide/util/treeView/AbstractTreeUi.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUi.java b/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUi.java index bd43b9a374c9..9ef8180760cb 100644 --- a/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUi.java +++ b/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeUi.java @@ -2214,7 +2214,7 @@ public class AbstractTreeUi { boolean needToUpdate = false; NodeDescriptor loadedDesc = loadedChildren.getDescriptor(child); final NodeDescriptor childDescr; - if (!isValid(loadedDesc)) { + if (!isValid(loadedDesc, descriptor)) { childDescr = getTreeStructure().createDescriptor(child, descriptor); needToUpdate = true; } @@ -2674,7 +2674,7 @@ public class AbstractTreeUi { final LoadedChildren loaded = new LoadedChildren(loadedElements); for (final Object each : loadedElements) { NodeDescriptor existingDesc = getDescriptorFrom(getNodeForElement(each, true)); - final NodeDescriptor eachChildDescriptor = isValid(existingDesc) ? existingDesc : getTreeStructure().createDescriptor(each, updateInfo.getDescriptor()); + final NodeDescriptor eachChildDescriptor = isValid(existingDesc, updateInfo.getDescriptor()) ? existingDesc : getTreeStructure().createDescriptor(each, updateInfo.getDescriptor()); execute(new TreeRunnable("AbstractTreeUi.queueBackgroundUpdate") { @Override public void perform() { @@ -3286,6 +3286,19 @@ public class AbstractTreeUi { } } + /** + * Indicates whether the given {@code descriptor} is valid + * and its parent is equal to the specified {@code parent}. + * + * @param descriptor a descriptor to test + * @param parent an expected parent for the testing descriptor + * @return {@code true} if the specified descriptor is valid + */ + private boolean isValid(NodeDescriptor descriptor, NodeDescriptor parent) { + if (descriptor == null) return false; + if (parent != null && parent != descriptor.getParentDescriptor()) return false; + return isValid(getElementFromDescriptor(descriptor)); + } private boolean isValid(@Nullable NodeDescriptor descriptor) { return descriptor != null && isValid(getElementFromDescriptor(descriptor));