move more test-only methods away from DCAI (part of IJPL-224385)

GitOrigin-RevId: 51a5dec31d599fca05c043eaf6b580475dd0a030
This commit is contained in:
Alexey Kudravtsev
2026-02-02 16:25:53 +00:00
committed by intellij-monorepo-bot
parent c2add048cc
commit 6c47ea16f8
4 changed files with 100 additions and 40 deletions
@@ -177,7 +177,7 @@ public class FileStatusMapTest extends DaemonAnalyzerTestCase {
assertEmpty(highlightErrors());
PsiClass psiClass = ((PsiJavaFile)getFile()).getClasses()[0];
new RenameProcessor(myProject, psiClass, "Class2", false, false).run();
myDaemonCodeAnalyzer.waitForUpdateFileStatusBackgroundQueueInTests();
new TestDaemonCodeAnalyzerImpl(getProject()).waitForUpdateFileStatusBackgroundQueueInTests();
TextRange dirty = myDaemonCodeAnalyzer.getFileStatusMap().getFileDirtyScope(document, getFile(), Pass.UPDATE_ALL);
assertEquals(getFile().getTextRange(), dirty);
@@ -200,7 +200,7 @@ public class FileStatusMapTest extends DaemonAnalyzerTestCase {
PsiDocumentManager.getInstance(getProject()).commitAllDocuments();
PsiElement elementAtCaret = myFile.findElementAt(myEditor.getCaretModel().getOffset());
assertTrue(elementAtCaret instanceof PsiWhiteSpace);
myDaemonCodeAnalyzer.waitForUpdateFileStatusBackgroundQueueInTests();
new TestDaemonCodeAnalyzerImpl(getProject()).waitForUpdateFileStatusBackgroundQueueInTests();
TextRange dirty = myDaemonCodeAnalyzer.getFileStatusMap().getFileDirtyScope(document, getFile(), Pass.UPDATE_ALL);
assertEquals(elementAtCaret.getTextRange(), dirty);
assertEmpty(highlightErrors());
@@ -272,7 +272,7 @@ public class FileStatusMapTest extends DaemonAnalyzerTestCase {
int offset = myEditor.getCaretModel().getOffset();
type(' ');
PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); // reset "defensively marked"
myDaemonCodeAnalyzer.waitForUpdateFileStatusBackgroundQueueInTests();
new TestDaemonCodeAnalyzerImpl(getProject()).waitForUpdateFileStatusBackgroundQueueInTests();
assertEquals(new TextRange(offset-1, offset+1), fileStatusMap.getFileDirtyScope(document, myFile, Pass.LOCAL_INSPECTIONS));
}
@@ -1,15 +1,22 @@
// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInsight.daemon.impl;
import com.intellij.codeHighlighting.*;
import com.intellij.codeHighlighting.BackgroundEditorHighlighter;
import com.intellij.codeHighlighting.HighlightingPass;
import com.intellij.codeHighlighting.Pass;
import com.intellij.codeHighlighting.TextEditorHighlightingPass;
import com.intellij.codeHighlighting.TextEditorHighlightingPassRegistrar;
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzerSettings;
import com.intellij.codeInsight.daemon.LineMarkerInfo;
import com.intellij.codeInsight.daemon.ReferenceImporter;
import com.intellij.codeInsight.hint.HintManager;
import com.intellij.codeInsight.intention.impl.FileLevelIntentionComponent;
import com.intellij.codeInsight.intention.impl.IntentionHintComponent;
import com.intellij.codeInsight.multiverse.*;
import com.intellij.codeInsight.multiverse.CodeInsightContext;
import com.intellij.codeInsight.multiverse.CodeInsightContextHighlightingUtil;
import com.intellij.codeInsight.multiverse.CodeInsightContextUtil;
import com.intellij.codeInsight.multiverse.CodeInsightContexts;
import com.intellij.codeInsight.multiverse.EditorContextManager;
import com.intellij.codeInsight.quickfix.LazyQuickFixUpdater;
import com.intellij.codeInspection.ex.GlobalInspectionContextBase;
import com.intellij.codeWithMe.ClientId;
@@ -22,7 +29,11 @@ import com.intellij.lang.annotation.HighlightSeverity;
import com.intellij.notebook.editor.BackedVirtualFile;
import com.intellij.notebook.editor.BackedVirtualFileProvider;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.*;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.application.ex.ApplicationManagerEx;
import com.intellij.openapi.components.PersistentStateComponent;
import com.intellij.openapi.components.State;
@@ -40,14 +51,27 @@ import com.intellij.openapi.editor.impl.DocumentMarkupModel;
import com.intellij.openapi.editor.impl.EditorMarkupModelImpl;
import com.intellij.openapi.editor.markup.MarkupModel;
import com.intellij.openapi.editor.markup.RangeHighlighter;
import com.intellij.openapi.fileEditor.*;
import com.intellij.openapi.fileEditor.ClientFileEditorManager;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.FileEditorWithTextEditors;
import com.intellij.openapi.fileEditor.TextEditor;
import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.project.*;
import com.intellij.openapi.util.*;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.DumbServiceImpl;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.ProperTextRange;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
@@ -59,25 +83,46 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.util.PsiEditorUtil;
import com.intellij.psi.util.PsiUtilBase;
import com.intellij.psi.util.PsiUtilCore;
import com.intellij.util.*;
import com.intellij.util.concurrency.AppExecutorUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.ConcurrencyUtil;
import com.intellij.util.ExceptionUtil;
import com.intellij.util.Processor;
import com.intellij.util.Processors;
import com.intellij.util.SmartList;
import com.intellij.util.concurrency.EdtExecutorService;
import com.intellij.util.concurrency.ThreadingAssertions;
import com.intellij.util.concurrency.annotations.RequiresBackgroundThread;
import com.intellij.util.concurrency.annotations.RequiresEdt;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.io.storage.HeavyProcessLatch;
import com.intellij.util.ui.UIUtil;
import io.opentelemetry.context.Context;
import kotlinx.coroutines.CoroutineScope;
import org.jdom.Element;
import org.jetbrains.annotations.*;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.TestOnly;
import org.jetbrains.annotations.Unmodifiable;
import org.jetbrains.annotations.VisibleForTesting;
import javax.swing.*;
import java.awt.*;
import java.util.*;
import javax.swing.SwingUtilities;
import java.awt.Window;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.concurrent.*;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
@@ -95,7 +140,7 @@ public final class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzerEx
private static final @NotNull Key<Boolean> COMPLETE_ESSENTIAL_HIGHLIGHTING_KEY = Key.create("COMPLETE_ESSENTIAL_HIGHLIGHTING");
@NotNull private final Project myProject;
private final DaemonCodeAnalyzerSettings mySettings;
private final DaemonListeners myListeners;
final DaemonListeners myListeners;
private PsiDocumentManager psiDocumentManager;
private FileEditorManager fileEditorManager;
private final Map<FileEditor, DaemonProgressIndicator> myUpdateProgress = new HashMap<>(); // guarded by `this` lock
@@ -1605,11 +1650,6 @@ public final class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzerEx
public boolean isRestartToCompleteEssentialHighlightingRequested() {
return completeEssentialHighlightingRequested;
}
@TestOnly
public void waitForUpdateFileStatusBackgroundQueueInTests() {
assert ApplicationManager.getApplication().isUnitTestMode();
myListeners.waitForUpdateFileStatusQueue();
}
@Override
@RequiresBackgroundThread
@@ -66,7 +66,8 @@ public final class TestDaemonCodeAnalyzerImpl {
public TestDaemonCodeAnalyzerImpl(@NotNull Project project) {
myProject = project;
myDaemonCodeAnalyzer = getDaemonCodeAnalyzer(myProject);
myDaemonCodeAnalyzer = (DaemonCodeAnalyzerImpl)DaemonCodeAnalyzer.getInstance(myProject);
assert !myDaemonCodeAnalyzer.myDisposed;
}
/**
@@ -128,7 +129,8 @@ public final class TestDaemonCodeAnalyzerImpl {
PsiDocumentManager.getInstance(myProject).commitAllDocuments();
PsiConsistencyAssertions.assertNoFileTextMismatch(psiFile, editor.getDocument(), null);
myDaemonCodeAnalyzer.waitForUpdateFileStatusBackgroundQueueInTests(); // update the file status map before prohibiting its modifications
// update the file status map before prohibiting its modifications
waitForUpdateFileStatusBackgroundQueueInTests();
FileStatusMap fileStatusMap = myDaemonCodeAnalyzer.getFileStatusMap();
fileStatusMap.runAllowingDirt(canChangeDocument, () -> {
for (int ignoreId : passesToIgnore) {
@@ -144,12 +146,6 @@ public final class TestDaemonCodeAnalyzerImpl {
});
}
private static @NotNull DaemonCodeAnalyzerImpl getDaemonCodeAnalyzer(Project project) {
DaemonCodeAnalyzerImpl daemonCodeAnalyzer = (DaemonCodeAnalyzerImpl)DaemonCodeAnalyzer.getInstance(project);
assert !daemonCodeAnalyzer.myDisposed;
return daemonCodeAnalyzer;
}
@TestOnly
private void doRunPasses(@NotNull DaemonCodeAnalyzerImpl daemonCodeAnalyzer,
@NotNull TextEditor textEditor,
@@ -344,4 +340,9 @@ public final class TestDaemonCodeAnalyzerImpl {
} while (!future.isDone());
}
@TestOnly
public void waitForUpdateFileStatusBackgroundQueueInTests() {
assert ApplicationManager.getApplication().isUnitTestMode();
myDaemonCodeAnalyzer.myListeners.waitForUpdateFileStatusQueue();
}
}
@@ -1,8 +1,7 @@
// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.openapi.editor.impl;
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
import com.intellij.codeInsight.daemon.impl.DaemonCodeAnalyzerImpl;
import com.intellij.codeInsight.daemon.impl.TestDaemonCodeAnalyzerImpl;
import com.intellij.lang.FileASTNode;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.WriteAction;
@@ -10,7 +9,12 @@ import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.command.impl.UndoManagerImpl;
import com.intellij.openapi.command.undo.UndoManager;
import com.intellij.openapi.editor.*;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorFactory;
import com.intellij.openapi.editor.FoldRegion;
import com.intellij.openapi.editor.LazyRangeMarkerFactory;
import com.intellij.openapi.editor.RangeMarker;
import com.intellij.openapi.editor.event.DocumentEvent;
import com.intellij.openapi.editor.event.DocumentListener;
import com.intellij.openapi.editor.ex.DocumentEx;
@@ -21,7 +25,11 @@ import com.intellij.openapi.editor.markup.HighlighterTargetArea;
import com.intellij.openapi.editor.markup.MarkupModel;
import com.intellij.openapi.editor.markup.RangeHighlighter;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.util.*;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.TextRangeScalarUtil;
import com.intellij.openapi.util.ThrowableComputable;
import com.intellij.openapi.util.Trinity;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDocumentListener;
@@ -29,7 +37,13 @@ import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.PsiDocumentManagerImpl;
import com.intellij.psi.impl.PsiToDocumentSynchronizer;
import com.intellij.testFramework.*;
import com.intellij.testFramework.HeavyPlatformTestCase;
import com.intellij.testFramework.LeakHunter;
import com.intellij.testFramework.LightPlatformTestCase;
import com.intellij.testFramework.PerformanceUnitTest;
import com.intellij.testFramework.PlatformTestUtil;
import com.intellij.testFramework.Timings;
import com.intellij.testFramework.VfsTestUtil;
import com.intellij.tools.ide.metrics.benchmark.Benchmark;
import com.intellij.util.CommonProcessors;
import com.intellij.util.TestTimeOut;
@@ -44,7 +58,13 @@ import java.io.IOException;
import java.lang.ref.Reference;
import java.lang.ref.WeakReference;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Random;
import java.util.Set;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadLocalRandom;
@@ -994,8 +1014,7 @@ public class RangeMarkerTest extends LightPlatformTestCase {
RangeMarker m3 = document.createRangeMarker(2, 5);
assertEquals(2, ((DocumentImpl)document).getRangeMarkersNodeSize());
deleteString(document, 4, 5);
DaemonCodeAnalyzerImpl myDaemonCodeAnalyzer = (DaemonCodeAnalyzerImpl)DaemonCodeAnalyzerImpl.getInstanceEx(getProject());
myDaemonCodeAnalyzer.waitForUpdateFileStatusBackgroundQueueInTests();
new TestDaemonCodeAnalyzerImpl(getProject()).waitForUpdateFileStatusBackgroundQueueInTests();
assertTrue(m1.isValid());
assertTrue(m2.isValid());
assertTrue(m3.isValid());
@@ -1559,7 +1578,7 @@ public class RangeMarkerTest extends LightPlatformTestCase {
Reference<RangeMarker> persistentMarkerRef = new WeakReference<>(persistentMarker[0]);
marker[0] = null;
persistentMarker[0] = null;
((DaemonCodeAnalyzerImpl)DaemonCodeAnalyzer.getInstance(getProject())).waitForUpdateFileStatusBackgroundQueueInTests();
new TestDaemonCodeAnalyzerImpl(getProject()).waitForUpdateFileStatusBackgroundQueueInTests();
PsiDocumentManager.getInstance(getProject()).commitAllDocuments();
while (markerRef.get() != null || persistentMarkerRef.get() != null) {
GCUtil.tryGcSoftlyReachableObjects();