mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
devkit: fix generation of IntelliJ Platform SDK roots when creating SDK for a directory with IDEA sources
Include into the SDK all modules reachable via dependencies from the main module. This way we won't need to manually maintain list of exclusions. This fixes IDEA-200152, IDEA-200161.
This commit is contained in:
@@ -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<VirtualFile> addedRoots = ContainerUtil.newTroveSet();
|
||||
VirtualFileManager vfsManager = VirtualFileManager.getInstance();
|
||||
JpsJavaExtensionService javaService = JpsJavaExtensionService.getInstance();
|
||||
boolean isUltimate = vfsManager.findFileByUrl(VfsUtilCore.pathToUrl(sdkHome + "/ultimate/ultimate-resources")) != null;
|
||||
Set<String> suppressedModules = ContainerUtil.newTroveSet("jps-plugin-system");
|
||||
Set<String> 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<JpsModule> 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<String, JpsModule> 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<JpsModule> 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<VirtualFile> addedRoots = ContainerUtil.newTroveSet();
|
||||
for (JpsModule o : modules) {
|
||||
indicator.setFraction(indicator.getFraction() + delta);
|
||||
for (JpsDependencyElement dep : o.getDependenciesList().getDependencies()) {
|
||||
|
||||
Reference in New Issue
Block a user