From 54a62c5bf267ad50d81cef4f707cc15bf72e5fb9 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Tue, 25 Oct 2016 11:51:57 +0200 Subject: [PATCH] [java] module files change tracker - dumbing down (IDEA-CR-14933) --- .../impl/analysis/JavaModuleGraphUtil.java | 6 +-- .../psi/impl/light/LightJavaModule.java | 2 +- .../source/JavaModuleFileChangeTracker.java | 53 ++----------------- .../impl/source/PsiJavaModuleReference.java | 2 +- 4 files changed, 10 insertions(+), 53 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/JavaModuleGraphUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/JavaModuleGraphUtil.java index 3aaad5acea97..210616c7ab05 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/JavaModuleGraphUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/JavaModuleGraphUtil.java @@ -51,13 +51,13 @@ public class JavaModuleGraphUtil { public static Collection findCycle(@NotNull PsiJavaModule module) { Project project = module.getProject(); List> cycles = CachedValuesManager.getManager(project).getCachedValue(project, () -> - Result.create(findCycles(project), JavaModuleFileChangeTracker.getInstance(project))); + Result.create(findCycles(project), JavaModuleFileChangeTracker.getDependencies(project))); return ContainerUtil.find(cycles, set -> set.contains(module)); } public static boolean exports(@NotNull PsiJavaModule source, @NotNull String packageName, @NotNull PsiJavaModule target) { Map> exports = CachedValuesManager.getCachedValue(source, () -> - Result.create(exportsMap(source), JavaModuleFileChangeTracker.getInstance(source.getProject()))); + Result.create(exportsMap(source), JavaModuleFileChangeTracker.getDependencies(source.getProject()))); Set targets = exports.get(packageName); return targets != null && (targets.isEmpty() || targets.contains(target.getModuleName())); } @@ -65,7 +65,7 @@ public class JavaModuleGraphUtil { public static boolean reads(@NotNull PsiJavaModule source, @NotNull PsiJavaModule destination) { Project project = source.getProject(); RequiresGraph graph = CachedValuesManager.getManager(project).getCachedValue(project, () -> - Result.create(buildRequiresGraph(project), JavaModuleFileChangeTracker.getInstance(project))); + Result.create(buildRequiresGraph(project), JavaModuleFileChangeTracker.getDependencies(project))); return graph.reads(source, destination); } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightJavaModule.java b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightJavaModule.java index 72464a05e4d9..4283a0415e73 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightJavaModule.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightJavaModule.java @@ -150,7 +150,7 @@ public class LightJavaModule extends LightElement implements PsiJavaModule { @Override public Result compute(Pair p) { LightJavaModule module = new LightJavaModule(p.first, p.second); - return Result.create(module, JavaModuleFileChangeTracker.getInstance(p.first.getProject())); + return Result.create(module, JavaModuleFileChangeTracker.getDependencies(p.first.getProject())); } }, false, pair(manager, jarRoot)); } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/JavaModuleFileChangeTracker.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/JavaModuleFileChangeTracker.java index 8ebd1854d11d..a3f347e26d93 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/JavaModuleFileChangeTracker.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/JavaModuleFileChangeTracker.java @@ -16,57 +16,14 @@ package com.intellij.psi.impl.source; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.ModificationTracker; -import com.intellij.openapi.util.NotNullLazyKey; -import com.intellij.psi.*; -import com.intellij.psi.PsiTreeChangeEvent; -import com.intellij.util.NotNullFunction; +import com.intellij.openapi.roots.ProjectRootModificationTracker; import org.jetbrains.annotations.NotNull; -import static com.intellij.psi.PsiTreeChangeEvent.*; - -public class JavaModuleFileChangeTracker implements ModificationTracker { - private static final NotNullLazyKey KEY = NotNullLazyKey.create("", new NotNullFunction() { - @NotNull - @Override - public ModificationTracker fun(Project project) { - return new JavaModuleFileChangeTracker(project); - } - }); +import static com.intellij.psi.util.PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT; +public class JavaModuleFileChangeTracker { @NotNull - public static ModificationTracker getInstance(@NotNull Project p) { - return KEY.getValue(p); - } - - private volatile long myCount = 0; - - private JavaModuleFileChangeTracker(Project project) { - PsiManager.getInstance(project).addPsiTreeChangeListener(new PsiTreeChangeAdapter() { - @Override public void childAdded(@NotNull PsiTreeChangeEvent event) { process(event.getFile()); } - @Override public void childRemoved(@NotNull PsiTreeChangeEvent event) { process(event.getFile()); } - @Override public void childReplaced(@NotNull PsiTreeChangeEvent event) { process(event.getFile()); } - @Override public void childMoved(@NotNull PsiTreeChangeEvent event) { process(event.getFile()); } - @Override public void childrenChanged(@NotNull PsiTreeChangeEvent event) { process(event.getFile()); } - - private void process(PsiFile file) { - if (file != null && PsiJavaModule.MODULE_INFO_FILE.equals(file.getName())) { - myCount++; - } - } - - @Override - public void propertyChanged(@NotNull PsiTreeChangeEvent event) { - String name = event.getPropertyName(); - if (name == PROP_FILE_NAME || name == PROP_DIRECTORY_NAME || name == PROP_ROOTS) { - myCount++; - } - } - }, project); - } - - @Override - public long getModificationCount() { - return myCount; + public static Object[] getDependencies(@NotNull Project project) { + return new Object[]{OUT_OF_CODE_BLOCK_MODIFICATION_COUNT, ProjectRootModificationTracker.getInstance(project)}; } } \ No newline at end of file diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaModuleReference.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaModuleReference.java index 38dce76f92d7..d61db2d5317d 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaModuleReference.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJavaModuleReference.java @@ -137,7 +137,7 @@ public class PsiJavaModuleReference extends PsiReferenceBase.Poly compute(Pair p) { Collection modules = Resolver.findModules(refOwner.getContainingFile(), p.first, p.second); PsiJavaModule module = modules.size() == 1 ? modules.iterator().next() : null; - return Result.create(module, JavaModuleFileChangeTracker.getInstance(refOwner.getProject())); + return Result.create(module, JavaModuleFileChangeTracker.getDependencies(refOwner.getProject())); } }, false, pair(refText, incompleteCode)); }