mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java] module path in app. run configuration; simplified
This commit is contained in:
+1
-32
@@ -30,19 +30,14 @@ import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.options.SettingsEditor;
|
||||
import com.intellij.openapi.options.SettingsEditorGroup;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.OrderEnumerator;
|
||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.util.DefaultJDOMExternalizer;
|
||||
import com.intellij.openapi.util.InvalidDataException;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiJavaModule;
|
||||
import com.intellij.psi.impl.PsiImplUtil;
|
||||
import com.intellij.psi.util.PsiMethodUtil;
|
||||
import com.intellij.refactoring.listeners.RefactoringElementListener;
|
||||
import com.intellij.util.PathsList;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -50,7 +45,6 @@ import org.jetbrains.annotations.Nullable;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class ApplicationConfiguration extends ModuleBasedConfiguration<JavaRunConfigurationModule>
|
||||
implements CommonJavaRunConfigurationParameters, SingleClassConfiguration, RefactoringListenerProvider {
|
||||
@@ -292,34 +286,9 @@ public class ApplicationConfiguration extends ModuleBasedConfiguration<JavaRunCo
|
||||
PsiJavaModule mainModule = JavaModuleGraphUtil.findDescriptorByElement(mainClass);
|
||||
if (mainModule != null) {
|
||||
params.setModuleName(mainModule.getModuleName());
|
||||
|
||||
PathsList modulePath = params.getModulePath(), classPath = params.getClassPath();
|
||||
ProjectFileIndex index = ProjectFileIndex.SERVICE.getInstance(module.getProject());
|
||||
JavaModuleGraphUtil.moduleDependencies(mainModule).stream()
|
||||
.map(PsiImplUtil::getModuleVirtualFile)
|
||||
.flatMap(f -> classRoots(f, index))
|
||||
.forEach(f -> {
|
||||
modulePath.add(f);
|
||||
classPath.remove(f);
|
||||
});
|
||||
params.getModulePath().addAll(params.getClassPath().getPathList());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static Stream<VirtualFile> classRoots(VirtualFile file, ProjectFileIndex index) {
|
||||
if (index.isInSourceContent(file)) {
|
||||
Module module = index.getModuleForFile(file);
|
||||
if (module != null) {
|
||||
return Stream.of(OrderEnumerator.orderEntries(module).runtimeOnly().withoutSdk().withoutLibraries().withoutDepModules().getClassesRoots());
|
||||
}
|
||||
}
|
||||
else {
|
||||
VirtualFile root = index.getClassRootForFile(file);
|
||||
if (root != null) {
|
||||
return Stream.of(root);
|
||||
}
|
||||
}
|
||||
return Stream.empty();
|
||||
}
|
||||
}
|
||||
}
|
||||
+4
-24
@@ -63,14 +63,10 @@ public class JavaModuleGraphUtil {
|
||||
}
|
||||
|
||||
public static boolean reads(@NotNull PsiJavaModule source, @NotNull PsiJavaModule destination) {
|
||||
return getRequiresGraph(source).reads(source, destination);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static Collection<PsiJavaModule> moduleDependencies(@NotNull PsiJavaModule start) {
|
||||
Set<PsiJavaModule> result = ContainerUtil.newHashSet();
|
||||
visit(getRequiresGraph(start), start, result);
|
||||
return result;
|
||||
Project project = source.getProject();
|
||||
RequiresGraph graph = CachedValuesManager.getManager(project).getCachedValue(project, () ->
|
||||
Result.create(buildRequiresGraph(project), OUT_OF_CODE_BLOCK_MODIFICATION_COUNT));
|
||||
return graph.reads(source, destination);
|
||||
}
|
||||
|
||||
// Looks for cycles between Java modules in the project sources.
|
||||
@@ -121,12 +117,6 @@ public class JavaModuleGraphUtil {
|
||||
return map;
|
||||
}
|
||||
|
||||
private static RequiresGraph getRequiresGraph(@NotNull PsiJavaModule source) {
|
||||
Project project = source.getProject();
|
||||
return CachedValuesManager.getManager(project).getCachedValue(project, () ->
|
||||
Result.create(buildRequiresGraph(project), OUT_OF_CODE_BLOCK_MODIFICATION_COUNT));
|
||||
}
|
||||
|
||||
// Starting from source modules, collects all module dependencies in the project.
|
||||
// The resulting graph is used for tracing readability.
|
||||
private static RequiresGraph buildRequiresGraph(Project project) {
|
||||
@@ -158,12 +148,6 @@ public class JavaModuleGraphUtil {
|
||||
}
|
||||
}
|
||||
|
||||
private static void visit(RequiresGraph graph, PsiJavaModule module, Set<PsiJavaModule> result) {
|
||||
if (result.add(module)) {
|
||||
graph.dependencies(module).forEach(dependency -> visit(graph, dependency, result));
|
||||
}
|
||||
}
|
||||
|
||||
private static class RequiresGraph {
|
||||
private final Graph<PsiJavaModule> myGraph;
|
||||
private final Set<String> myPublicEdges;
|
||||
@@ -187,10 +171,6 @@ public class JavaModuleGraphUtil {
|
||||
return false;
|
||||
}
|
||||
|
||||
public Iterable<PsiJavaModule> dependencies(PsiJavaModule node) {
|
||||
return myGraph.getNodes().contains(node) ? () -> myGraph.getIn(node) : Collections.emptyList();
|
||||
}
|
||||
|
||||
public static String key(PsiJavaModule module, PsiJavaModule exporter) {
|
||||
return module.getModuleName() + '/' + exporter.getModuleName();
|
||||
}
|
||||
|
||||
@@ -81,13 +81,6 @@ public class PathsList {
|
||||
add(LOCAL_PATH.fun(file));
|
||||
}
|
||||
|
||||
public void remove(VirtualFile file) {
|
||||
String path = LOCAL_PATH.fun(file);
|
||||
if (path != null) {
|
||||
remove(path);
|
||||
}
|
||||
}
|
||||
|
||||
public void addFirst(String path) {
|
||||
int index = 0;
|
||||
for (String element : chooseFirstTimeItems(path)) {
|
||||
|
||||
Reference in New Issue
Block a user