move invalid injected regions handling logic (IDEA-CR-58436)

GitOrigin-RevId: d12b95d0445310b7710305247fc27e5a073e8ab4
This commit is contained in:
Dennis Ushakov
2020-02-17 08:36:15 +00:00
committed by intellij-monorepo-bot
parent 3c3beaac4c
commit 6ae9af85cb
3 changed files with 9 additions and 10 deletions
@@ -24,7 +24,7 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.psi.*;
import com.intellij.psi.impl.DebugUtil;
import com.intellij.psi.impl.source.tree.injected.FoldingModelWindow;
import com.intellij.psi.impl.source.tree.injected.FoldingRegionWindow;
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
import com.intellij.psi.util.CachedValue;
import com.intellij.psi.util.CachedValueProvider;
@@ -171,7 +171,8 @@ public class FoldingUpdate {
});
EditorFoldingInfo info = EditorFoldingInfo.get(editor);
for (FoldRegion region : editor.getFoldingModel().getAllFoldRegions()) {
if (FoldingModelWindow.isOutdatedInjectedRegion(region)) {
FoldingRegionWindow injectedRegion = FoldingRegionWindow.getInjectedRegion(region);
if (injectedRegion != null && !injectedRegion.isValid()) {
info.removeRegion(region);
}
}
@@ -24,8 +24,7 @@ import java.util.List;
/**
* @author cdr
*/
@ApiStatus.Internal
public class FoldingModelWindow implements FoldingModelEx, ModificationTracker {
class FoldingModelWindow implements FoldingModelEx, ModificationTracker {
private final FoldingModelEx myDelegate;
private final DocumentWindow myDocumentWindow;
private final EditorWindow myEditorWindow;
@@ -107,11 +106,6 @@ public class FoldingModelWindow implements FoldingModelEx, ModificationTracker {
return window != null && window.getEditor() == myEditorWindow ? window : null;
}
public static boolean isOutdatedInjectedRegion(@NotNull FoldRegion hostRegion) {
FoldingRegionWindow window = hostRegion.getUserData(FOLD_REGION_WINDOW);
return window != null && !((DocumentWindow)window.getEditor().getDocument()).isValid();
}
@Override
public void runBatchFoldingOperation(@NotNull Runnable operation, boolean allowMovingCaret, boolean keepRelativeCaretPosition) {
myDelegate.runBatchFoldingOperation(operation, allowMovingCaret, keepRelativeCaretPosition);
@@ -138,7 +132,7 @@ public class FoldingModelWindow implements FoldingModelEx, ModificationTracker {
return FoldRegion.EMPTY_ARRAY; //todo implement
}
private static final Key<FoldingRegionWindow> FOLD_REGION_WINDOW = Key.create("FOLD_REGION_WINDOW");
static final Key<FoldingRegionWindow> FOLD_REGION_WINDOW = Key.create("FOLD_REGION_WINDOW");
@Override
public FoldRegion createFoldRegion(int startOffset, int endOffset, @NotNull String placeholder, FoldingGroup group, boolean neverExpands) {
TextRange hostRange = myDocumentWindow.injectedToHost(new TextRange(startOffset, endOffset));
@@ -76,4 +76,8 @@ public class FoldingRegionWindow extends RangeMarkerWindow implements FoldRegion
public void setPlaceholderText(@NotNull String text) {
myHostRegion.setPlaceholderText(text);
}
public static FoldingRegionWindow getInjectedRegion(@NotNull FoldRegion hostRegion) {
return hostRegion.getUserData(FoldingModelWindow.FOLD_REGION_WINDOW);
}
}