mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
move invalid injected regions handling logic (IDEA-CR-58436)
GitOrigin-RevId: d12b95d0445310b7710305247fc27e5a073e8ab4
This commit is contained in:
committed by
intellij-monorepo-bot
parent
3c3beaac4c
commit
6ae9af85cb
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-8
@@ -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));
|
||||
|
||||
+4
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user