mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java] module files change tracker - dumbing down (IDEA-CR-14933)
This commit is contained in:
+3
-3
@@ -51,13 +51,13 @@ public class JavaModuleGraphUtil {
|
||||
public static Collection<PsiJavaModule> findCycle(@NotNull PsiJavaModule module) {
|
||||
Project project = module.getProject();
|
||||
List<Set<PsiJavaModule>> 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<String, Set<String>> exports = CachedValuesManager.getCachedValue(source, () ->
|
||||
Result.create(exportsMap(source), JavaModuleFileChangeTracker.getInstance(source.getProject())));
|
||||
Result.create(exportsMap(source), JavaModuleFileChangeTracker.getDependencies(source.getProject())));
|
||||
Set<String> 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);
|
||||
}
|
||||
|
||||
|
||||
@@ -150,7 +150,7 @@ public class LightJavaModule extends LightElement implements PsiJavaModule {
|
||||
@Override
|
||||
public Result<LightJavaModule> compute(Pair<PsiManager, VirtualFile> 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));
|
||||
}
|
||||
|
||||
+5
-48
@@ -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<ModificationTracker, Project> KEY = NotNullLazyKey.create("", new NotNullFunction<Project, ModificationTracker>() {
|
||||
@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)};
|
||||
}
|
||||
}
|
||||
@@ -137,7 +137,7 @@ public class PsiJavaModuleReference extends PsiReferenceBase.Poly<PsiJavaModuleR
|
||||
public Result<PsiJavaModule> compute(Pair<String, Boolean> p) {
|
||||
Collection<PsiJavaModule> 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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user