mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 02:59:33 +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.pom.java.JavaFeature;
|
||||||
import com.intellij.psi.*;
|
import com.intellij.psi.*;
|
||||||
import com.intellij.psi.impl.PsiJavaModuleModificationTracker;
|
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.light.LightJavaModule;
|
||||||
import com.intellij.psi.impl.source.resolve.JavaResolveUtil;
|
import com.intellij.psi.impl.source.resolve.JavaResolveUtil;
|
||||||
import com.intellij.psi.search.GlobalSearchScope;
|
import com.intellij.psi.search.GlobalSearchScope;
|
||||||
import com.intellij.psi.search.ProjectScope;
|
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.CachedValueProvider.Result;
|
||||||
import com.intellij.psi.util.CachedValuesManager;
|
import com.intellij.psi.util.CachedValuesManager;
|
||||||
import com.intellij.psi.util.PsiUtil;
|
import com.intellij.psi.util.PsiUtil;
|
||||||
@@ -345,13 +345,11 @@ public final class JavaModuleGraphUtil {
|
|||||||
MultiMap<PsiJavaModule, PsiJavaModule> relations = MultiMap.create();
|
MultiMap<PsiJavaModule, PsiJavaModule> relations = MultiMap.create();
|
||||||
Set<String> transitiveEdges = new HashSet<>();
|
Set<String> transitiveEdges = new HashSet<>();
|
||||||
|
|
||||||
JavaModuleNameIndex index = JavaModuleNameIndex.getInstance();
|
|
||||||
GlobalSearchScope scope = ProjectScope.getAllScope(project);
|
GlobalSearchScope scope = ProjectScope.getAllScope(project);
|
||||||
for (String key : index.getAllKeys(project)) {
|
JavaModuleSearch.allModules(project, scope).forEach(module -> {
|
||||||
for (PsiJavaModule module : index.getModules(key, project, scope)) {
|
visit(module, relations, transitiveEdges);
|
||||||
visit(module, relations, transitiveEdges);
|
return true;
|
||||||
}
|
});
|
||||||
}
|
|
||||||
|
|
||||||
Graph<PsiJavaModule> graph = GraphGenerator.generate(new ChameleonGraph<>(relations, true));
|
Graph<PsiJavaModule> graph = GraphGenerator.generate(new ChameleonGraph<>(relations, true));
|
||||||
return new RequiresGraph(graph, transitiveEdges);
|
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.classInheritorsSearch" interface="com.intellij.util.QueryExecutor" dynamic="true"/>
|
||||||
<extensionPoint qualifiedName="com.intellij.annotatedElementsSearch" 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.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.annotatedPackagesSearch" interface="com.intellij.util.QueryExecutor" dynamic="true"/>
|
||||||
<extensionPoint qualifiedName="com.intellij.functionalExpressionSearch" 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"/>
|
<extensionPoint qualifiedName="com.intellij.implicitToStringSearch" interface="com.intellij.util.QueryExecutor" dynamic="true"/>
|
||||||
@@ -71,6 +72,7 @@
|
|||||||
<directClassInheritorsSearch implementation="com.intellij.psi.impl.search.JavaDirectInheritorsSearcher"/>
|
<directClassInheritorsSearch implementation="com.intellij.psi.impl.search.JavaDirectInheritorsSearcher"/>
|
||||||
<annotatedPackagesSearch implementation="com.intellij.psi.impl.search.AnnotatedPackagesSearcher"/>
|
<annotatedPackagesSearch implementation="com.intellij.psi.impl.search.AnnotatedPackagesSearcher"/>
|
||||||
<implicitClassSearch implementation="com.intellij.psi.impl.search.ImplicitClassesSearcher"/>
|
<implicitClassSearch implementation="com.intellij.psi.impl.search.ImplicitClassesSearcher"/>
|
||||||
|
<javaModuleSearch implementation="com.intellij.psi.impl.search.JavaModuleSearcher"/>
|
||||||
<annotatedElementsSearch implementation="com.intellij.psi.impl.search.AnnotatedElementsSearcher"/>
|
<annotatedElementsSearch implementation="com.intellij.psi.impl.search.AnnotatedElementsSearcher"/>
|
||||||
<allClassesSearch implementation="com.intellij.psi.impl.search.AllClassesSearchExecutor"/>
|
<allClassesSearch implementation="com.intellij.psi.impl.search.AllClassesSearchExecutor"/>
|
||||||
<referencesSearch implementation="com.intellij.psi.impl.search.VariableInIncompleteCodeSearcher"/>
|
<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