From 0d67966124a87f7edece0f1a532197d1be084b86 Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 14 Nov 2016 20:31:22 +0100 Subject: [PATCH] use DumbService#completeJustSumbittedTasks in some places between VFS changes and reference resolve --- .../move/moveClassesOrPackages/MoveClassesOrPackagesUtil.java | 4 ++++ .../src/com/intellij/psi/impl/file/PsiDirectoryImpl.java | 3 +++ .../com/intellij/refactoring/BaseRefactoringProcessor.java | 3 ++- .../MoveFilesOrDirectoriesProcessor.java | 3 +++ .../groovy/refactoring/move/MoveGroovyClassHandler.java | 3 +++ 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesUtil.java b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesUtil.java index a61a5c97bddf..a9f6dbb2a44e 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesUtil.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesUtil.java @@ -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(); diff --git a/platform/core-impl/src/com/intellij/psi/impl/file/PsiDirectoryImpl.java b/platform/core-impl/src/com/intellij/psi/impl/file/PsiDirectoryImpl.java index 485cabe5768c..8563d63b6553 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/file/PsiDirectoryImpl.java +++ b/platform/core-impl/src/com/intellij/psi/impl/file/PsiDirectoryImpl.java @@ -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); diff --git a/platform/lang-impl/src/com/intellij/refactoring/BaseRefactoringProcessor.java b/platform/lang-impl/src/com/intellij/refactoring/BaseRefactoringProcessor.java index 3a67137e7ece..24a016633df9 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/BaseRefactoringProcessor.java +++ b/platform/lang-impl/src/com/intellij/refactoring/BaseRefactoringProcessor.java @@ -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 e: preparedData.entrySet()) { //noinspection unchecked e.getKey().performOperation(myProject, e.getValue()); diff --git a/platform/lang-impl/src/com/intellij/refactoring/move/moveFilesOrDirectories/MoveFilesOrDirectoriesProcessor.java b/platform/lang-impl/src/com/intellij/refactoring/move/moveFilesOrDirectories/MoveFilesOrDirectoriesProcessor.java index f7158cb7dcfa..cf7ed622bf00 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/move/moveFilesOrDirectories/MoveFilesOrDirectoriesProcessor.java +++ b/platform/lang-impl/src/com/intellij/refactoring/move/moveFilesOrDirectories/MoveFilesOrDirectoriesProcessor.java @@ -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); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/move/MoveGroovyClassHandler.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/move/MoveGroovyClassHandler.java index 035fecd5b531..e8904a8ade2b 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/move/MoveGroovyClassHandler.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/move/MoveGroovyClassHandler.java @@ -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();