From e0d5e83aa48fda9fcb52ddcee59633c82a04ae02 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Thu, 27 Feb 2025 13:58:04 +0100 Subject: [PATCH] cleanup: reuse PsiDocumentManagerBase.getTopLevelDocument() (cherry picked from commit 5fa4c294603f5d2c88338d8c0ecc1fb493621a3b) (for review IJ-CR-158722) GitOrigin-RevId: 3633fd3e09b9697477be36e7f1109a5ecbeb0ab9 --- .../source/tree/injected/DocumentWindowImpl.java | 3 +-- platform/core-impl/api-dump-unreviewed.txt | 1 + .../completion/CompletionUtilCoreImpl.java | 3 ++- .../intellij/psi/impl/PsiDocumentManagerBase.java | 2 +- .../refactoring/rename/inplace/inplaceRename.kt | 3 ++- .../openapi/editor/impl/EditorActionManagerImpl.java | 6 +++--- .../openapi/editor/impl/EditorFactoryImpl.kt | 3 ++- .../openapi/editor/impl/TrailingSpacesStripper.java | 12 ++++-------- .../com/intellij/refactoring/rename/RenameUtil.java | 2 +- .../src/com/intellij/usages/ChunkExtractor.java | 5 ++--- 10 files changed, 19 insertions(+), 21 deletions(-) diff --git a/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/DocumentWindowImpl.java b/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/DocumentWindowImpl.java index a07eaa9ffdb4..f6beea683de3 100644 --- a/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/DocumentWindowImpl.java +++ b/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/DocumentWindowImpl.java @@ -884,8 +884,7 @@ public final class DocumentWindowImpl extends UserDataHolderBase implements Disp @Override public boolean equals(Object o) { - if (!(o instanceof DocumentWindowImpl window)) return false; - return myDelegate.equals(window.getDelegate()) && areRangesEqual(window); + return o instanceof DocumentWindowImpl window && myDelegate.equals(window.getDelegate()) && areRangesEqual(window); } @Override diff --git a/platform/core-impl/api-dump-unreviewed.txt b/platform/core-impl/api-dump-unreviewed.txt index bc77f5fa0230..3752fb6088d2 100644 --- a/platform/core-impl/api-dump-unreviewed.txt +++ b/platform/core-impl/api-dump-unreviewed.txt @@ -2299,6 +2299,7 @@ a:com.intellij.psi.impl.PsiDocumentManagerBase - getLastCommittedText(com.intellij.openapi.editor.Document):java.lang.CharSequence - getPsiFile(com.intellij.openapi.editor.Document):com.intellij.psi.PsiFile - getSynchronizer():com.intellij.psi.impl.PsiToDocumentSynchronizer +- s:getTopLevelDocument(com.intellij.openapi.editor.Document):com.intellij.openapi.editor.Document - getUncommittedDocuments():com.intellij.openapi.editor.Document[] - hasEventSystemEnabledUncommittedDocuments():Z - hasUncommitedDocuments():Z diff --git a/platform/core-impl/src/com/intellij/codeInsight/completion/CompletionUtilCoreImpl.java b/platform/core-impl/src/com/intellij/codeInsight/completion/CompletionUtilCoreImpl.java index 6de3d72c1b61..1f07148965b9 100644 --- a/platform/core-impl/src/com/intellij/codeInsight/completion/CompletionUtilCoreImpl.java +++ b/platform/core-impl/src/com/intellij/codeInsight/completion/CompletionUtilCoreImpl.java @@ -7,6 +7,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiCompiledFile; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; +import com.intellij.psi.impl.PsiDocumentManagerBase; import com.intellij.psi.impl.light.LightElement; import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; @@ -33,7 +34,7 @@ public final class CompletionUtilCoreImpl { Document document = containingFile.getViewProvider().getDocument(); if (document != null) { - Document hostDocument = document instanceof DocumentWindow ? ((DocumentWindow)document).getDelegate() : document; + Document hostDocument = PsiDocumentManagerBase.getTopLevelDocument(document); OffsetTranslator translator = hostDocument.getUserData(OffsetTranslator.RANGE_TRANSLATION); if (translator != null) { if (document instanceof DocumentWindow) { diff --git a/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java b/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java index ed06a5760539..d0e00c08f3d4 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java +++ b/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java @@ -918,7 +918,7 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen && !isInUncommittedSet(document); } - private static @NotNull Document getTopLevelDocument(@NotNull Document document) { + public static @NotNull Document getTopLevelDocument(@NotNull Document document) { return document instanceof DocumentWindow ? ((DocumentWindow)document).getDelegate() : document; } diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/inplaceRename.kt b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/inplaceRename.kt index 7236d0b344ee..bf8f01d9aa8c 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/inplaceRename.kt +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/inplaceRename.kt @@ -43,6 +43,7 @@ import com.intellij.openapi.util.text.HtmlBuilder import com.intellij.openapi.util.text.HtmlChunk import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiFile +import com.intellij.psi.impl.PsiDocumentManagerBase import com.intellij.psi.search.LocalSearchScope import com.intellij.refactoring.InplaceRefactoringContinuation import com.intellij.refactoring.RefactoringBundle @@ -85,7 +86,7 @@ internal fun inplaceRename(project: Project, editor: Editor, target: RenameTarge ?: return false val hostEditor: Editor = (editor as? EditorWindow)?.delegate ?: editor - val hostDocument: Document = (document as? DocumentWindow)?.delegate ?: document + val hostDocument: Document = PsiDocumentManagerBase.getTopLevelDocument(document) val hostFile: PsiFile = PsiDocumentManager.getInstance(project).getPsiFile(hostDocument) ?: return false diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorActionManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorActionManagerImpl.java index 19163369d824..bcec8c1c0594 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorActionManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorActionManagerImpl.java @@ -1,13 +1,13 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.openapi.editor.impl; -import com.intellij.injected.editor.DocumentWindow; import com.intellij.openapi.actionSystem.ActionManager; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.EditorBundle; import com.intellij.openapi.editor.ReadOnlyFragmentModificationException; import com.intellij.openapi.editor.actionSystem.*; import com.intellij.openapi.ui.Messages; +import com.intellij.psi.impl.PsiDocumentManagerBase; import org.jetbrains.annotations.NotNull; final class EditorActionManagerImpl extends EditorActionManager { @@ -36,7 +36,7 @@ final class EditorActionManagerImpl extends EditorActionManager { @Override public ReadonlyFragmentModificationHandler getReadonlyFragmentModificationHandler(final @NotNull Document document) { - final Document doc = document instanceof DocumentWindow ? ((DocumentWindow)document).getDelegate() : document; + final Document doc = PsiDocumentManagerBase.getTopLevelDocument(document); final ReadonlyFragmentModificationHandler docHandler = doc instanceof DocumentImpl ? ((DocumentImpl)doc).getReadonlyFragmentModificationHandler() : null; return docHandler == null ? myReadonlyFragmentsHandler : docHandler; @@ -44,7 +44,7 @@ final class EditorActionManagerImpl extends EditorActionManager { @Override public void setReadonlyFragmentModificationHandler(final @NotNull Document document, final ReadonlyFragmentModificationHandler handler) { - final Document doc = document instanceof DocumentWindow ? ((DocumentWindow)document).getDelegate() : document; + final Document doc = PsiDocumentManagerBase.getTopLevelDocument(document); if (doc instanceof DocumentImpl) { ((DocumentImpl)document).setReadonlyFragmentModificationHandler(handler); } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorFactoryImpl.kt b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorFactoryImpl.kt index a66555a16ddf..5ee05faab2ec 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorFactoryImpl.kt +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorFactoryImpl.kt @@ -32,6 +32,7 @@ import com.intellij.openapi.project.ProjectCloseListener import com.intellij.openapi.project.ProjectManager import com.intellij.openapi.util.Disposer import com.intellij.openapi.vfs.VirtualFile +import com.intellij.psi.impl.PsiDocumentManagerBase import com.intellij.util.EventDispatcher import com.intellij.util.concurrency.annotations.RequiresEdt import com.intellij.util.text.CharArrayCharSequence @@ -175,7 +176,7 @@ class EditorFactoryImpl(coroutineScope: CoroutineScope?) : EditorFactory() { } private fun createEditor(document: Document, isViewer: Boolean, project: Project?, kind: EditorKind): EditorImpl { - val hostDocument = if (document is DocumentWindow) document.delegate else document + val hostDocument = PsiDocumentManagerBase.getTopLevelDocument(document) return doCreateEditor(project = project, document = hostDocument, isViewer = isViewer, kind = kind, file = null, highlighter = null, afterCreation = null) } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/TrailingSpacesStripper.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/TrailingSpacesStripper.java index 8a02d3dc13da..305c483d03d3 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/TrailingSpacesStripper.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/TrailingSpacesStripper.java @@ -2,7 +2,6 @@ package com.intellij.openapi.editor.impl; import com.intellij.ide.DataManager; -import com.intellij.injected.editor.DocumentWindow; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.application.AccessToken; @@ -23,6 +22,7 @@ import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.ShutDownTracker; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.IdeFocusManager; +import com.intellij.psi.impl.PsiDocumentManagerBase; import com.intellij.util.ArrayUtilRt; import com.intellij.util.SlowOperations; import com.intellij.util.text.CharArrayUtil; @@ -32,8 +32,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.awt.*; -import java.util.List; import java.util.*; +import java.util.List; public final class TrailingSpacesStripper implements FileDocumentManagerListener { private static final Key DISABLE_FOR_FILE_KEY = Key.create("DISABLE_TRAILING_SPACE_STRIPPER_FOR_FILE_KEY"); @@ -136,9 +136,7 @@ public final class TrailingSpacesStripper implements FileDocumentManagerListener // clears line modification flags except lines which was not stripped because the caret was in the way @ApiStatus.Internal public void clearLineModificationFlags(@NotNull Document document) { - if (document instanceof DocumentWindow) { - document = ((DocumentWindow)document).getDelegate(); - } + document = PsiDocumentManagerBase.getTopLevelDocument(document); if (!(document instanceof DocumentImpl)) { return; } @@ -206,9 +204,7 @@ public final class TrailingSpacesStripper implements FileDocumentManagerListener @ApiStatus.Internal public static boolean strip(@NotNull Document document, boolean inChangedLinesOnly, boolean skipCaretLines) { - if (document instanceof DocumentWindow) { - document = ((DocumentWindow)document).getDelegate(); - } + document = PsiDocumentManagerBase.getTopLevelDocument(document); if (!(document instanceof DocumentImpl)) { return true; } diff --git a/platform/refactoring/src/com/intellij/refactoring/rename/RenameUtil.java b/platform/refactoring/src/com/intellij/refactoring/rename/RenameUtil.java index 4091db26d876..fd1be5c3209e 100644 --- a/platform/refactoring/src/com/intellij/refactoring/rename/RenameUtil.java +++ b/platform/refactoring/src/com/intellij/refactoring/rename/RenameUtil.java @@ -320,7 +320,7 @@ public final class RenameUtil { TextRange replaceRange = TextRange.create(segment); // re-map usages to upper host from injected document to avoid duplicated replacements - while (document instanceof DocumentWindow documentWindow) { + if (document instanceof DocumentWindow documentWindow) { replaceRange = documentWindow.injectedToHost(replaceRange); document = documentWindow.getDelegate(); } diff --git a/platform/usageView/src/com/intellij/usages/ChunkExtractor.java b/platform/usageView/src/com/intellij/usages/ChunkExtractor.java index 7fea13caa4db..b140132dbea3 100644 --- a/platform/usageView/src/com/intellij/usages/ChunkExtractor.java +++ b/platform/usageView/src/com/intellij/usages/ChunkExtractor.java @@ -23,6 +23,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; +import com.intellij.psi.impl.PsiDocumentManagerBase; import com.intellij.psi.tree.IElementType; import com.intellij.reference.SoftReference; import com.intellij.usageView.UsageTreeColors; @@ -105,9 +106,7 @@ public final class ChunkExtractor { int absoluteStartOffset = usageInfo2UsageAdapter.getNavigationOffset(); if (absoluteStartOffset == -1) return TextChunk.EMPTY_ARRAY; - Document visibleDocument = myDocument instanceof DocumentWindow - ? ((DocumentWindow)myDocument).getDelegate() - : myDocument; + Document visibleDocument = PsiDocumentManagerBase.getTopLevelDocument(myDocument); int visibleStartOffset = myDocument instanceof DocumentWindow ? ((DocumentWindow)myDocument).injectedToHost(absoluteStartOffset) : absoluteStartOffset;