From 7e7d15146a63083ea0f6e15cfe3f9eec617c8ac2 Mon Sep 17 00:00:00 2001 From: "Alexander.Glukhov" Date: Wed, 11 Sep 2024 17:12:52 +0200 Subject: [PATCH] [gradle][test][IDEA-359126] added a way to provide custom Gradle VM Options into GradleImportingTestCase GitOrigin-RevId: a18dddd878f6f3f822f7ab94902c44dda30b6218 --- ...lGradleAuxiliaryDependencyImportingTest.kt | 13 ++--- ...dleAuxiliaryDependencyImportingTestCase.kt | 9 ++-- .../importing/GradleImportingTestCase.java | 52 ++++++++++++------- .../AbstractKotlinMppGradleImportingTest.kt | 10 ++-- .../gradle/KotlinGradleImportingTestCase.kt | 10 ++-- 5 files changed, 57 insertions(+), 37 deletions(-) diff --git a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/ExperimentalGradleAuxiliaryDependencyImportingTest.kt b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/ExperimentalGradleAuxiliaryDependencyImportingTest.kt index 72051bca8a1d..bbca707643fc 100644 --- a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/ExperimentalGradleAuxiliaryDependencyImportingTest.kt +++ b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/ExperimentalGradleAuxiliaryDependencyImportingTest.kt @@ -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) { + super.configureGradleVmOptions(options) + options.add(EXPERIMENTAL_RESOLVER_PROPERTY_KEY) } } \ No newline at end of file diff --git a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleAuxiliaryDependencyImportingTestCase.kt b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleAuxiliaryDependencyImportingTestCase.kt index 34a6fb01a05e..b9ce00432158 100644 --- a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleAuxiliaryDependencyImportingTestCase.kt +++ b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleAuxiliaryDependencyImportingTestCase.kt @@ -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) { + 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() } ) } diff --git a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleImportingTestCase.java b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleImportingTestCase.java index b84d1ef726cf..147f52d12e27 100644 --- a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleImportingTestCase.java +++ b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleImportingTestCase.java @@ -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 options) { + + } + + private @NotNull Set getGradleVmOptions() { + Set 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 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() { diff --git a/plugins/kotlin/gradle/gradle-java/tests.shared/test/org/jetbrains/kotlin/gradle/multiplatformTests/AbstractKotlinMppGradleImportingTest.kt b/plugins/kotlin/gradle/gradle-java/tests.shared/test/org/jetbrains/kotlin/gradle/multiplatformTests/AbstractKotlinMppGradleImportingTest.kt index 66c9f74008eb..4c17d43a291a 100644 --- a/plugins/kotlin/gradle/gradle-java/tests.shared/test/org/jetbrains/kotlin/gradle/multiplatformTests/AbstractKotlinMppGradleImportingTest.kt +++ b/plugins/kotlin/gradle/gradle-java/tests.shared/test/org/jetbrains/kotlin/gradle/multiplatformTests/AbstractKotlinMppGradleImportingTest.kt @@ -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) { + super.configureGradleVmOptions(options) + options.add("-XX:MaxMetaspaceSize=1024m") + options.add("-XX:+HeapDumpOnOutOfMemoryError") + options.add("-XX:HeapDumpPath=${System.getProperty("user.dir")}") } override fun setUpFixtures() { diff --git a/plugins/kotlin/gradle/gradle-java/tests.shared/test/org/jetbrains/kotlin/idea/codeInsight/gradle/KotlinGradleImportingTestCase.kt b/plugins/kotlin/gradle/gradle-java/tests.shared/test/org/jetbrains/kotlin/idea/codeInsight/gradle/KotlinGradleImportingTestCase.kt index c8c56a5f42cc..8afba04bc219 100644 --- a/plugins/kotlin/gradle/gradle-java/tests.shared/test/org/jetbrains/kotlin/idea/codeInsight/gradle/KotlinGradleImportingTestCase.kt +++ b/plugins/kotlin/gradle/gradle-java/tests.shared/test/org/jetbrains/kotlin/idea/codeInsight/gradle/KotlinGradleImportingTestCase.kt @@ -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) { + 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()