Collection<StructureViewTreeElement> (@NotNull PsiElement rootElement, @NotNull Collection<StructureViewTreeElement> originalElements) { if (rootElement instanceof PsiFileEx && !((PsiFileEx)rootElement).isContentsLoaded() || rootElement instanceof StubBasedPsiElement && ((StubBasedPsiElement<?>)rootElement).getStub() != null) { return originalElements; } List<StructureViewTreeElement> physicalElements = ContainerUtil.filter(originalElements, element -> { Object value = element.getValue(); return !(value instanceof StubBasedPsiElement) || ((StubBasedPsiElement<?>)value).getStub() == null; }); Set<TextRange> childrenRanges = ContainerUtil.map2SetNotNull(physicalElements, element -> { Object value = element.getValue(); return value instanceof PsiElement ? getTextRange((PsiElement)value) : null; }); Collection<CustomRegionTreeElement> customRegions = collectCustomRegions(rootElement, childrenRanges); if (customRegions.size() > 0) { List<StructureViewTreeElement> result = new ArrayList<>(customRegions); for (StructureViewTreeElement element : physicalElements) { ProgressManager.checkCanceled(); boolean isInCustomRegion = false; for (CustomRegionTreeElement customRegion : customRegions) { if (customRegion.containsElement(element)) { customRegion.addChild(element); isInCustomRegion = true; break; } } if (!isInCustomRegion) result.add(element); } return result; } return originalElements; }