diff --git a/plugins/devkit/devkit-core/src/projectRoots/IdeaJdk.java b/plugins/devkit/devkit-core/src/projectRoots/IdeaJdk.java index 6ccd1f75e27b..ae68a8d3758b 100644 --- a/plugins/devkit/devkit-core/src/projectRoots/IdeaJdk.java +++ b/plugins/devkit/devkit-core/src/projectRoots/IdeaJdk.java @@ -26,7 +26,6 @@ import com.intellij.psi.impl.compiled.ClsParsingUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.ObjectUtils; import com.intellij.util.containers.ContainerUtil; -import com.intellij.util.containers.JBIterable; import icons.DevkitIcons; import org.jdom.Element; import org.jetbrains.annotations.NonNls; @@ -52,10 +51,9 @@ import javax.swing.*; import java.io.DataInputStream; import java.io.File; import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Set; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -338,31 +336,28 @@ public class IdeaJdk extends JavaDependentSdkType implements JavaSdkType { if (internalJava != null && isValidInternalJdk(sdk, internalJava)) { setInternalJdk(sdk, sdkModificator, internalJava); } - Set addedRoots = ContainerUtil.newTroveSet(); - VirtualFileManager vfsManager = VirtualFileManager.getInstance(); - JpsJavaExtensionService javaService = JpsJavaExtensionService.getInstance(); - boolean isUltimate = vfsManager.findFileByUrl(VfsUtilCore.pathToUrl(sdkHome + "/ultimate/ultimate-resources")) != null; - Set suppressedModules = ContainerUtil.newTroveSet("jps-plugin-system"); - Set ultimateModules = ContainerUtil.newTroveSet( - "intellij.platform.commercial", "intellij.idea.ultimate.resources", - "intellij.platform.commercial.verifier", "intellij.platform.commercial.license", - "intellij.platform.propertyInspector", - "intellij.platform.graph", "intellij.platform.graph.impl", - "intellij.diagram", "intellij.diagram.impl", "intellij.uml"); - List modules = JBIterable.from(model.getProject().getModules()) - .filter(o -> { - if (suppressedModules.contains(o.getName())) return false; - if (o.getName().endsWith("-ide")) return false; - String contentUrl = ContainerUtil.getFirstItem(o.getContentRootsList().getUrls()); - if (contentUrl == null) return true; - // add only community modules/plugins to avoid EP duplicates & minor IDE conflicts - return !isUltimate || - contentUrl.contains("/community/") && !contentUrl.contains("/community/python") || - ultimateModules.contains(o.getName()); - }) - .toList(); + + Map moduleByName = model.getProject().getModules().stream().collect(Collectors.toMap(JpsModule::getName, Function.identity())); + String[] mainModuleCandidates = { + "intellij.idea.ultimate.main", + "intellij.idea.community.main", + "main", + "community-main" + }; + JpsModule mainModule = Arrays.stream(mainModuleCandidates).map(moduleByName::get).filter(Objects::nonNull).findFirst().orElse(null); + if (mainModule == null) { + LOG.error("Cannot find main module (" + Arrays.toString(mainModuleCandidates) + ") in IntelliJ IDEA sources at " + sdkHome); + return; + } + + Set modules = new LinkedHashSet<>(); + JpsJavaExtensionService.dependencies(mainModule).recursively().processModules(modules::add); + indicator.setIndeterminate(false); double delta = 1 / (2 * Math.max(0.5, modules.size())); + JpsJavaExtensionService javaService = JpsJavaExtensionService.getInstance(); + VirtualFileManager vfsManager = VirtualFileManager.getInstance(); + Set addedRoots = ContainerUtil.newTroveSet(); for (JpsModule o : modules) { indicator.setFraction(indicator.getFraction() + delta); for (JpsDependencyElement dep : o.getDependenciesList().getDependencies()) {