diff --git a/java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceReader.java b/java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceReader.java index 84cbf23d85ab..a5a791409261 100644 --- a/java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceReader.java +++ b/java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceReader.java @@ -104,13 +104,18 @@ class CompilerReferenceReader { myIndex.close(); } - static CompilerReferenceReader create(Project project) { + static boolean exists(Project project) { File buildDir = BuildManager.getInstance().getProjectSystemDirectory(project); if (buildDir == null || CompilerBackwardReferenceIndex.versionDiffers(buildDir)) { - return null; + return false; } + return CompilerBackwardReferenceIndex.exist(buildDir); + } + + static CompilerReferenceReader create(Project project) { + if (!exists(project)) return null; try { - return new CompilerReferenceReader(buildDir); + return new CompilerReferenceReader(BuildManager.getInstance().getProjectSystemDirectory(project)); } catch (IOException e) { throw new RuntimeException(e); diff --git a/java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceServiceImpl.java b/java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceServiceImpl.java index 36990e3ea94a..1bd1240723a7 100644 --- a/java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceServiceImpl.java +++ b/java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceServiceImpl.java @@ -134,8 +134,13 @@ public class CompilerReferenceServiceImpl extends CompilerReferenceService imple if (!ApplicationManager.getApplication().isUnitTestMode()) { ApplicationManager.getApplication().executeOnPooledThread(() -> { - CompileScope projectCompileScope = compilerManager.createProjectCompileScope(myProject); - boolean isUpToDate = compilerManager.isUpToDate(projectCompileScope); + boolean isUpToDate; + if (CompilerReferenceReader.exists(myProject)) { + CompileScope projectCompileScope = compilerManager.createProjectCompileScope(myProject); + isUpToDate = compilerManager.isUpToDate(projectCompileScope); + } else { + isUpToDate = false; + } executeOnBuildThread(() -> { myDirtyScopeHolder.upToDateChecked(isUpToDate); if (isUpToDate) { 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 c97664720d28..a4a5b856480b 100644 --- a/java/compiler/impl/src/com/intellij/compiler/backwardRefs/DirtyScopeHolder.java +++ b/java/compiler/impl/src/com/intellij/compiler/backwardRefs/DirtyScopeHolder.java @@ -15,6 +15,7 @@ */ package com.intellij.compiler.backwardRefs; +import com.intellij.ProjectTopics; import com.intellij.compiler.CompilerConfiguration; import com.intellij.compiler.CompilerReferenceService; import com.intellij.compiler.backwardRefs.view.DirtyScopeTestInfo; @@ -28,6 +29,8 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.ModuleRootEvent; +import com.intellij.openapi.roots.ModuleRootListener; import com.intellij.openapi.util.UserDataHolderBase; import com.intellij.openapi.vfs.*; import com.intellij.psi.PsiDocumentManager; @@ -90,6 +93,16 @@ public class DirtyScopeHolder extends UserDataHolderBase { myCompilationAffectedModules.add(messageText); } }); + + connect.subscribe(ProjectTopics.PROJECT_ROOTS, new ModuleRootListener() { + @Override + public void beforeRootsChange(ModuleRootEvent event) { + final Module[] modules = ModuleManager.getInstance(myService.getProject()).getModules(); + synchronized (myLock) { + ContainerUtil.addAll(myVFSChangedModules, modules); + } + } + }); } }