use DumbService#completeJustSumbittedTasks in some places between VFS changes and reference resolve

This commit is contained in:
peter
2016-11-14 20:32:34 +01:00
parent 825fc1797b
commit 0d67966124
5 changed files with 15 additions and 1 deletions
@@ -19,6 +19,7 @@ import com.intellij.ide.util.DirectoryChooserUtil;
import com.intellij.lang.java.JavaFindUsagesProvider;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.JavaProjectRootsUtil;
import com.intellij.openapi.roots.ProjectFileIndex;
@@ -236,9 +237,12 @@ public class MoveClassesOrPackagesUtil {
if (!Comparing.equal(moveDestination.getVirtualFile(), containingDirectory != null ? containingDirectory.getVirtualFile() : null)) {
LOG.assertTrue(file.getVirtualFile() != null, aClass);
Project project = file.getProject();
MoveFilesOrDirectoriesUtil.doMoveFile(file, moveDestination);
file = moveDestination.findFile(file.getName());
DumbService.getInstance(project).completeJustSubmittedTasks();
if (newPackage != null && file instanceof PsiClassOwner && !FileTypeUtils.isInServerPageFile(file) && !PsiUtil.isModuleFile(file)) {
// Do not rely on class instance identity retention after setPackageName (Scala)
String aClassName = aClass.getName();
@@ -25,6 +25,7 @@ import com.intellij.openapi.editor.Document;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileEditor.impl.LoadTextUtil;
import com.intellij.openapi.progress.ProgressIndicatorProvider;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.ui.Queryable;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.TextRange;
@@ -366,6 +367,8 @@ public class PsiDirectoryImpl extends PsiElementBase implements PsiDirectory, Qu
}
if (copyVFile == null) throw new IncorrectOperationException("File was not copied: " + vFile);
DumbService.getInstance(getProject()).completeJustSubmittedTasks();
final PsiFile copyPsi = myManager.findFile(copyVFile);
if (copyPsi == null) throw new IncorrectOperationException("Could not find file " + copyVFile + " after copying " + vFile);
updateAddedFile(copyPsi);
@@ -64,7 +64,6 @@ import com.intellij.util.Processor;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.HashSet;
import com.intellij.util.containers.MultiMap;
import com.intellij.util.ui.UIUtil;
import gnu.trove.THashSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -479,6 +478,8 @@ public abstract class BaseRefactoringProcessor implements Runnable {
}
});
DumbService.getInstance(myProject).completeJustSubmittedTasks();
for(Map.Entry<RefactoringHelper, Object> e: preparedData.entrySet()) {
//noinspection unchecked
e.getKey().performOperation(myProject, e.getValue());
@@ -19,6 +19,7 @@ import com.intellij.ide.util.EditorHelper;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.paths.PsiDynaReference;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.psi.PsiDirectory;
@@ -181,6 +182,8 @@ public class MoveFilesOrDirectoriesProcessor extends BaseRefactoringProcessor {
// sort by offset descending to process correctly several usages in one PsiElement [IDEADEV-33013]
CommonRefactoringUtil.sortDepthFirstRightLeftOrder(usages);
DumbService.getInstance(myProject).completeJustSubmittedTasks();
// fix references in moved files to outer files
for (PsiFile movedFile : movedFiles) {
MoveFileHandler.forElement(movedFile).updateMovedFile(movedFile);
@@ -18,6 +18,7 @@ package org.jetbrains.plugins.groovy.refactoring.move;
import com.intellij.lang.FileASTNode;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.tree.Factory;
@@ -77,6 +78,8 @@ public class MoveGroovyClassHandler implements MoveClassHandler {
if (!moveDestination.equals(file.getContainingDirectory())) {
MoveFilesOrDirectoriesUtil.doMoveFile(file, moveDestination);
file = moveDestination.findFile(file.getName());
assert file != null;
DumbService.getInstance(file.getProject()).completeJustSubmittedTasks();
((PsiClassOwner)file).setPackageName(newPackageName);
}
return ((GroovyFile)file).getScriptClass();