boolean (@NotNull FoldRegion region, @NotNull EditorFoldingInfo info, @NotNull Map<TextRange, Boolean> rangeToExpandStatusMap, @NotNull Ref<? super FoldingUpdate.RegionInfo> matchingInfo) { matchingInfo.set(null); if (UPDATE_REGION.get(region) == Boolean.TRUE) { rangeToExpandStatusMap.put(TextRange.create(region.getStartOffset(), region.getEndOffset()), region.isExpanded()); return true; } PsiElement element = SlowOperations.allowSlowOperations(() -> info.getPsiElement(region)); if (element != null) { PsiFile containingFile = element.getContainingFile(); boolean isInjected = InjectedLanguageManager.getInstance(myProject).isInjectedFragment(containingFile); if (isInjected != myForInjected) return false; } boolean forceKeepRegion = myKeepCollapsedRegions && !region.isExpanded() && !regionOrGroupCanBeRemovedWhenCollapsed(region); Boolean storedCollapsedByDefault = region.getUserData(COLLAPSED_BY_DEFAULT); final Collection<FoldingUpdate.RegionInfo> regionInfos; if (element != null && !(regionInfos = myElementsToFoldMap.get(element)).isEmpty()) { FoldingUpdate.RegionInfo[] array = regionInfos.toArray(new FoldingUpdate.RegionInfo[0]); for (FoldingUpdate.RegionInfo regionInfo : array) { FoldingDescriptor descriptor = regionInfo.descriptor; TextRange range = descriptor.getRange(); if (TextRange.areSegmentsEqual(region, range)) { if (storedCollapsedByDefault != null && storedCollapsedByDefault != regionInfo.collapsedByDefault) { rangeToExpandStatusMap.put(range, !regionInfo.collapsedByDefault); return true; } else if (!region.getPlaceholderText().equals(descriptor.getPlaceholderText()) || range.getLength() < 2) { return true; } else { matchingInfo.set(regionInfo); return false; } } } if (!forceKeepRegion) { for (FoldingUpdate.RegionInfo regionInfo : regionInfos) { rangeToExpandStatusMap.put(regionInfo.descriptor.getRange(), region.isExpanded()); } return true; } } else { return !forceKeepRegion && !(region.getUserData(SIGNATURE) == null /* 'light' region */); } return false; }