From 4ce18d0da6f6d289e9405c9ec5a4e6fdba6885e4 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Sun, 15 Jan 2017 22:55:44 +0300 Subject: [PATCH] javac ast indices: do not unmark dirty module after single file compilation 2 --- .../backwardRefs/DirtyScopeHolder.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/compiler/backwardRefs/DirtyScopeHolder.java b/java/compiler/impl/src/com/intellij/compiler/backwardRefs/DirtyScopeHolder.java index d041f24fbd32..93cb5893dc8f 100644 --- a/java/compiler/impl/src/com/intellij/compiler/backwardRefs/DirtyScopeHolder.java +++ b/java/compiler/impl/src/com/intellij/compiler/backwardRefs/DirtyScopeHolder.java @@ -119,14 +119,19 @@ public class DirtyScopeHolder extends UserDataHolderBase { void compilerActivityFinished(Module[] affectedModules) { compilationFinished(() -> { - final ModuleManager moduleManager = ModuleManager.getInstance(myService.getProject()); - final List compiledModules = myCompilationAffectedModules.stream().map(moduleManager::findModuleByName).collect(Collectors.toList()); + final List compiledModules = ReadAction.compute(() -> { + final Project project = myService.getProject(); + if (project.isDisposed()) { + return null; + } + final ModuleManager moduleManager = ModuleManager.getInstance(myService.getProject()); + return myCompilationAffectedModules.stream().map(moduleManager::findModuleByName).collect(Collectors.toList()); + }); + if (compiledModules == null) return; - myVFSChangedModules.removeAll(compiledModules); - - final Set unCompiledModules = ContainerUtil.newHashSet(affectedModules); - unCompiledModules.removeAll(compiledModules); - myVFSChangedModules.removeAll(unCompiledModules); + Set dirtyModulesAfterCompilation = ContainerUtil.set(affectedModules); + dirtyModulesAfterCompilation.removeAll(compiledModules); + ContainerUtil.addAll(myVFSChangedModules, dirtyModulesAfterCompilation); }); }