void (@NotNull Project project, @Nullable Module module, JavaParameters javaParameters) { Sdk jdk = javaParameters.getJdk(); if (jdk == null) { return; } ParametersList vm = javaParameters.getVMParametersList(); if (PsiUtil.isIdeaProject(project)) { if (!vm.hasProperty(SYSTEM_CL_PROPERTY) && !vm.getList().contains("--add-modules")) { // check that UrlClassLoader is available in the test module classpath // if module-path is used, skip custom loader String qualifiedName = "com.intellij.util.lang.UrlClassLoader"; if (loaderValid(project, module, qualifiedName)) { vm.addProperty(SYSTEM_CL_PROPERTY, qualifiedName); } } String basePath = project.getBasePath(); if (!vm.hasProperty(PathManager.PROPERTY_SYSTEM_PATH)) { assert basePath != null; vm.addProperty(PathManager.PROPERTY_SYSTEM_PATH, Path.of(basePath, "system/test").toAbsolutePath().toString()); } if (!vm.hasProperty(PathManager.PROPERTY_CONFIG_PATH)) { assert basePath != null; vm.addProperty(PathManager.PROPERTY_CONFIG_PATH, Path.of(basePath, "config/test").toAbsolutePath().toString()); } appendAddOpensWhenNeeded(project, jdk, vm); } jdk = IdeaJdk.findIdeaJdk(jdk); if (jdk == null) { return; } @NonNls String libPath = jdk.getHomePath() + File.separator + "lib"; if (!vm.hasProperty("idea.load.plugins.id") && module != null && PluginModuleType.isOfType(module)) { //non-optional dependencies of 'idea.load.plugin.id' are automatically enabled (see com.intellij.ide.plugins.PluginManagerCore.detectReasonToNotLoad) //we need to explicitly add optional dependencies to properly test them List<String> ids = DescriptorUtil.getPluginAndOptionalDependenciesIds(module); if (!ids.isEmpty()) { vm.defineProperty("idea.load.plugins.id", String.join(",", ids)); } } Path sandboxHome = getSandboxPath(jdk); if (sandboxHome != null) { if (!vm.hasProperty(PathManager.PROPERTY_HOME_PATH)) { Path homeDir = sandboxHome.resolve("test"); try { Files.createDirectories(homeDir); } catch (IOException e) { LOG.error(e); } String buildNumber = IdeaJdk.getBuildNumber(jdk.getHomePath()); if (buildNumber != null) { try { Files.writeString(homeDir.resolve("build.txt"), buildNumber); } catch (IOException e) { LOG.warn("failed to create build.txt in " + homeDir + ": " + e.getMessage(), e); } } else { LOG.warn("Cannot determine build number for " + jdk.getHomePath()); } vm.defineProperty(PathManager.PROPERTY_HOME_PATH, homeDir.toString()); } if (!vm.hasProperty(PathManager.PROPERTY_PLUGINS_PATH)) { vm.defineProperty(PathManager.PROPERTY_PLUGINS_PATH, sandboxHome.resolve("plugins").toString()); } } javaParameters.getClassPath().addFirst(libPath + File.separator + "idea.jar"); javaParameters.getClassPath().addFirst(libPath + File.separator + "resources.jar"); javaParameters.getClassPath().addFirst(((JavaSdkType)jdk.getSdkType()).getToolsPath(jdk)); }