mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-14 18:05:27 +07:00
[java-modules] JavaModuleSearch as a facade for JavaModuleNameIndex
GitOrigin-RevId: b8c1be32c0e2b053e098d3339b1f47d4d8d68635
This commit is contained in:
committed by
intellij-monorepo-bot
parent
5b40cccb5e
commit
da0b41afe9
@@ -22,11 +22,11 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.pom.java.JavaFeature;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.PsiJavaModuleModificationTracker;
|
||||
import com.intellij.psi.impl.java.stubs.index.JavaModuleNameIndex;
|
||||
import com.intellij.psi.impl.light.LightJavaModule;
|
||||
import com.intellij.psi.impl.source.resolve.JavaResolveUtil;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.ProjectScope;
|
||||
import com.intellij.psi.search.searches.JavaModuleSearch;
|
||||
import com.intellij.psi.util.CachedValueProvider.Result;
|
||||
import com.intellij.psi.util.CachedValuesManager;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
@@ -345,13 +345,11 @@ public final class JavaModuleGraphUtil {
|
||||
MultiMap<PsiJavaModule, PsiJavaModule> relations = MultiMap.create();
|
||||
Set<String> transitiveEdges = new HashSet<>();
|
||||
|
||||
JavaModuleNameIndex index = JavaModuleNameIndex.getInstance();
|
||||
GlobalSearchScope scope = ProjectScope.getAllScope(project);
|
||||
for (String key : index.getAllKeys(project)) {
|
||||
for (PsiJavaModule module : index.getModules(key, project, scope)) {
|
||||
visit(module, relations, transitiveEdges);
|
||||
}
|
||||
}
|
||||
JavaModuleSearch.allModules(project, scope).forEach(module -> {
|
||||
visit(module, relations, transitiveEdges);
|
||||
return true;
|
||||
});
|
||||
|
||||
Graph<PsiJavaModule> graph = GraphGenerator.generate(new ChameleonGraph<>(relations, true));
|
||||
return new RequiresGraph(graph, transitiveEdges);
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.psi.search.searches;
|
||||
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiJavaModule;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.util.Query;
|
||||
import com.intellij.util.QueryExecutor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* Allows searching for Java (JPMS) modules declared in the project
|
||||
*/
|
||||
public final class JavaModuleSearch extends ExtensibleQueryFactory<PsiJavaModule, JavaModuleSearch.Parameters> {
|
||||
public static final ExtensionPointName<QueryExecutor<PsiJavaModule, JavaModuleSearch.Parameters>> EP_NAME = ExtensionPointName.create("com.intellij.javaModuleSearch");
|
||||
public static final JavaModuleSearch INSTANCE = new JavaModuleSearch();
|
||||
|
||||
public static class Parameters {
|
||||
private final @Nullable String myName;
|
||||
private final @NotNull Project myProject;
|
||||
private final @NotNull GlobalSearchScope myScope;
|
||||
|
||||
/**
|
||||
* @param name module name (null to find all modules)
|
||||
* @param project project
|
||||
* @param scope scope to search in
|
||||
*/
|
||||
public Parameters(@Nullable String name, @NotNull Project project, @NotNull GlobalSearchScope scope) {
|
||||
myName = name;
|
||||
myProject = project;
|
||||
myScope = scope;
|
||||
}
|
||||
|
||||
public @Nullable String getName() {
|
||||
return myName;
|
||||
}
|
||||
|
||||
public @NotNull Project getProject() {
|
||||
return myProject;
|
||||
}
|
||||
|
||||
public @NotNull GlobalSearchScope getScope() {
|
||||
return myScope;
|
||||
}
|
||||
}
|
||||
|
||||
private JavaModuleSearch() {
|
||||
super(EP_NAME);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find JPMS modules in the scope
|
||||
* @param name name of the module to find
|
||||
* @param project project
|
||||
* @param scope scope to use
|
||||
* @return the query that contains found modules results
|
||||
*/
|
||||
public static @NotNull Query<PsiJavaModule> search(@NotNull String name, @NotNull Project project, @NotNull GlobalSearchScope scope) {
|
||||
return INSTANCE.createQuery(new Parameters(name, project, scope));
|
||||
}
|
||||
|
||||
/**
|
||||
* Find all JPMS modules in the scope
|
||||
* @param project project
|
||||
* @param scope scope to use
|
||||
* @return the query that contains found modules results
|
||||
*/
|
||||
public static @NotNull Query<PsiJavaModule> allModules(@NotNull Project project, @NotNull GlobalSearchScope scope) {
|
||||
return INSTANCE.createQuery(new Parameters(null, project, scope));
|
||||
}
|
||||
}
|
||||
@@ -26,6 +26,7 @@
|
||||
<extensionPoint qualifiedName="com.intellij.classInheritorsSearch" interface="com.intellij.util.QueryExecutor" dynamic="true"/>
|
||||
<extensionPoint qualifiedName="com.intellij.annotatedElementsSearch" interface="com.intellij.util.QueryExecutor" dynamic="true"/>
|
||||
<extensionPoint qualifiedName="com.intellij.implicitClassSearch" interface="com.intellij.util.QueryExecutor" dynamic="true"/>
|
||||
<extensionPoint qualifiedName="com.intellij.javaModuleSearch" interface="com.intellij.util.QueryExecutor" dynamic="true"/>
|
||||
<extensionPoint qualifiedName="com.intellij.annotatedPackagesSearch" interface="com.intellij.util.QueryExecutor" dynamic="true"/>
|
||||
<extensionPoint qualifiedName="com.intellij.functionalExpressionSearch" interface="com.intellij.util.QueryExecutor" dynamic="true"/>
|
||||
<extensionPoint qualifiedName="com.intellij.implicitToStringSearch" interface="com.intellij.util.QueryExecutor" dynamic="true"/>
|
||||
@@ -71,6 +72,7 @@
|
||||
<directClassInheritorsSearch implementation="com.intellij.psi.impl.search.JavaDirectInheritorsSearcher"/>
|
||||
<annotatedPackagesSearch implementation="com.intellij.psi.impl.search.AnnotatedPackagesSearcher"/>
|
||||
<implicitClassSearch implementation="com.intellij.psi.impl.search.ImplicitClassesSearcher"/>
|
||||
<javaModuleSearch implementation="com.intellij.psi.impl.search.JavaModuleSearcher"/>
|
||||
<annotatedElementsSearch implementation="com.intellij.psi.impl.search.AnnotatedElementsSearcher"/>
|
||||
<allClassesSearch implementation="com.intellij.psi.impl.search.AllClassesSearchExecutor"/>
|
||||
<referencesSearch implementation="com.intellij.psi.impl.search.VariableInIncompleteCodeSearcher"/>
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.psi.impl.search;
|
||||
|
||||
import com.intellij.psi.PsiJavaModule;
|
||||
import com.intellij.psi.impl.java.stubs.index.JavaStubIndexKeys;
|
||||
import com.intellij.psi.search.searches.JavaModuleSearch;
|
||||
import com.intellij.psi.stubs.StubIndex;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.QueryExecutor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public final class JavaModuleSearcher implements QueryExecutor<PsiJavaModule, JavaModuleSearch.Parameters> {
|
||||
@Override
|
||||
public boolean execute(JavaModuleSearch.@NotNull Parameters queryParameters,
|
||||
@NotNull Processor<? super PsiJavaModule> consumer) {
|
||||
String name = queryParameters.getName();
|
||||
StubIndex index = StubIndex.getInstance();
|
||||
if (name == null) {
|
||||
return index.processAllKeys(JavaStubIndexKeys.MODULE_NAMES, moduleName -> {
|
||||
return index.processElements(JavaStubIndexKeys.MODULE_NAMES,
|
||||
moduleName,
|
||||
queryParameters.getProject(),
|
||||
queryParameters.getScope(),
|
||||
null,
|
||||
PsiJavaModule.class,
|
||||
consumer);
|
||||
}, queryParameters.getScope());
|
||||
}
|
||||
return index.processElements(JavaStubIndexKeys.MODULE_NAMES,
|
||||
name,
|
||||
queryParameters.getProject(),
|
||||
queryParameters.getScope(),
|
||||
null,
|
||||
PsiJavaModule.class,
|
||||
consumer);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user