From 853cd069362ddf73f0c1cfd1398043ed6fd73039 Mon Sep 17 00:00:00 2001 From: Andrey Zaytsev Date: Sun, 23 Nov 2025 17:05:26 +0100 Subject: [PATCH] refactor [platform]: introduce PsiDocumentManagerEx and remove downcasts to PsiDocumentManagerBase GitOrigin-RevId: 2870b0fc778ee4d9349dd465db92107abd25dbbd --- grid/core-impl/src/datagrid/GridUtilCore.java | 3 +- .../extractMethod/preview/PreviewPanel.java | 3 +- .../JavaInjectedFileChangesHandler.kt | 3 +- .../impl/quickfix/I18nQuickFixTest.java | 3 +- .../java/index/ConcurrentIndexTest.java | 3 +- .../PsiJavaModuleModificationTrackerTest.kt | 2 +- .../impl/TextEditorBackgroundHighlighter.java | 5 +- .../injected/InjectedLanguageManagerImpl.java | 3 +- .../tree/injected/InjectedLanguageUtil.java | 2 +- .../tree/injected/InjectionRegistrarImpl.java | 17 ++-- .../FormattingDocumentModelImpl.java | 3 +- .../PostprocessReformattingAspectImpl.java | 3 +- platform/core-impl/api-dump-experimental.txt | 2 +- platform/core-impl/api-dump-unreviewed.txt | 9 +- .../core/MockDocumentCommitProcessor.java | 4 +- .../intellij/pom/core/impl/PomModelImpl.java | 4 +- .../pom/wrappers/PsiEventWrapperAspect.java | 3 +- .../psi/AbstractFileViewProvider.java | 2 +- .../psi/SingleRootFileViewProvider.java | 5 +- .../psi/impl/ChangedPsiRangeUtil.java | 3 +- .../src/com/intellij/psi/impl/DiffLog.java | 2 +- .../psi/impl/DocumentCommitProcessor.java | 2 +- .../psi/impl/PsiDocumentManagerBase.java | 51 +++++++++-- .../psi/impl/PsiDocumentManagerEx.java | 86 +++++++++++++++++++ .../psi/impl/PsiToDocumentSynchronizer.java | 4 +- .../impl/smartPointers/FileElementInfo.java | 3 +- .../InjectedSelfElementInfo.java | 5 +- .../impl/smartPointers/SelfElementInfo.java | 5 +- .../smartPointers/SmartPointerManagerEx.java | 3 +- .../SmartPointerManagerImpl.java | 7 +- .../SmartPsiElementPointerImpl.java | 3 +- .../intellij/psi/impl/source/PsiFileImpl.java | 4 +- .../intellij/psi/impl/DocumentCommitThread.kt | 20 ++--- .../IndentAwareInjectedFileChangesHandler.kt | 3 +- .../application/impl/AppUIExecutorImpl.kt | 6 +- .../rw/CommittedDocumentsConstraint.kt | 3 +- .../testFramework/EditorListenerTracker.java | 3 +- .../testFramework/HeavyPlatformTestCase.java | 3 +- .../intellij/testFramework/TestObservation.kt | 3 +- .../plugins/groovy/lang/GroovyStubsTest.java | 3 +- .../tests/utils/projectRoutines.kt | 5 +- .../idea/perf/suite/performanceSuite.kt | 3 +- .../MavenModelVersionSyncronizerImpl.kt | 3 +- .../XmlTagNameSynchronizerImpl.java | 5 +- 44 files changed, 228 insertions(+), 89 deletions(-) create mode 100644 platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerEx.java diff --git a/grid/core-impl/src/datagrid/GridUtilCore.java b/grid/core-impl/src/datagrid/GridUtilCore.java index db0a5b199cd4..cbacc2d52c71 100644 --- a/grid/core-impl/src/datagrid/GridUtilCore.java +++ b/grid/core-impl/src/datagrid/GridUtilCore.java @@ -12,6 +12,7 @@ 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.impl.PsiDocumentManagerEx; import com.intellij.testFramework.LightVirtualFileBase; import com.intellij.util.ObjectUtils; import com.intellij.util.PathUtil; @@ -177,6 +178,6 @@ public class GridUtilCore { if (oldFile instanceof LightVirtualFileBase lf) { lf.setValid(false); } - ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(psiFile.getProject())).associatePsi(document, psiFile); + ((PsiDocumentManagerEx)PsiDocumentManager.getInstance(psiFile.getProject())).associatePsi(document, psiFile); } } diff --git a/java/java-impl-refactorings/src/com/intellij/refactoring/extractMethod/preview/PreviewPanel.java b/java/java-impl-refactorings/src/com/intellij/refactoring/extractMethod/preview/PreviewPanel.java index 7cd875e1c9c3..358cab67f73e 100644 --- a/java/java-impl-refactorings/src/com/intellij/refactoring/extractMethod/preview/PreviewPanel.java +++ b/java/java-impl-refactorings/src/com/intellij/refactoring/extractMethod/preview/PreviewPanel.java @@ -16,6 +16,7 @@ import com.intellij.openapi.util.Disposer; import com.intellij.pom.Navigatable; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import com.intellij.refactoring.extractMethod.ExtractMethodProcessor; import com.intellij.ui.*; import com.intellij.ui.content.Content; @@ -140,7 +141,7 @@ class PreviewPanel extends BorderLayoutPanel implements Disposable, UiDataProvid myUpdateAlarm.cancelAllRequests(); myUpdateAlarm.addRequest(() -> { if (myProject.isDisposed()) return; - PsiDocumentManagerBase documentManager = (PsiDocumentManagerBase)PsiDocumentManager.getInstance(myProject); + PsiDocumentManagerEx documentManager = (PsiDocumentManagerEx)PsiDocumentManager.getInstance(myProject); documentManager.cancelAndRunWhenAllCommitted("ExtractMethodPreview", this::updateImmediately); }, 300); } diff --git a/java/java-impl/src/com/intellij/psi/impl/source/tree/injected/JavaInjectedFileChangesHandler.kt b/java/java-impl/src/com/intellij/psi/impl/source/tree/injected/JavaInjectedFileChangesHandler.kt index f9f1ac478b87..8f45448242bc 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/tree/injected/JavaInjectedFileChangesHandler.kt +++ b/java/java-impl/src/com/intellij/psi/impl/source/tree/injected/JavaInjectedFileChangesHandler.kt @@ -16,6 +16,7 @@ import com.intellij.psi.* import com.intellij.psi.PsiLanguageInjectionHost.Shred import com.intellij.psi.codeStyle.CodeStyleManager import com.intellij.psi.impl.PsiDocumentManagerBase +import com.intellij.psi.impl.PsiDocumentManagerEx import com.intellij.psi.impl.source.resolve.FileContextUtil import com.intellij.psi.impl.source.tree.injected.changesHandler.* import com.intellij.psi.util.createSmartPointer @@ -31,7 +32,7 @@ internal class JavaInjectedFileChangesHandler(shreds: List, editor: Edito myHostDocument.addDocumentListener(object : DocumentListener { override fun documentChanged(event: DocumentEvent) { if (UndoManager.getInstance(myProject).isUndoInProgress) { - (PsiDocumentManager.getInstance(myProject) as PsiDocumentManagerBase).addRunOnCommit(myHostDocument) { thisDoc -> + (PsiDocumentManager.getInstance(myProject) as PsiDocumentManagerEx).addRunOnCommit(myHostDocument) { thisDoc -> rebuildMarkers(markersWholeRange(markers) ?: failAndReport("can't get marker range in undo", event)) } } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/quickfix/I18nQuickFixTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/quickfix/I18nQuickFixTest.java index ba0a0bb7674e..2cddea6f400d 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/quickfix/I18nQuickFixTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/quickfix/I18nQuickFixTest.java @@ -8,6 +8,7 @@ import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.io.FileUtil; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import com.intellij.testFramework.PlatformTestUtil; import org.jetbrains.annotations.NotNull; @@ -36,7 +37,7 @@ public class I18nQuickFixTest extends LightQuickFixParameterizedTestCase { protected void tearDown() throws Exception { try { // avoid "memory/disk conflict" when the document for changed annotation.xml stays in memory - ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(getProject())).clearUncommittedDocuments(); + ((PsiDocumentManagerEx)PsiDocumentManager.getInstance(getProject())).clearUncommittedDocuments(); } catch (Throwable e) { addSuppressedException(e); diff --git a/java/java-tests/testSrc/com/intellij/java/index/ConcurrentIndexTest.java b/java/java-tests/testSrc/com/intellij/java/index/ConcurrentIndexTest.java index 5715b40d66d8..b5e3d50a36e4 100644 --- a/java/java-tests/testSrc/com/intellij/java/index/ConcurrentIndexTest.java +++ b/java/java-tests/testSrc/com/intellij/java/index/ConcurrentIndexTest.java @@ -18,6 +18,7 @@ import com.intellij.psi.PsiClass; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiJavaFile; import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import com.intellij.psi.impl.search.JavaNullMethodArgumentUtil; import com.intellij.psi.impl.source.PsiFileImpl; import com.intellij.psi.search.GlobalSearchScope; @@ -39,7 +40,7 @@ public class ConcurrentIndexTest extends JavaCodeInsightFixtureTestCase { @Override protected void setUp() throws Exception { super.setUp(); - ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(getProject())).disableBackgroundCommit(getProject()); + ((PsiDocumentManagerEx)PsiDocumentManager.getInstance(getProject())).disableBackgroundCommit(getProject()); } public void test_concurrent_switching_with_checkCanceled() throws ExecutionException, InterruptedException { diff --git a/java/java-tests/testSrc/com/intellij/psi/impl/PsiJavaModuleModificationTrackerTest.kt b/java/java-tests/testSrc/com/intellij/psi/impl/PsiJavaModuleModificationTrackerTest.kt index 04b7822a889d..be2b69fc339f 100644 --- a/java/java-tests/testSrc/com/intellij/psi/impl/PsiJavaModuleModificationTrackerTest.kt +++ b/java/java-tests/testSrc/com/intellij/psi/impl/PsiJavaModuleModificationTrackerTest.kt @@ -55,7 +55,7 @@ class PsiJavaModuleModificationTrackerTest : LightJavaCodeInsightFixtureTestCase val file = fixture.configureByText("manifest.mf", "${PsiJavaModule.AUTO_MODULE_NAME} = M1\n") doTestIncremented { WriteCommandAction.runWriteCommandAction(fixture.project) { - val documentManager = PsiDocumentManagerBase.getInstance(fixture.project) + val documentManager = PsiDocumentManager.getInstance(fixture.project) val document = documentManager.getDocument(file)!! document.setText("${PsiJavaModule.AUTO_MODULE_NAME} = M2\n") documentManager.commitDocument(document) diff --git a/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/TextEditorBackgroundHighlighter.java b/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/TextEditorBackgroundHighlighter.java index c3e876d7812f..29a48171c646 100644 --- a/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/TextEditorBackgroundHighlighter.java +++ b/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/TextEditorBackgroundHighlighter.java @@ -23,6 +23,7 @@ import com.intellij.psi.PsiCompiledFile; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import com.intellij.psi.impl.PsiFileEx; import com.intellij.util.ArrayUtil; import com.intellij.util.concurrency.ThreadingAssertions; @@ -60,7 +61,7 @@ public final class TextEditorBackgroundHighlighter implements BackgroundEditorHi return List.of(); } - PsiDocumentManagerBase documentManager = (PsiDocumentManagerBase)PsiDocumentManager.getInstance(project); + PsiDocumentManagerEx documentManager = (PsiDocumentManagerEx)PsiDocumentManager.getInstance(project); Document document = editor.getDocument(); if (!documentManager.isCommitted(document)) { LOG.error(document + documentManager.someDocumentDebugInfo(document)); @@ -134,7 +135,7 @@ public final class TextEditorBackgroundHighlighter implements BackgroundEditorHi public static @Nullable PsiFile getCachedFileToHighlight(@NotNull Project project, @NotNull VirtualFile virtualFile, @NotNull CodeInsightContext context) { - PsiDocumentManagerBase psiDocumentManager = (PsiDocumentManagerBase)PsiDocumentManager.getInstance(project); + PsiDocumentManagerEx psiDocumentManager = (PsiDocumentManagerEx)PsiDocumentManager.getInstance(project); PsiFile psiFile = psiDocumentManager.getRawCachedFile(virtualFile, context); if (psiFile instanceof PsiCompiledFile compiled) { psiFile = (PsiFile)compiled.getCachedMirror(); diff --git a/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java b/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java index a1da12d93301..14ff68975fc3 100644 --- a/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java +++ b/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java @@ -25,6 +25,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import com.intellij.psi.impl.source.resolve.FileContextUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.ObjectUtils; @@ -422,7 +423,7 @@ public final class InjectedLanguageManagerImpl extends InjectedLanguageManager i public @NotNull DocumentWindow freezeWindow(@NotNull DocumentWindow document) { Place shreds = ((DocumentWindowImpl)document).getShreds(); Project project = shreds.getHostPointer().getProject(); - DocumentEx delegate = ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(project)).getLastCommittedDocument(document.getDelegate()); + DocumentEx delegate = ((PsiDocumentManagerEx)PsiDocumentManager.getInstance(project)).getLastCommittedDocument(document.getDelegate()); Place place = new Place(ContainerUtil.map(shreds, shred -> ((ShredImpl)shred).withPsiRange())); return new DocumentWindowImpl(delegate, place); } diff --git a/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java b/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java index c90462260656..67c418746712 100644 --- a/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java +++ b/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java @@ -336,7 +336,7 @@ public final class InjectedLanguageUtil extends InjectedLanguageUtilBase { @NotNull ProgressIndicator indicator, @NotNull ASTNode oldRoot, @NotNull ASTNode newRoot, - @NotNull PsiDocumentManagerBase documentManager) { + @NotNull PsiDocumentManager documentManager) { Language language = injectedPsiFile.getLanguage(); InjectedFileViewProvider provider = (InjectedFileViewProvider)injectedPsiFile.getViewProvider(); VirtualFile oldInjectedVFile = provider.getVirtualFile(); diff --git a/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/InjectionRegistrarImpl.java b/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/InjectionRegistrarImpl.java index 18a4e8834d60..c6e5f406850b 100644 --- a/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/InjectionRegistrarImpl.java +++ b/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/InjectionRegistrarImpl.java @@ -52,7 +52,7 @@ import java.util.*; @ApiStatus.Internal public final class InjectionRegistrarImpl implements MultiHostRegistrar { - private final PsiDocumentManagerBase myDocumentManagerBase; + private final PsiDocumentManagerEx myDocumentManagerBase; private List resultFiles; private List> resultReferences; private Language myLanguage; @@ -78,7 +78,7 @@ public final class InjectionRegistrarImpl implements MultiHostRegistrar { FileViewProvider viewProvider = myHostPsiFile.getViewProvider(); if (viewProvider instanceof InjectedFileViewProvider) throw new IllegalArgumentException(viewProvider +" must not be injected"); myHostVirtualFile = viewProvider.getVirtualFile(); - myDocumentManagerBase = (PsiDocumentManagerBase)docManager; + myDocumentManagerBase = (PsiDocumentManagerEx)docManager; myHostDocument = (DocumentEx)viewProvider.getDocument(); } @@ -245,7 +245,7 @@ public final class InjectionRegistrarImpl implements MultiHostRegistrar { @NotNull PsiFile hostPsiFile, @NotNull VirtualFile hostVirtualFile, @NotNull DocumentEx hostDocument, - @NotNull PsiDocumentManagerBase documentManager) { + @NotNull PsiDocumentManagerEx documentManager) { boolean isAncestor = false; for (PlaceInfo info : placeInfos) { isAncestor |= PsiTreeUtil.isAncestor(contextElement, info.host, false); @@ -294,7 +294,7 @@ public final class InjectionRegistrarImpl implements MultiHostRegistrar { } private static @NotNull PsiFile createOrMergeInjectedFile(@NotNull PsiFile hostPsiFile, - @NotNull PsiDocumentManagerBase documentManager, + @NotNull PsiDocumentManagerEx documentManager, @NotNull Place place, @NotNull DocumentWindowImpl documentWindow, @NotNull PsiFile injectedPsiFile, @@ -409,7 +409,8 @@ public final class InjectionRegistrarImpl implements MultiHostRegistrar { @NotNull PsiFile hostPsiFile, @NotNull VirtualFile hostVirtualFile, @NotNull DocumentEx hostDocument, - @NotNull List placeInfos, @NotNull PsiDocumentManagerBase documentManager) { + @NotNull List placeInfos, + @NotNull PsiDocumentManager documentManager) { return msg + ".\n" + "OK let's see. Host file: " + hostPsiFile + " in '" + hostVirtualFile.getPresentableUrl() + "' (" + hostPsiFile.getLanguage()+") " + (documentManager.isUncommited(hostDocument) ? " (uncommitted)" : "") + "\n" + @@ -433,7 +434,7 @@ public final class InjectionRegistrarImpl implements MultiHostRegistrar { return node; } - private static void assertEverythingIsAllright(@NotNull PsiDocumentManagerBase documentManager, + private static void assertEverythingIsAllright(@NotNull PsiDocumentManagerEx documentManager, @NotNull DocumentWindowImpl documentWindow, @NotNull PsiFile psiFile) { InjectedFileViewProvider injectedFileViewProvider = (InjectedFileViewProvider)psiFile.getViewProvider(); @@ -572,7 +573,7 @@ public final class InjectionRegistrarImpl implements MultiHostRegistrar { @NotNull ProgressIndicator indicator, @NotNull ASTNode oldRoot, @NotNull ASTNode newRoot, - @NotNull PsiDocumentManagerBase documentManager) { + @NotNull PsiDocumentManager documentManager) { Project project = hostPsiFile.getProject(); String newText = oldDocumentWindow.getText(); FileASTNode oldNode = oldInjectedPsi.getNode(); @@ -683,7 +684,7 @@ public final class InjectionRegistrarImpl implements MultiHostRegistrar { @NotNull CharSequence documentText, @NotNull List placeInfos, @NotNull StringBuilder decodedChars, - @NotNull String fileName, @NotNull PsiDocumentManagerBase documentManager) { + @NotNull String fileName, @NotNull PsiDocumentManager documentManager) { VirtualFileWindowImpl virtualFile = new VirtualFileWindowImpl(fileName, hostVirtualFile, documentWindow, language, decodedChars); Language finalLanguage = forcedLanguage == null ? LanguageSubstitutors.getInstance().substituteLanguage(language, virtualFile, project) : forcedLanguage; InjectedFileViewProvider viewProvider = InjectedFileViewProvider.create(PsiManagerEx.getInstanceEx(project), virtualFile, documentWindow, finalLanguage); diff --git a/platform/code-style-impl/src/com/intellij/psi/formatter/FormattingDocumentModelImpl.java b/platform/code-style-impl/src/com/intellij/psi/formatter/FormattingDocumentModelImpl.java index ea0a52222b12..94d7682936de 100644 --- a/platform/code-style-impl/src/com/intellij/psi/formatter/FormattingDocumentModelImpl.java +++ b/platform/code-style-impl/src/com/intellij/psi/formatter/FormattingDocumentModelImpl.java @@ -16,6 +16,7 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.impl.DebugUtil; import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import com.intellij.psi.impl.PsiToDocumentSynchronizer; import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtilBase; import org.jetbrains.annotations.NotNull; @@ -62,7 +63,7 @@ public final class FormattingDocumentModelImpl implements FormattingDocumentMode final Document document = PsiDocumentManager.getInstance(project).getDocument(psiFile); if (document != null) { if (PsiDocumentManager.getInstance(project).isUncommited(document)) return null; - PsiToDocumentSynchronizer synchronizer = ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(project)).getSynchronizer(); + PsiToDocumentSynchronizer synchronizer = ((PsiDocumentManagerEx)PsiDocumentManager.getInstance(project)).getSynchronizer(); if (synchronizer.isDocumentAffectedByTransactions(document)) return null; } return document; diff --git a/platform/code-style-impl/src/com/intellij/psi/impl/source/PostprocessReformattingAspectImpl.java b/platform/code-style-impl/src/com/intellij/psi/impl/source/PostprocessReformattingAspectImpl.java index c23ca682261f..ea9a99f734f9 100644 --- a/platform/code-style-impl/src/com/intellij/psi/impl/source/PostprocessReformattingAspectImpl.java +++ b/platform/code-style-impl/src/com/intellij/psi/impl/source/PostprocessReformattingAspectImpl.java @@ -35,6 +35,7 @@ import com.intellij.pom.tree.events.impl.TreeChangeImpl; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import com.intellij.psi.impl.PsiManagerEx; import com.intellij.psi.impl.file.impl.FileManager; import com.intellij.psi.impl.source.codeStyle.CodeEditUtil; @@ -443,7 +444,7 @@ public final class PostprocessReformattingAspectImpl extends PostprocessReformat for (PsiFile file : viewProvider.getAllFiles()) { if (file.getUserData(REPARSE_PENDING) != null || rootsToReparse.contains(file)) { - ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(myProject)).reparseFileFromText((PsiFileImpl)file); + ((PsiDocumentManagerEx)PsiDocumentManager.getInstance(myProject)).reparseFileFromText((PsiFileImpl)file); file.putUserData(REPARSE_PENDING, null); } } diff --git a/platform/core-impl/api-dump-experimental.txt b/platform/core-impl/api-dump-experimental.txt index d10a96b5816e..3cc6d60bb1fd 100644 --- a/platform/core-impl/api-dump-experimental.txt +++ b/platform/core-impl/api-dump-experimental.txt @@ -77,9 +77,9 @@ a:com.intellij.openapi.fileEditor.impl.FileDocumentManagerBase - getLanguage():com.intellij.lang.Language - getReferences():com.intellij.psi.PsiReference[] a:com.intellij.psi.impl.PsiDocumentManagerBase -- com.intellij.psi.PsiDocumentManager - com.intellij.openapi.Disposable - com.intellij.openapi.editor.event.DocumentListener +- com.intellij.psi.PsiDocumentManager - *:getPsiFile(com.intellij.openapi.editor.Document,com.intellij.codeInsight.multiverse.CodeInsightContext):com.intellij.psi.PsiFile *:com.intellij.psi.impl.PsiDocumentTransactionListenerBackgroundable - com.intellij.psi.impl.PsiDocumentTransactionListener diff --git a/platform/core-impl/api-dump-unreviewed.txt b/platform/core-impl/api-dump-unreviewed.txt index 006487ea54b9..c0d7fa4e3acc 100644 --- a/platform/core-impl/api-dump-unreviewed.txt +++ b/platform/core-impl/api-dump-unreviewed.txt @@ -1890,23 +1890,20 @@ f:com.intellij.psi.impl.PsiCachedValueImpl$SoftTracked - com.intellij.psi.util.CachedValue - (com.intellij.psi.PsiManager,com.intellij.psi.util.CachedValueProvider):V a:com.intellij.psi.impl.PsiDocumentManagerBase -- com.intellij.psi.PsiDocumentManager - com.intellij.openapi.Disposable - com.intellij.openapi.editor.event.DocumentListener +- com.intellij.psi.PsiDocumentManager - p:(com.intellij.openapi.project.Project):V -- associatePsi(com.intellij.openapi.editor.Document,com.intellij.psi.PsiFile):V - beforeDocumentChange(com.intellij.openapi.editor.event.DocumentEvent):V - p:beforeDocumentChangeOnUnlockedDocument(com.intellij.psi.FileViewProvider):V - bulkUpdateFinished(com.intellij.openapi.editor.Document):V - bulkUpdateStarting(com.intellij.openapi.editor.Document):V -- cancelAndRunWhenAllCommitted(java.lang.Object,java.lang.Runnable):Z - s:checkConsistency(com.intellij.psi.PsiFile,com.intellij.openapi.editor.Document):Z - commitAllDocuments():V - commitAllDocumentsUnderProgress():Z - commitAndRunReadAction(com.intellij.openapi.util.Computable):java.lang.Object - commitAndRunReadAction(java.lang.Runnable):V - commitDocument(com.intellij.openapi.editor.Document):V -- disableBackgroundCommit(com.intellij.openapi.Disposable):V - dispose():V - doPostponedOperationsAndUnblockDocument(com.intellij.openapi.editor.Document):V - documentChanged(com.intellij.openapi.editor.event.DocumentEvent):V @@ -1915,8 +1912,6 @@ a:com.intellij.psi.impl.PsiDocumentManagerBase - getCachedDocument(com.intellij.psi.PsiFile):com.intellij.openapi.editor.Document - f:getCachedPsiFile(com.intellij.openapi.editor.Document):com.intellij.psi.PsiFile - getDocument(com.intellij.psi.PsiFile):com.intellij.openapi.editor.Document -- getEventsSinceCommit(com.intellij.openapi.editor.Document):java.util.List -- getLastCommittedDocument(com.intellij.openapi.editor.Document):com.intellij.openapi.editor.ex.DocumentEx - getLastCommittedDocument(com.intellij.psi.PsiFile):com.intellij.openapi.editor.Document - getLastCommittedStamp(com.intellij.openapi.editor.Document):J - getLastCommittedText(com.intellij.openapi.editor.Document):java.lang.CharSequence @@ -1928,14 +1923,12 @@ a:com.intellij.psi.impl.PsiDocumentManagerBase - hasUncommitedDocuments():Z - isCommitInProgress():Z - isCommitted(com.intellij.openapi.editor.Document):Z -- isDefaultProject():Z - isDocumentBlockedByPsi(com.intellij.openapi.editor.Document):Z - isUncommited(com.intellij.openapi.editor.Document):Z - performForCommittedDocument(com.intellij.openapi.editor.Document,java.lang.Runnable):V - performLaterWhenAllCommitted(com.intellij.openapi.application.ModalityState,java.lang.Runnable):V - performLaterWhenAllCommitted(java.lang.Runnable):V - performWhenAllCommitted(java.lang.Runnable):Z -- reparseFileFromText(com.intellij.psi.impl.source.PsiFileImpl):V - reparseFiles(java.util.Collection,Z):V - someDocumentDebugInfo(com.intellij.openapi.editor.Document):java.lang.String a:com.intellij.psi.impl.PsiElementBase diff --git a/platform/core-impl/src/com/intellij/core/MockDocumentCommitProcessor.java b/platform/core-impl/src/com/intellij/core/MockDocumentCommitProcessor.java index 33adf6bce388..bc9223c16481 100644 --- a/platform/core-impl/src/com/intellij/core/MockDocumentCommitProcessor.java +++ b/platform/core-impl/src/com/intellij/core/MockDocumentCommitProcessor.java @@ -6,7 +6,7 @@ import com.intellij.openapi.editor.Document; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiFile; import com.intellij.psi.impl.DocumentCommitProcessor; -import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import org.jetbrains.annotations.NotNull; final class MockDocumentCommitProcessor implements DocumentCommitProcessor { @@ -16,7 +16,7 @@ final class MockDocumentCommitProcessor implements DocumentCommitProcessor { @Override public void commitAsynchronously(@NotNull Project project, - @NotNull PsiDocumentManagerBase documentManager, + @NotNull PsiDocumentManagerEx documentManager, @NotNull Document document, @NotNull Object reason, @NotNull ModalityState modality) { diff --git a/platform/core-impl/src/com/intellij/pom/core/impl/PomModelImpl.java b/platform/core-impl/src/com/intellij/pom/core/impl/PomModelImpl.java index 7c6e55999ff2..9205bd233566 100644 --- a/platform/core-impl/src/com/intellij/pom/core/impl/PomModelImpl.java +++ b/platform/core-impl/src/com/intellij/pom/core/impl/PomModelImpl.java @@ -178,7 +178,7 @@ public class PomModelImpl extends UserDataHolderBase implements PomModel { } private void commitTransaction(@NotNull PsiFile containingFileByTree, @Nullable Document document) { - final PsiDocumentManagerBase manager = (PsiDocumentManagerBase)PsiDocumentManager.getInstance(myProject); + final PsiDocumentManagerEx manager = (PsiDocumentManagerEx)PsiDocumentManager.getInstance(myProject); final PsiToDocumentSynchronizer synchronizer = manager.getSynchronizer(); boolean isFromCommit = manager.isCommitInProgress(); @@ -255,7 +255,7 @@ public class PomModelImpl extends UserDataHolderBase implements PomModel { @Contract("_,null -> null") private @Nullable Document startTransaction(@NotNull PomTransaction transaction, @Nullable PsiFile psiFile) { - final PsiDocumentManagerBase manager = (PsiDocumentManagerBase)PsiDocumentManager.getInstance(myProject); + final PsiDocumentManagerEx manager = (PsiDocumentManagerEx)PsiDocumentManager.getInstance(myProject); final PsiToDocumentSynchronizer synchronizer = manager.getSynchronizer(); final PsiElement changeScope = transaction.getChangeScope(); diff --git a/platform/core-impl/src/com/intellij/pom/wrappers/PsiEventWrapperAspect.java b/platform/core-impl/src/com/intellij/pom/wrappers/PsiEventWrapperAspect.java index 70c5ad77dbeb..b4400df9531d 100644 --- a/platform/core-impl/src/com/intellij/pom/wrappers/PsiEventWrapperAspect.java +++ b/platform/core-impl/src/com/intellij/pom/wrappers/PsiEventWrapperAspect.java @@ -9,6 +9,7 @@ import com.intellij.pom.tree.events.impl.TreeChangeEventImpl; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import com.intellij.psi.impl.PsiManagerEx; import com.intellij.psi.impl.PsiManagerImpl; import org.jetbrains.annotations.NotNull; @@ -27,7 +28,7 @@ public final class PsiEventWrapperAspect implements PomModelAspect { PsiFile file = (PsiFile)changeSet.getRootElement().getPsi(); - ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(file.getProject())).getSynchronizer().processEvents(changeSet, file); + ((PsiDocumentManagerEx)PsiDocumentManager.getInstance(file.getProject())).getSynchronizer().processEvents(changeSet, file); if (PomModelImpl.shouldFirePhysicalPsiEvents(file)) { PsiManagerImpl.runWriteActionOnEdtRegardlessOfCurrentThread(() -> changeSet.fireEvents()); diff --git a/platform/core-impl/src/com/intellij/psi/AbstractFileViewProvider.java b/platform/core-impl/src/com/intellij/psi/AbstractFileViewProvider.java index 2e235ce0287f..3e7944197bbc 100644 --- a/platform/core-impl/src/com/intellij/psi/AbstractFileViewProvider.java +++ b/platform/core-impl/src/com/intellij/psi/AbstractFileViewProvider.java @@ -337,7 +337,7 @@ public abstract class AbstractFileViewProvider extends UserDataHolderBase implem return; } if (document != null && - ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(myManager.getProject())).getSynchronizer().isInSynchronization(document)) { + ((PsiDocumentManagerEx)PsiDocumentManager.getInstance(myManager.getProject())).getSynchronizer().isInSynchronization(document)) { return; } diff --git a/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java b/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java index c5b0448c4177..0341d0591626 100644 --- a/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java +++ b/platform/core-impl/src/com/intellij/psi/SingleRootFileViewProvider.java @@ -15,6 +15,7 @@ import com.intellij.openapi.vfs.VirtualFileUtil; import com.intellij.openapi.vfs.limits.FileSizeLimit; import com.intellij.psi.impl.DebugUtil; import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import com.intellij.psi.impl.PsiFileEx; import com.intellij.psi.impl.source.PsiFileImpl; import com.intellij.psi.util.PsiUtilCore; @@ -65,8 +66,8 @@ public class SingleRootFileViewProvider extends AbstractFileViewProvider impleme super(manager, virtualFile, eventSystemEnabled); myBaseLanguage = language; PsiDocumentManager documentManager = PsiDocumentManager.getInstance(manager.getProject()); - if (documentManager instanceof PsiDocumentManagerBase) { - ((PsiDocumentManagerBase)documentManager).assertFileIsFromCorrectProject(virtualFile); + if (documentManager instanceof PsiDocumentManagerEx) { + ((PsiDocumentManagerEx)documentManager).assertFileIsFromCorrectProject(virtualFile); } } diff --git a/platform/core-impl/src/com/intellij/psi/impl/ChangedPsiRangeUtil.java b/platform/core-impl/src/com/intellij/psi/impl/ChangedPsiRangeUtil.java index 3ac4a94da08b..3f8a3469a81c 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/ChangedPsiRangeUtil.java +++ b/platform/core-impl/src/com/intellij/psi/impl/ChangedPsiRangeUtil.java @@ -81,8 +81,7 @@ public final class ChangedPsiRangeUtil { if (!file.getViewProvider().supportsIncrementalReparse(file.getLanguage())) { return new ProperTextRange(0, psiLength); } - List events = ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(file.getProject())).getEventsSinceCommit( - document); + List events = ((PsiDocumentManagerEx)PsiDocumentManager.getInstance(file.getProject())).getEventsSinceCommit(document); int prefix = Integer.MAX_VALUE; int suffix = Integer.MAX_VALUE; int lengthBeforeEvent = psiLength; diff --git a/platform/core-impl/src/com/intellij/psi/impl/DiffLog.java b/platform/core-impl/src/com/intellij/psi/impl/DiffLog.java index 797138b6014f..59e38866ac63 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/DiffLog.java +++ b/platform/core-impl/src/com/intellij/psi/impl/DiffLog.java @@ -252,7 +252,7 @@ public class DiffLog implements DiffTreeChangeBuilder { viewProvider.beforeContentsSynchronized(); Document document = viewProvider.getDocument(); - PsiDocumentManagerBase documentManager = (PsiDocumentManagerBase)PsiDocumentManager.getInstance(file.getProject()); + PsiDocumentManagerEx documentManager = (PsiDocumentManagerEx)PsiDocumentManager.getInstance(file.getProject()); PsiToDocumentSynchronizer.DocumentChangeTransaction transaction = documentManager.getSynchronizer().getTransaction(document); if (transaction == null) { diff --git a/platform/core-impl/src/com/intellij/psi/impl/DocumentCommitProcessor.java b/platform/core-impl/src/com/intellij/psi/impl/DocumentCommitProcessor.java index d89a306751f8..9ab6f2d01dcd 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/DocumentCommitProcessor.java +++ b/platform/core-impl/src/com/intellij/psi/impl/DocumentCommitProcessor.java @@ -14,7 +14,7 @@ public interface DocumentCommitProcessor { void commitSynchronously(@NotNull Document document, @NotNull Project project, @NotNull PsiFile psiFile); void commitAsynchronously(@NotNull Project project, - @NotNull PsiDocumentManagerBase documentManager, + @NotNull PsiDocumentManagerEx documentManager, @NotNull Document document, @NonNls @NotNull Object reason, @NotNull ModalityState modality); 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 09ca79f4a7ca..4067fee5d5e7 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java +++ b/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java @@ -51,7 +51,6 @@ import com.intellij.util.concurrency.ThreadingAssertions; import com.intellij.util.concurrency.annotations.RequiresEdt; import com.intellij.util.containers.CollectionFactory; import com.intellij.util.containers.ContainerUtil; -import com.intellij.util.ui.EdtInvocationManager; import org.jetbrains.annotations.*; import java.util.*; @@ -60,7 +59,7 @@ import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; -public abstract class PsiDocumentManagerBase extends PsiDocumentManager implements DocumentListener, Disposable { +public abstract class PsiDocumentManagerBase extends PsiDocumentManagerEx implements DocumentListener, Disposable { private static final Logger LOG = Logger.getInstance(PsiDocumentManagerBase.class); private static final Key HARD_REF_TO_DOCUMENT = Key.create("HARD_REFERENCE_TO_DOCUMENT"); @@ -141,6 +140,14 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen return psiFile; } + @Override + @ApiStatus.Internal + public @NotNull Project getProject() { + return myProject; + } + + @Override + @ApiStatus.Internal public void associatePsi(@NotNull Document document, @NotNull PsiFile file) { if (file.getProject() != myProject) { throw new IllegalArgumentException("Method associatePsi() called with file from the wrong project. Expected: "+myProject+" but got: "+file.getProject()); @@ -171,12 +178,14 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen * It's guaranteed to not perform any expensive ops like creating files/reparse/resurrecting PsiFile from temp comatose state. */ @ApiStatus.Internal + @Override public final @Nullable PsiFile getRawCachedFile(@NotNull VirtualFile virtualFile, @NotNull CodeInsightContext context) { FileManagerEx manager = ((FileManagerEx)getFileManager()); return manager.getRawCachedFile(virtualFile, context); } @ApiStatus.Internal + @Override public final @NotNull @Unmodifiable List getCachedViewProviders(@NotNull Document document) { VirtualFile virtualFile = getVirtualFile(document); if (virtualFile == null) return Collections.emptyList(); @@ -339,6 +348,8 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen * The action will be executed in EDT. * @return true if action has been run immediately, or false if action was scheduled for execution later. */ + @Override + @ApiStatus.Internal public boolean cancelAndRunWhenAllCommitted(@NonNls @NotNull Object key, @NotNull Runnable action) { ThreadingAssertions.assertEventDispatchThread(); if (myProject.isDisposed()) { @@ -379,6 +390,7 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen * {@code addRunOnCommit(document, d->d.getText())} */ @ApiStatus.Internal + @Override public void addRunOnCommit(@NotNull Document document, @NotNull Consumer action) { List> actions = documentCommitActions.computeIfAbsent(document, __ -> ContainerUtil.createConcurrentList()); actions.add(ThreadContext.captureThreadContext(action)); @@ -423,6 +435,7 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen } @ApiStatus.Internal + @Override public boolean isEventSystemEnabled(@NotNull Document document) { return ReadAction.compute(() -> { List viewProviders = getCachedViewProviders(document); @@ -431,6 +444,7 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen } @ApiStatus.Internal + @Override public boolean finishCommit(@NotNull Document document, @NotNull @Unmodifiable List finishProcessors, @NotNull @Unmodifiable List reparseInjectedProcessors, @@ -535,6 +549,7 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen } @ApiStatus.Internal + @Override public void forceReload(@Nullable VirtualFile virtualFile, @NotNull @Unmodifiable List viewProviders) { if (!viewProviders.isEmpty()) { DebugUtil.performPsiModification("psi.forceReload", () -> { @@ -596,6 +611,7 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen } // true if the PSI is being modified and events being sent + @Override public boolean isCommitInProgress() { return myIsCommitInProgress.get() != null || isFullReparseInProgress(); } @@ -893,6 +909,8 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen return document == null ? null : getLastCommittedDocument(document); } + @Override + @ApiStatus.Internal public @NotNull DocumentEx getLastCommittedDocument(@NotNull Document document) { if (document instanceof FrozenDocument) return (DocumentEx)document; @@ -929,6 +947,8 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen throw new UnsupportedOperationException(); } + @Override + @ApiStatus.Internal public @NotNull @Unmodifiable List getEventsSinceCommit(@NotNull Document document) { assert document instanceof DocumentImpl : document; UncommittedInfo info = getUncommittedInfo(document); @@ -951,11 +971,13 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen } @ApiStatus.Internal + @Override public @NotNull Map getUncommitedDocumentsWithTraces() { return Collections.unmodifiableMap(myUncommittedDocumentTraces); } @ApiStatus.Internal + @Override public boolean isInUncommittedSet(@NotNull Document document) { return myUncommittedDocuments.contains(getTopLevelDocument(document)); } @@ -1165,6 +1187,7 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen } @ApiStatus.Internal + @Override public void handleCommitWithoutPsi(@NotNull Document document) { UncommittedInfo prevInfo = clearUncommittedInfo(document); if (prevInfo == null) { @@ -1287,6 +1310,7 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen @TestOnly @ApiStatus.Internal + @Override public void clearUncommittedDocuments() { myUncommittedDocuments.clear(); myUncommittedDocumentTraces.clear(); @@ -1294,6 +1318,8 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen } @TestOnly + @Override + @ApiStatus.Internal public void disableBackgroundCommit(@NotNull Disposable parentDisposable) { assert myPerformBackgroundCommit; myPerformBackgroundCommit = false; @@ -1303,10 +1329,13 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen @Override public void dispose() {} + @Override public @NotNull PsiToDocumentSynchronizer getSynchronizer() { return mySynchronizer; } + @Override + @ApiStatus.Internal public void reparseFileFromText(@NotNull PsiFileImpl file) { if (isCommitInProgress()) { throw new IllegalStateException("Re-entrant commit is not allowed"); @@ -1336,22 +1365,25 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen } } - @NotNull @ApiStatus.Internal - public @Unmodifiable List reparseChangedInjectedFragments(@NotNull Document hostDocument, - @NotNull PsiFile hostPsiFile, - @NotNull TextRange range, - @NotNull ProgressIndicator indicator, - @NotNull ASTNode oldRoot, - @NotNull ASTNode newRoot) { + @Override + public @NotNull @Unmodifiable List reparseChangedInjectedFragments(@NotNull Document hostDocument, + @NotNull PsiFile hostPsiFile, + @NotNull TextRange range, + @NotNull ProgressIndicator indicator, + @NotNull ASTNode oldRoot, + @NotNull ASTNode newRoot) { return Collections.emptyList(); } @TestOnly + @Override + @ApiStatus.Internal public boolean isDefaultProject() { return myProject.isDefault(); } + @Override public @NonNls String someDocumentDebugInfo(@NotNull Document document) { @NotNull List viewProviders = getCachedViewProviders(document); return "cachedProvider: " + viewProviders + @@ -1365,6 +1397,7 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen * Try to find the project the {@code virtualFile} belongs to (from the directory structure the file located in) and make sure it's the same as {@link #myProject} */ @ApiStatus.Internal + @Override public void assertFileIsFromCorrectProject(@NotNull VirtualFile virtualFile) {} @TestOnly diff --git a/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerEx.java b/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerEx.java new file mode 100644 index 000000000000..038b0f57c7ff --- /dev/null +++ b/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerEx.java @@ -0,0 +1,86 @@ +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.psi.impl; + +import com.intellij.codeInsight.multiverse.CodeInsightContext; +import com.intellij.lang.ASTNode; +import com.intellij.openapi.Disposable; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.event.DocumentEvent; +import com.intellij.openapi.editor.ex.DocumentEx; +import com.intellij.openapi.progress.ProgressIndicator; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.FileViewProvider; +import com.intellij.psi.PsiDocumentManager; +import com.intellij.psi.PsiFile; +import com.intellij.psi.impl.source.PsiFileImpl; +import org.jetbrains.annotations.*; + +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; + +@ApiStatus.Internal +public abstract class PsiDocumentManagerEx extends PsiDocumentManager implements Disposable { + public abstract @NotNull Project getProject(); + + public abstract void associatePsi(@NotNull Document document, @NotNull PsiFile file); + + public abstract @Nullable PsiFile getRawCachedFile(@NotNull VirtualFile virtualFile, @NotNull CodeInsightContext context); + + public abstract @NotNull @Unmodifiable List getCachedViewProviders(@NotNull Document document); + + public abstract boolean cancelAndRunWhenAllCommitted(@NonNls @NotNull Object key, @NotNull Runnable action); + + public abstract void addRunOnCommit(@NotNull Document document, @NotNull Consumer action); + + public abstract boolean isEventSystemEnabled(@NotNull Document document); + + public abstract boolean finishCommit(@NotNull Document document, + @NotNull @Unmodifiable List finishProcessors, + @NotNull @Unmodifiable List reparseInjectedProcessors, + boolean synchronously, + @NotNull Object reason); + + public abstract void forceReload(@Nullable VirtualFile virtualFile, + @NotNull @Unmodifiable List viewProviders); + + // true if the PSI is being modified and events being sent + public abstract boolean isCommitInProgress(); + + public abstract @NotNull DocumentEx getLastCommittedDocument(@NotNull Document document); + + public abstract @NotNull @Unmodifiable List getEventsSinceCommit(@NotNull Document document); + + public abstract @NotNull Map getUncommitedDocumentsWithTraces(); + + public abstract boolean isInUncommittedSet(@NotNull Document document); + + public abstract void handleCommitWithoutPsi(@NotNull Document document); + + @TestOnly + public abstract void clearUncommittedDocuments(); + + @TestOnly + public abstract void disableBackgroundCommit(@NotNull Disposable parentDisposable); + + public abstract @NotNull PsiToDocumentSynchronizer getSynchronizer(); + + public abstract void reparseFileFromText(@NotNull PsiFileImpl file); + + @NotNull + public abstract @Unmodifiable List reparseChangedInjectedFragments(@NotNull Document hostDocument, + @NotNull PsiFile hostPsiFile, + @NotNull TextRange range, + @NotNull ProgressIndicator indicator, + @NotNull ASTNode oldRoot, + @NotNull ASTNode newRoot); + + @TestOnly + public abstract boolean isDefaultProject(); + + public abstract @NonNls String someDocumentDebugInfo(@NotNull Document document); + + public abstract void assertFileIsFromCorrectProject(@NotNull VirtualFile virtualFile); +} diff --git a/platform/core-impl/src/com/intellij/psi/impl/PsiToDocumentSynchronizer.java b/platform/core-impl/src/com/intellij/psi/impl/PsiToDocumentSynchronizer.java index 1e8ff1118cb8..a0211c3c7979 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/PsiToDocumentSynchronizer.java +++ b/platform/core-impl/src/com/intellij/psi/impl/PsiToDocumentSynchronizer.java @@ -44,13 +44,13 @@ public class PsiToDocumentSynchronizer { private static final Logger LOG = Logger.getInstance(PsiToDocumentSynchronizer.class); private static final Key PSI_DOCUMENT_ATOMIC_ACTION = Key.create("PSI_DOCUMENT_ATOMIC_ACTION"); - private final PsiDocumentManagerBase myPsiDocumentManager; + private final PsiDocumentManagerEx myPsiDocumentManager; private final MessageBus myBus; private final Map> myTransactionsMap = new ConcurrentHashMap<>(); private volatile Document mySyncDocument; - PsiToDocumentSynchronizer(@NotNull PsiDocumentManagerBase psiDocumentManager, @NotNull MessageBus bus) { + PsiToDocumentSynchronizer(@NotNull PsiDocumentManagerEx psiDocumentManager, @NotNull MessageBus bus) { myPsiDocumentManager = psiDocumentManager; myBus = bus; myBus.connect(psiDocumentManager) diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/FileElementInfo.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/FileElementInfo.java index f4dc298f0573..8f5abead6cb4 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/FileElementInfo.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/FileElementInfo.java @@ -16,6 +16,7 @@ import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -81,7 +82,7 @@ final class FileElementInfo extends SmartPointerElementInfo { Segment getPsiRange(@NotNull SmartPointerManagerEx manager) { Document currentDoc = FileDocumentManager.getInstance().getCachedDocument(myVirtualFile); Document committedDoc = currentDoc == null ? null : - ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(myProject)).getLastCommittedDocument(currentDoc); + ((PsiDocumentManagerEx)PsiDocumentManager.getInstance(myProject)).getLastCommittedDocument(currentDoc); return committedDoc == null ? getRange(manager) : new TextRange(0, committedDoc.getTextLength()); } diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/InjectedSelfElementInfo.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/InjectedSelfElementInfo.java index 1b6b0f7de689..1e7f4baf28a1 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/InjectedSelfElementInfo.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/InjectedSelfElementInfo.java @@ -15,6 +15,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.impl.FreeThreadedFileViewProvider; import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -103,7 +104,7 @@ class InjectedSelfElementInfo extends SmartPointerElementInfo { private PsiFile getInjectedFileIn(@NotNull PsiElement hostContext, @NotNull PsiFile hostFile, @NotNull TextRange rangeInHostFile) { - PsiDocumentManagerBase docManager = (PsiDocumentManagerBase)PsiDocumentManager.getInstance(getProject()); + PsiDocumentManagerEx docManager = (PsiDocumentManagerEx)PsiDocumentManager.getInstance(getProject()); PsiFile[] result = {null}; PsiLanguageInjectionHost.InjectedPsiVisitor visitor = (injectedPsi, places) -> { Document document = docManager.getDocument(injectedPsi); @@ -178,7 +179,7 @@ class InjectedSelfElementInfo extends SmartPointerElementInfo { Project project = injectedFile.getProject(); DocumentWindow documentWindow = ((VirtualFileWindow)virtualFile).getDocumentWindow(); if (psi) { - documentWindow = (DocumentWindow) ((PsiDocumentManagerBase) PsiDocumentManager.getInstance(project)).getLastCommittedDocument(documentWindow); + documentWindow = (DocumentWindow) ((PsiDocumentManagerEx) PsiDocumentManager.getInstance(project)).getLastCommittedDocument(documentWindow); } int start = documentWindow.hostToInjected(hostRange.getStartOffset()); int end = documentWindow.hostToInjected(hostRange.getEndOffset()); diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java index f84eda9f37ae..23a5746dc425 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java @@ -14,6 +14,7 @@ import com.intellij.openapi.util.*; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -227,7 +228,7 @@ public class SelfElementInfo extends SmartPointerElementInfo { if (hasRange()) { Document document = getDocumentToSynchronize(); if (document != null) { - PsiDocumentManagerBase documentManager = manager.getPsiDocumentManager(); + PsiDocumentManagerEx documentManager = manager.getPsiDocumentManager(); List events = documentManager.getEventsSinceCommit(document); if (!events.isEmpty()) { SmartPointerTracker tracker = manager.getTracker(getVirtualFile()); @@ -247,7 +248,7 @@ public class SelfElementInfo extends SmartPointerElementInfo { public static Segment calcActualRangeAfterDocumentEvents(@NotNull PsiFile containingFile, @NotNull Document document, @NotNull Segment segment, boolean isSegmentGreedy) { Project project = containingFile.getProject(); - PsiDocumentManagerBase documentManager = (PsiDocumentManagerBase)PsiDocumentManager.getInstance(project); + PsiDocumentManagerEx documentManager = (PsiDocumentManagerEx)PsiDocumentManager.getInstance(project); List events = documentManager.getEventsSinceCommit(document); if (!events.isEmpty()) { SmartPointerManagerEx pointerManager = (SmartPointerManagerEx)SmartPointerManager.getInstance(project); diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerEx.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerEx.java index 91fb056f15a4..7f403a93c1b9 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerEx.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerEx.java @@ -9,6 +9,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -40,5 +41,5 @@ public abstract class SmartPointerManagerEx extends SmartPointerManager { public abstract Project getProject(); @NotNull - public abstract PsiDocumentManagerBase getPsiDocumentManager(); + public abstract PsiDocumentManagerEx getPsiDocumentManager(); } diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java index 559e9247fe8c..7804bfa229e0 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java @@ -15,6 +15,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import com.intellij.psi.util.PsiUtilCore; import com.intellij.testFramework.LightVirtualFile; import com.intellij.util.containers.CollectionFactory; @@ -32,13 +33,13 @@ import static com.intellij.reference.SoftReference.dereference; public final class SmartPointerManagerImpl extends SmartPointerManagerEx implements Disposable { private static final Logger LOG = Logger.getInstance(SmartPointerManagerImpl.class); private final Project myProject; - private final PsiDocumentManagerBase myPsiDocManager; + private final PsiDocumentManagerEx myPsiDocManager; private final Key> LIGHT_TRACKER_KEY; private final ConcurrentMap myPhysicalTrackers = CollectionFactory.createConcurrentWeakValueMap(); public SmartPointerManagerImpl(@NotNull Project project) { myProject = project; - myPsiDocManager = (PsiDocumentManagerBase)PsiDocumentManager.getInstance(project); + myPsiDocManager = (PsiDocumentManagerEx)PsiDocumentManager.getInstance(project); LIGHT_TRACKER_KEY = Key.create("SMART_POINTERS " + (project.isDefault() ? "default" : project.hashCode())); } @@ -243,7 +244,7 @@ public final class SmartPointerManagerImpl extends SmartPointerManagerEx impleme @ApiStatus.Internal @Override @NotNull - public PsiDocumentManagerBase getPsiDocumentManager() { + public PsiDocumentManagerEx getPsiDocumentManager() { return myPsiDocManager; } } diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPsiElementPointerImpl.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPsiElementPointerImpl.java index d55190b1cffd..d7a5e1385931 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPsiElementPointerImpl.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPsiElementPointerImpl.java @@ -18,6 +18,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.impl.FreeThreadedFileViewProvider; import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import com.intellij.psi.impl.PsiManagerEx; import com.intellij.psi.impl.source.PsiFileImpl; import com.intellij.psi.stubs.LanguageStubDescriptor; @@ -201,7 +202,7 @@ public class SmartPsiElementPointerImpl implements SmartPo Document document = FileDocumentManager.getInstance().getCachedDocument(virtualFile); if (document != null && - ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(project)).getSynchronizer().isDocumentAffectedByTransactions(document)) { + ((PsiDocumentManagerEx)PsiDocumentManager.getInstance(project)).getSynchronizer().isDocumentAffectedByTransactions(document)) { LOG.error("Smart pointers must not be created during PSI changes"); } diff --git a/platform/core-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java b/platform/core-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java index 8c3c92830446..65124b7bfadc 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java +++ b/platform/core-impl/src/com/intellij/psi/impl/source/PsiFileImpl.java @@ -1143,8 +1143,8 @@ public abstract class PsiFileImpl extends ElementBase implements PsiFileEx, PsiF private void checkWritable() { PsiDocumentManager docManager = PsiDocumentManager.getInstance(getProject()); - if (docManager instanceof PsiDocumentManagerBase && - !((PsiDocumentManagerBase)docManager).isCommitInProgress() && + if (docManager instanceof PsiDocumentManagerEx && + !((PsiDocumentManagerEx)docManager).isCommitInProgress() && !(myViewProvider instanceof FreeThreadedFileViewProvider)) { CheckUtil.checkWritable(this); } diff --git a/platform/ide-core-impl/src/com/intellij/psi/impl/DocumentCommitThread.kt b/platform/ide-core-impl/src/com/intellij/psi/impl/DocumentCommitThread.kt index f780a119abe9..d0f2755a9ad8 100644 --- a/platform/ide-core-impl/src/com/intellij/psi/impl/DocumentCommitThread.kt +++ b/platform/ide-core-impl/src/com/intellij/psi/impl/DocumentCommitThread.kt @@ -83,7 +83,7 @@ class DocumentCommitThread : DocumentCommitProcessor, Disposable { override fun commitAsynchronously( project: Project, - documentManager: PsiDocumentManagerBase, + documentManager: PsiDocumentManagerEx, document: Document, reason: Any, modality: ModalityState, @@ -94,7 +94,7 @@ class DocumentCommitThread : DocumentCommitProcessor, Disposable { } @Suppress("SuspiciousPackagePrivateAccess") - require(documentManager.myProject === project) { "Wrong project: $project; expected: ${documentManager.myProject}" } + require(documentManager.project === project) { "Wrong project: $project; expected: ${documentManager.project}" } TransactionGuard.getInstance().assertWriteSafeContext(modality) @@ -123,7 +123,7 @@ class DocumentCommitThread : DocumentCommitProcessor, Disposable { val publishedDocumentCommitRequests: ConcurrentMap = CollectionFactory.createConcurrentWeakMap() } - private fun commitDocumentWithCoroutines(document: Document, task: CommitTask, documentManager: PsiDocumentManagerBase) { + private fun commitDocumentWithCoroutines(document: Document, task: CommitTask, documentManager: PsiDocumentManagerEx) { val service = task.myProject.service() val job = service.scope.launch(commitDispatcher, start = CoroutineStart.LAZY) { commitDispatcherSuspender.acquire() @@ -157,7 +157,7 @@ class DocumentCommitThread : DocumentCommitProcessor, Disposable { job.start() } - private fun ReadAndWriteScope.doCommitInReadAndWriteScope(task: CommitTask, documentManager: PsiDocumentManagerBase): ReadResult { + private fun ReadAndWriteScope.doCommitInReadAndWriteScope(task: CommitTask, documentManager: PsiDocumentManagerEx): ReadResult { if (isExpired(task, documentManager)) { return value(Unit) } @@ -170,7 +170,7 @@ class DocumentCommitThread : DocumentCommitProcessor, Disposable { } } - private fun isExpired(task: CommitTask, docManager: PsiDocumentManagerBase): Boolean { + private fun isExpired(task: CommitTask, docManager: PsiDocumentManagerEx): Boolean { return isDisposed || task.isExpired(docManager) } @@ -181,7 +181,7 @@ class DocumentCommitThread : DocumentCommitProcessor, Disposable { "Must not call sync commit with unopened project: $project; Disposed: ${project.isDisposed()}; Open: ${project.isOpen()}" } - val documentManager = PsiDocumentManager.getInstance(project) as PsiDocumentManagerBase + val documentManager = PsiDocumentManager.getInstance(project) as PsiDocumentManagerEx val task = CommitTask(project, document, "Sync commit", ModalityState.defaultModalityState()) commitUnderProgress(task, synchronously = true, documentManager)() @@ -189,7 +189,7 @@ class DocumentCommitThread : DocumentCommitProcessor, Disposable { @RequiresReadLock // returns finish commit Runnable (to be invoked later in EDT) or null on failure - private fun commitUnderProgress(task: CommitTask, synchronously: Boolean, documentManager: PsiDocumentManagerBase): () -> Unit { + private fun commitUnderProgress(task: CommitTask, synchronously: Boolean, documentManager: PsiDocumentManagerEx): () -> Unit { if (!synchronously) { ApplicationManager.getApplication().assertIsNonDispatchThread() } @@ -388,7 +388,7 @@ class DocumentCommitThread : DocumentCommitProcessor, Disposable { null } } - fun isExpired(documentManager: PsiDocumentManagerBase): Boolean { + fun isExpired(documentManager: PsiDocumentManagerEx): Boolean { val document = stillValidDocument() val expired = myProject.isDisposed() || document == null || @@ -408,7 +408,7 @@ class DocumentCommitThread : DocumentCommitProcessor, Disposable { oldFileNode: FileASTNode, changedPsiRange: ProperTextRange, outReparseInjectedProcessors: MutableList, - documentManager: PsiDocumentManagerBase, + documentManager: PsiDocumentManagerEx, ): BooleanRunnable { if (!synchronously) { ApplicationManager.getApplication().assertIsNonDispatchThread() @@ -471,7 +471,7 @@ class DocumentCommitThread : DocumentCommitProcessor, Disposable { private fun handleCommitWithoutPsi( task: CommitTask, - documentManager: PsiDocumentManagerBase, + documentManager: PsiDocumentManagerEx, ): BooleanRunnable { return BooleanRunnable { val document = task.myDocumentRef.get() ?: return@BooleanRunnable false diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/changesHandler/IndentAwareInjectedFileChangesHandler.kt b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/changesHandler/IndentAwareInjectedFileChangesHandler.kt index eba55303b1b7..1ff9236eda26 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/changesHandler/IndentAwareInjectedFileChangesHandler.kt +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/changesHandler/IndentAwareInjectedFileChangesHandler.kt @@ -20,6 +20,7 @@ import com.intellij.psi.PsiFile import com.intellij.psi.PsiLanguageInjectionHost.Shred import com.intellij.psi.createSmartPointer import com.intellij.psi.impl.PsiDocumentManagerBase +import com.intellij.psi.impl.PsiDocumentManagerEx import com.intellij.psi.impl.source.resolve.FileContextUtil import com.intellij.util.SmartList import com.intellij.util.containers.ContainerUtil @@ -35,7 +36,7 @@ internal class IndentAwareInjectedFileChangesHandler(shreds: List, editor myHostDocument.addDocumentListener(object : DocumentListener { override fun documentChanged(event: DocumentEvent) { if (UndoManager.getInstance(myProject).isUndoInProgress) { - (PsiDocumentManager.getInstance(myProject) as PsiDocumentManagerBase).addRunOnCommit(myHostDocument) { thisDoc -> + (PsiDocumentManager.getInstance(myProject) as PsiDocumentManagerEx).addRunOnCommit(myHostDocument) { thisDoc -> rebuildMarkers(markersWholeRange(markers) ?: failAndReport("can't get marker range in undo", event)) } } diff --git a/platform/platform-impl/src/com/intellij/openapi/application/impl/AppUIExecutorImpl.kt b/platform/platform-impl/src/com/intellij/openapi/application/impl/AppUIExecutorImpl.kt index 64e9f723e875..557974333c93 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/impl/AppUIExecutorImpl.kt +++ b/platform/platform-impl/src/com/intellij/openapi/application/impl/AppUIExecutorImpl.kt @@ -14,7 +14,7 @@ import com.intellij.openapi.diagnostic.thisLogger import com.intellij.openapi.project.DumbService import com.intellij.openapi.project.Project import com.intellij.psi.PsiDocumentManager -import com.intellij.psi.impl.PsiDocumentManagerBase +import com.intellij.psi.impl.PsiDocumentManagerEx import kotlinx.coroutines.Runnable import kotlinx.coroutines.async import kotlinx.coroutines.launch @@ -152,7 +152,7 @@ fun AppUIExecutor.coroutineDispatchingContext(): ContinuationInterceptor { internal class WithDocumentsCommitted(private val project: Project, private val modality: ModalityState) : ContextConstraint { override fun isCorrectContext(): Boolean { - val manager = PsiDocumentManager.getInstance(project) as PsiDocumentManagerBase + val manager = PsiDocumentManager.getInstance(project) as PsiDocumentManagerEx return !manager.isCommitInProgress && !manager.hasEventSystemEnabledUncommittedDocuments() } @@ -166,7 +166,7 @@ internal class WithDocumentsCommitted(private val project: Project, private val "" } else { - val manager = PsiDocumentManager.getInstance(project) as PsiDocumentManagerBase + val manager = PsiDocumentManager.getInstance(project) as PsiDocumentManagerEx ", isCommitInProgress()=${manager.isCommitInProgress}" + ", hasEventSystemEnabledUncommittedDocuments()=${manager.hasEventSystemEnabledUncommittedDocuments()}" } diff --git a/platform/platform-impl/src/com/intellij/openapi/application/rw/CommittedDocumentsConstraint.kt b/platform/platform-impl/src/com/intellij/openapi/application/rw/CommittedDocumentsConstraint.kt index c6cb9715ca03..505937c353e7 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/rw/CommittedDocumentsConstraint.kt +++ b/platform/platform-impl/src/com/intellij/openapi/application/rw/CommittedDocumentsConstraint.kt @@ -6,13 +6,14 @@ import com.intellij.openapi.application.ReadConstraint import com.intellij.openapi.project.Project import com.intellij.psi.PsiDocumentManager import com.intellij.psi.impl.PsiDocumentManagerBase +import com.intellij.psi.impl.PsiDocumentManagerEx internal class CommittedDocumentsConstraint( private val project: Project, ) : ReadConstraint { override fun isSatisfied(): Boolean { - val manager = PsiDocumentManager.getInstance(project) as PsiDocumentManagerBase + val manager = PsiDocumentManager.getInstance(project) as PsiDocumentManagerEx return !manager.isCommitInProgress && !manager.hasEventSystemEnabledUncommittedDocuments() } diff --git a/platform/testFramework/src/com/intellij/testFramework/EditorListenerTracker.java b/platform/testFramework/src/com/intellij/testFramework/EditorListenerTracker.java index 0b3b5659e379..8437a88f2ba5 100644 --- a/platform/testFramework/src/com/intellij/testFramework/EditorListenerTracker.java +++ b/platform/testFramework/src/com/intellij/testFramework/EditorListenerTracker.java @@ -6,6 +6,7 @@ import com.intellij.openapi.editor.impl.event.EditorEventMulticasterImpl; import com.intellij.openapi.vfs.encoding.EncodingManager; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import org.jetbrains.annotations.TestOnly; import org.junit.Assert; @@ -35,7 +36,7 @@ public final class EditorListenerTracker { // listeners may hang on default project which comes and goes unpredictably, so just ignore them afterList.removeIf(listener -> { //noinspection CastConflictsWithInstanceof - if (listener instanceof PsiDocumentManager && ((PsiDocumentManagerBase)listener).isDefaultProject()) { + if (listener instanceof PsiDocumentManager && ((PsiDocumentManagerEx)listener).isDefaultProject()) { return true; } diff --git a/platform/testFramework/src/com/intellij/testFramework/HeavyPlatformTestCase.java b/platform/testFramework/src/com/intellij/testFramework/HeavyPlatformTestCase.java index ef33d5935334..06ff42c3c8cb 100644 --- a/platform/testFramework/src/com/intellij/testFramework/HeavyPlatformTestCase.java +++ b/platform/testFramework/src/com/intellij/testFramework/HeavyPlatformTestCase.java @@ -52,6 +52,7 @@ import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import com.intellij.psi.impl.PsiManagerEx; import com.intellij.psi.impl.source.tree.injected.InjectedLanguageManagerImpl; import com.intellij.testFramework.common.TestApplicationKt; @@ -245,7 +246,7 @@ public abstract class HeavyPlatformTestCase extends UsefulTestCase implements Da if (myProject != null) { CodeStyle.setTemporarySettings(myProject, CodeStyle.createTestSettings()); InjectedLanguageManagerImpl.pushInjectors(myProject); - ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(myProject)).clearUncommittedDocuments(); + ((PsiDocumentManagerEx)PsiDocumentManager.getInstance(myProject)).clearUncommittedDocuments(); IndexingTestUtil.waitUntilIndexesAreReady(myProject, getIndexingTimeout()); } diff --git a/platform/testFramework/src/com/intellij/testFramework/TestObservation.kt b/platform/testFramework/src/com/intellij/testFramework/TestObservation.kt index 5fe922ccd1b5..a0f8e53ca154 100644 --- a/platform/testFramework/src/com/intellij/testFramework/TestObservation.kt +++ b/platform/testFramework/src/com/intellij/testFramework/TestObservation.kt @@ -10,6 +10,7 @@ import com.intellij.openapi.util.registry.Registry import com.intellij.platform.backend.observation.Observation import com.intellij.psi.PsiDocumentManager import com.intellij.psi.impl.PsiDocumentManagerBase +import com.intellij.psi.impl.PsiDocumentManagerEx import com.intellij.testFramework.common.DEFAULT_TEST_TIMEOUT import com.intellij.testFramework.common.DEFAULT_TEST_TIMEOUT_MS import com.intellij.testFramework.concurrency.waitForPromiseAndPumpEdt @@ -75,7 +76,7 @@ object TestObservation { if (!Registry.`is`("ide.activity.tracking.enable.debug")) { return "Enable 'ide.activity.tracking.enable.debug' registry option to collect uncommited document traces" } - val psiDocumentManager = PsiDocumentManager.getInstance(project) as PsiDocumentManagerBase + val psiDocumentManager = PsiDocumentManager.getInstance(project) as PsiDocumentManagerEx return psiDocumentManager.uncommitedDocumentsWithTraces.entries .joinToString("\n") { it.key.toString() + ": " + it.value.stackTraceToString() diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyStubsTest.java b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyStubsTest.java index 4fb63c898ced..f90e11fb20b6 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyStubsTest.java +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyStubsTest.java @@ -8,6 +8,7 @@ import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import com.intellij.psi.impl.source.PsiFileImpl; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.PsiShortNamesCache; @@ -47,7 +48,7 @@ public class GroovyStubsTest extends LightJavaCodeInsightFixtureTestCase { } public void testStubIndexMismatch() { - ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(getProject())).disableBackgroundCommit(myFixture.getTestRootDisposable()); + ((PsiDocumentManagerEx)PsiDocumentManager.getInstance(getProject())).disableBackgroundCommit(myFixture.getTestRootDisposable()); VirtualFile vFile = myFixture.getTempDirFixture().createFile("foo.groovy"); final Project project = myFixture.getProject(); diff --git a/plugins/kotlin/performance-tests/performance-test-utils/test/org/jetbrains/kotlin/idea/performance/tests/utils/projectRoutines.kt b/plugins/kotlin/performance-tests/performance-test-utils/test/org/jetbrains/kotlin/idea/performance/tests/utils/projectRoutines.kt index ad0a39d645ab..5ce5bf5aae74 100644 --- a/plugins/kotlin/performance-tests/performance-test-utils/test/org/jetbrains/kotlin/idea/performance/tests/utils/projectRoutines.kt +++ b/plugins/kotlin/performance-tests/performance-test-utils/test/org/jetbrains/kotlin/idea/performance/tests/utils/projectRoutines.kt @@ -25,6 +25,7 @@ import com.intellij.openapi.vfs.VirtualFileManager import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiFile import com.intellij.psi.impl.PsiDocumentManagerBase +import com.intellij.psi.impl.PsiDocumentManagerEx import com.intellij.psi.search.FilenameIndex import com.intellij.psi.search.GlobalSearchScope import com.intellij.testFramework.ExtensionTestUtil @@ -43,7 +44,7 @@ fun commitAllDocuments() { } ProjectManagerEx.getInstanceEx().openProjects.forEach { project -> - val psiDocumentManagerBase = PsiDocumentManager.getInstance(project) as PsiDocumentManagerBase + val psiDocumentManagerBase = PsiDocumentManager.getInstance(project) as PsiDocumentManagerEx runInEdtAndWait { psiDocumentManagerBase.clearUncommittedDocuments() @@ -53,7 +54,7 @@ fun commitAllDocuments() { } fun commitDocument(project: Project, document: Document) { - val psiDocumentManagerBase = PsiDocumentManager.getInstance(project) as PsiDocumentManagerBase + val psiDocumentManagerBase = PsiDocumentManager.getInstance(project) as PsiDocumentManagerEx runInEdtAndWait { psiDocumentManagerBase.commitDocument(document) } diff --git a/plugins/kotlin/performance-tests/test/org/jetbrains/kotlin/idea/perf/suite/performanceSuite.kt b/plugins/kotlin/performance-tests/test/org/jetbrains/kotlin/idea/perf/suite/performanceSuite.kt index 57efbd50b6a0..6bc6c7511356 100644 --- a/plugins/kotlin/performance-tests/test/org/jetbrains/kotlin/idea/perf/suite/performanceSuite.kt +++ b/plugins/kotlin/performance-tests/test/org/jetbrains/kotlin/idea/perf/suite/performanceSuite.kt @@ -16,6 +16,7 @@ import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiFile import com.intellij.psi.impl.PsiDocumentManagerBase +import com.intellij.psi.impl.PsiDocumentManagerEx import com.intellij.psi.util.PsiTreeUtil import com.intellij.testFramework.* import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl @@ -70,7 +71,7 @@ class PerformanceSuite { } ProjectManagerEx.getInstanceEx().openProjects.forEach { project -> - val psiDocumentManagerBase = PsiDocumentManager.getInstance(project) as PsiDocumentManagerBase + val psiDocumentManagerBase = PsiDocumentManager.getInstance(project) as PsiDocumentManagerEx runInEdtAndWait { psiDocumentManagerBase.clearUncommittedDocuments() diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/editor/MavenModelVersionSyncronizerImpl.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/editor/MavenModelVersionSyncronizerImpl.kt index 95e2a6a9beeb..e10cd157b094 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/editor/MavenModelVersionSyncronizerImpl.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/editor/MavenModelVersionSyncronizerImpl.kt @@ -22,6 +22,7 @@ import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiElement import com.intellij.psi.impl.PsiDocumentManagerBase +import com.intellij.psi.impl.PsiDocumentManagerEx import com.intellij.psi.xml.XmlAttributeValue import com.intellij.psi.xml.XmlElement import com.intellij.psi.xml.XmlFile @@ -41,7 +42,7 @@ class MavenModelVersionSyncronizerImpl( } private var applying = false - private val pdm = PsiDocumentManager.getInstance(project) as PsiDocumentManagerBase + private val pdm = PsiDocumentManager.getInstance(project) as PsiDocumentManagerEx fun listenForDocumentChanges() { Disposer.register(editor.disposable, this) diff --git a/xml/impl/src/com/intellij/codeInsight/editorActions/XmlTagNameSynchronizerImpl.java b/xml/impl/src/com/intellij/codeInsight/editorActions/XmlTagNameSynchronizerImpl.java index 8e36e44661f0..91a881e56e59 100644 --- a/xml/impl/src/com/intellij/codeInsight/editorActions/XmlTagNameSynchronizerImpl.java +++ b/xml/impl/src/com/intellij/codeInsight/editorActions/XmlTagNameSynchronizerImpl.java @@ -29,6 +29,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.core.impl.PomModelImpl; import com.intellij.psi.*; import com.intellij.psi.impl.PsiDocumentManagerBase; +import com.intellij.psi.impl.PsiDocumentManagerEx; import com.intellij.psi.impl.source.tree.LeafPsiElement; import com.intellij.psi.impl.source.tree.TreeUtil; import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtilBase; @@ -56,7 +57,7 @@ final class XmlTagNameSynchronizerImpl implements DocumentListener, CaretListene private static final Key SYNCHRONIZER_KEY = XmlTagNameSynchronizer.Companion.getSYNCHRONIZER_KEY$intellij_xml_impl(); private static final Key> MARKERS_KEY = Key.create("tag.name.synchronizer.markers"); private static final TreeSet allMarkers = new TreeSet<>(Comparator.comparingInt(Segment::getStartOffset)); - private final PsiDocumentManagerBase myDocumentManager; + private final PsiDocumentManagerEx myDocumentManager; private final Language myLanguage; private final EditorImpl myEditor; private final Project myProject; @@ -65,7 +66,7 @@ final class XmlTagNameSynchronizerImpl implements DocumentListener, CaretListene XmlTagNameSynchronizerImpl(EditorImpl editor, Project project, Language language) { myEditor = editor; myLanguage = language; - myDocumentManager = (PsiDocumentManagerBase)PsiDocumentManager.getInstance(project); + myDocumentManager = (PsiDocumentManagerEx)PsiDocumentManager.getInstance(project); myProject = project; }