import com.intellij.openapi.extensions.ExtensionsArea;
import com.intellij.openapi.fileEditor.*;
import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
+import com.intellij.openapi.fileEditor.impl.EditorHistoryManager;
import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.module.Module;
+import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.util.*;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vcs.readOnlyHandler.ReadonlyStatusHandlerImpl;
import com.intellij.openapi.vfs.*;
+import com.intellij.openapi.vfs.impl.VirtualFilePointerTracker;
import com.intellij.psi.*;
import com.intellij.psi.impl.DebugUtil;
import com.intellij.psi.impl.PsiManagerEx;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.SearchScope;
import com.intellij.psi.search.UsageSearchContext;
+import com.intellij.psi.stubs.StubTextInconsistencyException;
import com.intellij.psi.stubs.StubUpdatingIndex;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesProcessor;
private ChooseByNameBase myChooseByNamePopup;
private boolean myAllowDirt;
private boolean myCaresAboutInjection = true;
+ private VirtualFilePointerTracker myVirtualFilePointerTracker;
public CodeInsightTestFixtureImpl(@NotNull IdeaProjectTestFixture projectFixture, @NotNull TempDirTestFixture tempDirTestFixture) {
myProjectFixture = projectFixture;
@NotNull Editor editor,
@NotNull int[] toIgnore,
boolean canChangeDocument) {
- ApplicationManager.getApplication().assertIsDispatchThread();
Project project = file.getProject();
ensureIndexesUpToDate(project);
DaemonCodeAnalyzerImpl codeAnalyzer = (DaemonCodeAnalyzerImpl)DaemonCodeAnalyzer.getInstance(project);
int oldDelay = settings.AUTOREPARSE_DELAY;
try {
settings.AUTOREPARSE_DELAY = 0;
- List<HighlightInfo> infos =
- codeAnalyzer.runPasses(file, editor.getDocument(), Collections.singletonList(textEditor), toIgnore, canChangeDocument, null);
+ List<HighlightInfo> infos = new ArrayList<>();
+ EdtTestUtil.runInEdtAndWait(() -> infos.addAll( codeAnalyzer.runPasses(file, editor.getDocument(), Collections.singletonList(textEditor), toIgnore, canChangeDocument, null)));
infos.addAll(DaemonCodeAnalyzerEx.getInstanceEx(project).getFileLevelHighlights(project, file));
return infos;
}
public static void ensureIndexesUpToDate(@NotNull Project project) {
if (!DumbService.isDumb(project)) {
- FileBasedIndex.getInstance().ensureUpToDate(StubUpdatingIndex.INDEX_ID, project, null);
- FileBasedIndex.getInstance().ensureUpToDate(TodoIndex.NAME, project, null);
+ ReadAction.run(() -> {
+ FileBasedIndex.getInstance().ensureUpToDate(StubUpdatingIndex.INDEX_ID, project, null);
+ FileBasedIndex.getInstance().ensureUpToDate(TodoIndex.NAME, project, null);
+ });
}
}
@Override
public void testInspection(@NotNull String testDir, @NotNull InspectionToolWrapper toolWrapper) {
- VirtualFile sourceDir = copyDirectoryToProject(new File(testDir, "src").getPath(), "src");
+ VirtualFile sourceDir = copyDirectoryToProject(new File(testDir, "src").getPath(), "");
PsiDirectory psiDirectory = getPsiManager().findDirectory(sourceDir);
assertNotNull(psiDirectory);
@Override
public void type(final char c) {
assertInitialized();
- UIUtil.invokeAndWaitIfNeeded((Runnable)() -> {
+ ApplicationManager.getApplication().invokeAndWait((Runnable)() -> {
final EditorActionManager actionManager = EditorActionManager.getInstance();
if (c == '\b') {
performEditorAction(IdeActions.ACTION_EDITOR_BACKSPACE);
public LookupElement[] complete(@NotNull final CompletionType type, final int invocationCount) {
assertInitialized();
myEmptyLookup = false;
- return UIUtil.invokeAndWaitIfNeeded(new Computable<LookupElement[]>() {
- @Override
- public LookupElement[] compute() {
- CommandProcessor.getInstance().executeCommand(getProject(), new Runnable() {
- @Override
- public void run() {
- final CodeCompletionHandlerBase handler = new CodeCompletionHandlerBase(type) {
- @Override
- @SuppressWarnings("deprecation")
- protected void completionFinished(CompletionProgressIndicator indicator, boolean hasModifiers) {
- myEmptyLookup = indicator.getLookup().getItems().isEmpty();
- super.completionFinished(indicator, hasModifiers);
- }
- };
- Editor editor = getCompletionEditor();
- assertNotNull(editor);
- handler.invokeCompletion(getProject(), editor, invocationCount);
- PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); // to compare with file text
- }
- }, null, null, getEditor().getDocument());
- return getLookupElements();
- }
- });
+ ApplicationManager.getApplication().invokeAndWait(() -> CommandProcessor.getInstance().executeCommand(getProject(), () -> {
+ final CodeCompletionHandlerBase handler = new CodeCompletionHandlerBase(type) {
+ @Override
+ @SuppressWarnings("deprecation")
+ protected void completionFinished(CompletionProgressIndicator indicator, boolean hasModifiers) {
+ myEmptyLookup = indicator.getLookup().getItems().isEmpty();
+ super.completionFinished(indicator, hasModifiers);
+ }
+ };
+ Editor editor = getCompletionEditor();
+ assertNotNull(editor);
+ handler.invokeCompletion(getProject(), editor, invocationCount);
+ PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); // to compare with file text
+ }, null, null, getEditor().getDocument()));
+ return getLookupElements();
}
@Nullable
@Override
public void checkResultByFile(@NotNull String expectedFile, boolean ignoreTrailingWhitespaces) {
assertInitialized();
- UIUtil.invokeAndWaitIfNeeded((Runnable)() -> checkResultByFile(expectedFile, getHostFile(), ignoreTrailingWhitespaces));
+ ApplicationManager.getApplication().invokeAndWait(() -> checkResultByFile(expectedFile, getHostFile(), ignoreTrailingWhitespaces));
}
@Override
public void checkResultByFile(@NotNull String filePath, @NotNull String expectedFile, boolean ignoreTrailingWhitespaces) {
assertInitialized();
- UIUtil.invokeAndWaitIfNeeded((Runnable)() -> checkResultByFile(expectedFile, getFileToCheck(filePath), ignoreTrailingWhitespaces));
+ ApplicationManager.getApplication().invokeAndWait(() -> checkResultByFile(expectedFile, getFileToCheck(filePath), ignoreTrailingWhitespaces));
}
private PsiFile getFileToCheck(String filePath) {
ensureIndexesUpToDate(getProject());
((StartupManagerImpl)StartupManagerEx.getInstanceEx(getProject())).runPostStartupActivities();
});
+
+ for (Module module : ModuleManager.getInstance(getProject()).getModules()) {
+ ModuleRootManager.getInstance(module).orderEntries().getAllLibrariesAndSdkClassesRoots(); // instantiate all VFPs
+ }
+ myVirtualFilePointerTracker = new VirtualFilePointerTracker();
}
@Override
}
finally {
super.tearDown();
+ myVirtualFilePointerTracker.assertPointersAreDisposed();
}
}
private void closeOpenFiles() {
PsiDocumentManager.getInstance(getProject()).commitAllDocuments();
FileEditorManagerEx.getInstanceEx(getProject()).closeAllFiles();
+ for (VirtualFile file : EditorHistoryManager.getInstance(getProject()).getFiles()) {
+ EditorHistoryManager.getInstance(getProject()).removeFile(file);
+ }
}
@NotNull
private long collectAndCheckHighlighting(@NotNull ExpectedHighlightingData data) {
final Project project = getProject();
- PsiDocumentManager.getInstance(project).commitAllDocuments();
+ EdtTestUtil.runInEdtAndWait(() -> PsiDocumentManager.getInstance(project).commitAllDocuments());
PsiFileImpl file = (PsiFileImpl)getHostFile();
FileElement hardRefToFileElement = file.calcTreeElement();//to load text
@NotNull
public List<HighlightInfo> doHighlighting() {
final Project project = getProject();
- PsiDocumentManager.getInstance(project).commitAllDocuments();
+ EdtTestUtil.runInEdtAndWait(() -> PsiDocumentManager.getInstance(project).commitAllDocuments());
PsiFile file = getFile();
Editor editor = getEditor();
handler.setClearReadOnlyInTests(true);
AtomicBoolean result = new AtomicBoolean();
try {
- ApplicationManager.getApplication().invokeLater(
- () -> result.set(ShowIntentionActionsHandler.chooseActionAndInvoke(file, editor, action, actionText)));
+ ApplicationManager.getApplication().invokeLater(() -> {
+ try {
+ result.set(ShowIntentionActionsHandler.chooseActionAndInvoke(file, editor, action, actionText));
+ }
+ catch (StubTextInconsistencyException e) {
+ PsiTestUtil.compareStubTexts(e);
+ }
+ });
UIUtil.dispatchAllInvocationEvents();
checkPsiTextConsistency(project, vFile);
}
}
}
+ @NotNull
+ public Disposable getProjectDisposable() {
+ return myProjectFixture.getTestRootDisposable();
+ }
+
//<editor-fold desc="Deprecated stuff.">
- @SuppressWarnings("unused")
@Deprecated
public static GlobalInspectionContextForTests createGlobalContextForTool(@NotNull AnalysisScope scope,
@NotNull final Project project,