mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
[gradle][IDEA-383981] ExternalSystemJdkUtil.resolveJdkName should resolve project jdk lazily
GitOrigin-RevId: 16961c6a19854ac5672f66180cc49b08cc394303
This commit is contained in:
committed by
intellij-monorepo-bot
parent
7906446900
commit
1f089af212
@@ -219,6 +219,7 @@ f:com.intellij.openapi.externalSystem.service.execution.ExternalSystemJdkUtil
|
||||
- s:isValidJdk(com.intellij.openapi.projectRoots.Sdk):Z
|
||||
- s:isValidJdk(java.lang.String):Z
|
||||
- s:resolveDependentJdk(com.intellij.openapi.projectRoots.Sdk):com.intellij.openapi.projectRoots.Sdk
|
||||
- s:resolveJdkName(com.intellij.openapi.project.Project,java.lang.String):com.intellij.openapi.projectRoots.Sdk
|
||||
- s:resolveJdkName(com.intellij.openapi.projectRoots.Sdk,java.lang.String):com.intellij.openapi.projectRoots.Sdk
|
||||
- s:suggestJdkHomePaths():java.util.Collection
|
||||
- s:suggestJdkHomePaths(com.intellij.openapi.project.Project):java.util.Collection
|
||||
|
||||
@@ -40,6 +40,7 @@ import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static com.intellij.openapi.util.Pair.pair;
|
||||
@@ -51,17 +52,32 @@ public final class ExternalSystemJdkUtil {
|
||||
public static final String USE_PROJECT_JDK = "#USE_PROJECT_JDK";
|
||||
public static final String USE_JAVA_HOME = "#JAVA_HOME";
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link ExternalSystemJdkUtil#resolveJdkName(Project, String)} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
@Contract("_, null -> null")
|
||||
public static @Nullable Sdk getJdk(@Nullable Project project, @Nullable String jdkName) throws ExternalSystemJdkException {
|
||||
return resolveJdkName(getProjectJdk(project), jdkName);
|
||||
return resolveJdkName(project, jdkName);
|
||||
}
|
||||
|
||||
@Contract("_, null -> null")
|
||||
public static @Nullable Sdk resolveJdkName(@Nullable Project project, @Nullable String jdkName) throws ExternalSystemJdkException {
|
||||
return matchJdkName(jdkName, () -> getProjectJdk(project));
|
||||
}
|
||||
|
||||
@Contract("_, null -> null")
|
||||
public static @Nullable Sdk resolveJdkName(@Nullable Sdk projectSdk, @Nullable String jdkName) throws ExternalSystemJdkException {
|
||||
return matchJdkName(jdkName, () -> projectSdk);
|
||||
}
|
||||
|
||||
@Contract("null, _ -> null")
|
||||
private static @Nullable Sdk matchJdkName(@Nullable String jdkName, @NotNull Supplier<Sdk> projectSdkSupplier) {
|
||||
return switch (jdkName) {
|
||||
case null -> null;
|
||||
case USE_INTERNAL_JAVA -> getInternalJdk();
|
||||
case USE_PROJECT_JDK -> {
|
||||
Sdk projectSdk = projectSdkSupplier.get();
|
||||
if (projectSdk == null) {
|
||||
throw new ProjectJdkNotFoundException();
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ object ExternalSystemUsageFields {
|
||||
|
||||
fun getJreVersion(project: Project, jreName: String?): String {
|
||||
val jdk = try {
|
||||
ExternalSystemJdkUtil.getJdk(project, jreName)
|
||||
ExternalSystemJdkUtil.resolveJdkName(project, jreName)
|
||||
}
|
||||
catch (ignored: Throwable) {
|
||||
return UNKNOWN
|
||||
|
||||
@@ -69,7 +69,7 @@ class ExternalSystemJdkUtilTest : UsefulTestCase() {
|
||||
fun testGetJdk() {
|
||||
assertThat(getJdk(project, null)).isNull()
|
||||
|
||||
assertThat(resolveJdkName(null, USE_INTERNAL_JAVA)?.homePath)
|
||||
assertThat(resolveJdkName(null as Sdk?, USE_INTERNAL_JAVA)?.homePath)
|
||||
.isEqualTo(StringUtil.trimEnd(FileUtil.toSystemIndependentName(SystemProperties.getJavaHome()), "/jre"))
|
||||
|
||||
val javaHomeEnv = EnvironmentUtil.getValue("JAVA_HOME")?.let { FileUtil.toSystemIndependentName(it) }
|
||||
@@ -101,22 +101,22 @@ class ExternalSystemJdkUtilTest : UsefulTestCase() {
|
||||
}
|
||||
|
||||
private fun doTestResolveJdkName() {
|
||||
assertThat(resolveJdkName(null, null)).isNull()
|
||||
assertThat(resolveJdkName(null as Sdk?, null)).isNull()
|
||||
|
||||
assertThat(resolveJdkName(null, USE_INTERNAL_JAVA)?.homePath)
|
||||
assertThat(resolveJdkName(null as Sdk?, USE_INTERNAL_JAVA)?.homePath)
|
||||
.isEqualTo(StringUtil.trimEnd(FileUtil.toSystemIndependentName(SystemProperties.getJavaHome()), "/jre"))
|
||||
|
||||
val javaHomeEnv = EnvironmentUtil.getValue("JAVA_HOME")?.let { FileUtil.toSystemIndependentName(it) }
|
||||
if (javaHomeEnv.isNullOrBlank()) {
|
||||
assertThrows(UndefinedJavaHomeException::class.java) { resolveJdkName(null, USE_JAVA_HOME) }
|
||||
assertThrows(UndefinedJavaHomeException::class.java) { resolveJdkName(null as Sdk?, USE_JAVA_HOME) }
|
||||
}
|
||||
else {
|
||||
assertThat(resolveJdkName(null, USE_JAVA_HOME)?.homePath)
|
||||
assertThat(resolveJdkName(null as Sdk?, USE_JAVA_HOME)?.homePath)
|
||||
.isEqualTo(javaHomeEnv)
|
||||
}
|
||||
|
||||
assertThrows(ProjectJdkNotFoundException::class.java) {
|
||||
resolveJdkName(null, USE_PROJECT_JDK)
|
||||
resolveJdkName(null as Sdk?, USE_PROJECT_JDK)
|
||||
}
|
||||
val sdk: Sdk = mock(Sdk::class.java)
|
||||
assertThat(resolveJdkName(sdk, USE_PROJECT_JDK))
|
||||
|
||||
@@ -489,7 +489,7 @@ public final class JavaGradleProjectResolver extends AbstractProjectResolverExte
|
||||
private @Nullable Sdk lookupGradleJvmByVersion(@NotNull JavaVersion sdkVersion) {
|
||||
var sdk = lookupGradleJvm();
|
||||
if (sdk == null) return null;
|
||||
if (ExternalSystemJdkUtil.matchJavaVersion(sdkVersion, sdk.getVersionString())) {
|
||||
if (matchJavaVersion(sdkVersion, sdk.getVersionString())) {
|
||||
return sdk;
|
||||
}
|
||||
return null;
|
||||
@@ -497,10 +497,14 @@ public final class JavaGradleProjectResolver extends AbstractProjectResolverExte
|
||||
|
||||
private @Nullable Sdk lookupGradleJvm() {
|
||||
var projectSettings = getProjectSettings();
|
||||
if (projectSettings == null) return null;
|
||||
if (projectSettings == null) {
|
||||
return null;
|
||||
}
|
||||
var gradleJvm = projectSettings.getGradleJvm();
|
||||
if (gradleJvm == null) return null;
|
||||
return ExternalSystemJdkUtil.getJdk(resolverCtx.getProject(), gradleJvm);
|
||||
if (gradleJvm == null) {
|
||||
return null;
|
||||
}
|
||||
return ExternalSystemJdkUtil.resolveJdkName(resolverCtx.getProject(), gradleJvm);
|
||||
}
|
||||
|
||||
private @Nullable GradleProjectSettings getProjectSettings() {
|
||||
|
||||
@@ -60,7 +60,7 @@ abstract class AbstractKotlinDslSyncListener : ExternalSystemTaskNotificationLis
|
||||
// roll back to specified in GRADLE_JVM if for some reason sync.javaHome points to corrupted SDK
|
||||
val gradleJvm = GradleSettings.getInstance(project).getLinkedProjectSettings(sync.workingDir)?.gradleJvm
|
||||
try {
|
||||
ExternalSystemJdkUtil.getJdk(project, gradleJvm)?.homePath
|
||||
ExternalSystemJdkUtil.resolveJdkName(project, gradleJvm)?.homePath
|
||||
} catch (_: Exception) {
|
||||
null
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ class InvalidTargetReleaseQuickFix : MavenSpyLoggedEventParser {
|
||||
if (jreName == null) {
|
||||
return ProjectRootManager.getInstance(project).projectSdkName
|
||||
}
|
||||
return ExternalSystemJdkUtil.resolveJdkName(ProjectRootManager.getInstance(project).projectSdk, jreName)?.name
|
||||
return ExternalSystemJdkUtil.resolveJdkName(project, jreName)?.name
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user