[gradle][test][IDEA-359126] added a way to provide custom Gradle VM Options into GradleImportingTestCase

GitOrigin-RevId: a18dddd878f6f3f822f7ab94902c44dda30b6218
This commit is contained in:
Alexander.Glukhov
2024-09-13 13:50:21 +00:00
committed by intellij-monorepo-bot
parent ced38a59c2
commit 7e7d15146a
5 changed files with 57 additions and 37 deletions
@@ -1,7 +1,6 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.plugins.gradle.importing
import org.jetbrains.plugins.gradle.settings.GradleSystemSettings
import org.junit.Assume
class ExperimentalGradleAuxiliaryDependencyImportingTest : GradleAuxiliaryDependencyImportingTest() {
@@ -16,12 +15,10 @@ class ExperimentalGradleAuxiliaryDependencyImportingTest : GradleAuxiliaryDepend
isGradleOlderThan("7.3")
)
super.setUp()
val gradleSettings = GradleSystemSettings.getInstance()
if (gradleSettings.gradleVmOptions == null) {
gradleSettings.gradleVmOptions = EXPERIMENTAL_RESOLVER_PROPERTY_KEY
}
else {
gradleSettings.gradleVmOptions += " $EXPERIMENTAL_RESOLVER_PROPERTY_KEY"
}
}
override fun configureGradleVmOptions(options: MutableSet<String>) {
super.configureGradleVmOptions(options)
options.add(EXPERIMENTAL_RESOLVER_PROPERTY_KEY)
}
}
@@ -32,16 +32,19 @@ abstract class GradleAuxiliaryDependencyImportingTestCase : GradleImportingTestC
.deleteRecursively()
val gradleSystemSettings = GradleSystemSettings.getInstance()
gradleSystemSettings.gradleVmOptions = null
gradleSystemSettings.isDownloadSources = settings.ideaDownloadSourcesValue
}
override fun configureGradleVmOptions(options: MutableSet<String>) {
super.configureGradleVmOptions(options)
if (settings.forceDownloadSourcesFlagValue != null) {
gradleSystemSettings.gradleVmOptions = "-D$FORCE_ARGUMENT_PROPERTY_NAME=${settings.forceDownloadSourcesFlagValue}"
options.add("-D$FORCE_ARGUMENT_PROPERTY_NAME=${settings.forceDownloadSourcesFlagValue}")
}
}
override fun tearDown() {
runAll(
{ GradleSystemSettings.getInstance().apply { isDownloadSources = false; gradleVmOptions = null } },
{ GradleSystemSettings.getInstance().apply { isDownloadSources = false } },
{ super.tearDown() }
)
}
@@ -31,7 +31,7 @@ import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.io.NioFiles;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.util.text.Strings;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.platform.testFramework.io.ExternalResourcesChecker;
@@ -75,10 +75,7 @@ import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.*;
import java.util.function.Consumer;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
@@ -119,6 +116,7 @@ public abstract class GradleImportingTestCase extends JavaExternalSystemImportin
WriteAction.runAndWait(this::configureJdkTable);
System.setProperty(ExternalSystemExecutionSettings.REMOTE_PROCESS_IDLE_TTL_IN_MS_KEY, String.valueOf(GRADLE_DAEMON_TTL_MS));
applyGradleVmOptions();
ExtensionTestUtil.maskExtensions(UnknownSdkResolver.EP_NAME, List.of(TestUnknownSdkResolver.INSTANCE), getTestDisposable());
setRegistryPropertyForTest("unknown.sdk.auto", "false");
@@ -161,6 +159,29 @@ public abstract class GradleImportingTestCase extends JavaExternalSystemImportin
}
}
protected void configureGradleVmOptions(@NotNull Set<String> options) {
}
private @NotNull Set<String> getGradleVmOptions() {
Set<String> options = new HashSet<>();
configureGradleVmOptions(options);
if (isGradleAtLeast("7.0") && !isWarningsAllowed()) {
options.add("-Dorg.gradle.warning.mode=fail");
}
return options;
}
private void applyGradleVmOptions() {
GradleSystemSettings settings = GradleSystemSettings.getInstance();
String defaultVmOptions = Objects.requireNonNullElse(settings.getGradleVmOptions(), "");
Set<String> requiredVmOptions = getGradleVmOptions();
String effectiveVmOptions = String.format("%s %s", defaultVmOptions, Strings.join(requiredVmOptions, " ")).trim();
settings.setGradleVmOptions(effectiveVmOptions);
}
private Sdk createJdkFromJavaHome() {
VirtualFile jdkHomeDir = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(new File(myJdkHome));
JavaSdk javaSdk = JavaSdk.getInstance();
@@ -308,9 +329,7 @@ public abstract class GradleImportingTestCase extends JavaExternalSystemImportin
},
() -> {
deprecationError.set(null);
if (isGradleAtLeast("7.0")) {
GradleSystemSettings.getInstance().setGradleVmOptions("");
}
GradleSystemSettings.getInstance().setGradleVmOptions("");
},
() -> Disposer.dispose(getTestDisposable()),
() -> super.tearDown()
@@ -368,16 +387,6 @@ public abstract class GradleImportingTestCase extends JavaExternalSystemImportin
if (UsefulTestCase.IS_UNDER_TEAMCITY) {
config = injectRepo(config);
}
if (isGradleAtLeast("7.0") && !isWarningsAllowed()) {
String failOnWarning = "-Dorg.gradle.warning.mode=fail";
String originalVmOptions = GradleSystemSettings.getInstance().getGradleVmOptions();
if (StringUtil.isEmpty(originalVmOptions)) {
GradleSystemSettings.getInstance().setGradleVmOptions(failOnWarning);
}
else {
GradleSystemSettings.getInstance().setGradleVmOptions("%s %s".formatted(originalVmOptions, failOnWarning));
}
}
super.importProject(config, skipIndexing);
handleDeprecationError(deprecationError.get());
}
@@ -545,7 +554,12 @@ public abstract class GradleImportingTestCase extends JavaExternalSystemImportin
}
protected void enableGradleDebugWithSuspend() {
GradleSystemSettings.getInstance().setGradleVmOptions("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005");
GradleSystemSettings settings = GradleSystemSettings.getInstance();
String options = String.format("%s %s",
Objects.requireNonNullElse(settings.getGradleVmOptions(), ""),
"-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"
);
settings.setGradleVmOptions(options);
}
protected Boolean isWarningsAllowed() {
@@ -35,7 +35,6 @@ import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.test.TestMetadata
import org.jetbrains.kotlin.tooling.core.KotlinToolingVersion
import org.jetbrains.plugins.gradle.importing.GradleImportingTestCase
import org.jetbrains.plugins.gradle.settings.GradleSystemSettings
import org.junit.Assert
import org.junit.Assume.assumeTrue
import org.junit.Rule
@@ -212,10 +211,13 @@ abstract class AbstractKotlinMppGradleImportingTest : GradleImportingTestCase(),
context.testProject = myProject
context.testProjectRoot = myProjectRoot.toNioPath().toFile()
context.gradleJdkPath = File(findJdkPath())
}
// Otherwise Gradle Daemon fails with Metaspace exhausted periodically
GradleSystemSettings.getInstance().gradleVmOptions =
"-XX:MaxMetaspaceSize=1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${System.getProperty("user.dir")}"
override fun configureGradleVmOptions(options: MutableSet<String>) {
super.configureGradleVmOptions(options)
options.add("-XX:MaxMetaspaceSize=1024m")
options.add("-XX:+HeapDumpOnOutOfMemoryError")
options.add("-XX:HeapDumpPath=${System.getProperty("user.dir")}")
}
override fun setUpFixtures() {
@@ -38,7 +38,6 @@ import org.jetbrains.kotlin.idea.test.setUpWithKotlinPlugin
import org.jetbrains.kotlin.utils.addToStdlib.filterIsInstanceWithChecker
import org.jetbrains.plugins.gradle.importing.GradleImportingTestCase
import org.jetbrains.plugins.gradle.service.project.open.createLinkSettings
import org.jetbrains.plugins.gradle.settings.GradleSystemSettings
import org.jetbrains.plugins.gradle.util.GradleConstants
import org.junit.Assume
import org.junit.runners.Parameterized
@@ -96,13 +95,18 @@ abstract class KotlinGradleImportingTestCase : GradleImportingTestCase(),
override fun setUp() {
Assume.assumeFalse(AndroidStudioTestUtils.skipIncompatibleTestAgainstAndroidStudio())
setUpWithKotlinPlugin { super.setUp() }
GradleSystemSettings.getInstance().gradleVmOptions =
"-XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${System.getProperty("user.dir")}"
GradleProcessOutputInterceptor.install(testRootDisposable)
setUpImportStatusCollector()
}
override fun configureGradleVmOptions(options: MutableSet<String>) {
super.configureGradleVmOptions(options)
options.add("-XX:MaxMetaspaceSize=512m")
options.add("-XX:+HeapDumpOnOutOfMemoryError")
options.add("-XX:HeapDumpPath=${System.getProperty("user.dir")}")
}
override fun tearDown() {
try {
tearDownImportStatusCollector()