javac ast indices: check that index exist on project load & listen for roots modifications

This commit is contained in:
Dmitry Batkovich
2017-01-31 19:08:51 +03:00
parent 8853ce4dfa
commit d2d4e87765
3 changed files with 28 additions and 5 deletions
@@ -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);
@@ -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) {
@@ -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);
}
}
});
}
}