diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExecutionHelper.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExecutionHelper.java index f5ad42622f87..6990a34e0270 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExecutionHelper.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleExecutionHelper.java @@ -29,6 +29,9 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.*; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.ContainerUtilRt; +import org.gradle.initialization.BuildLayoutParameters; +import org.gradle.internal.nativeintegration.services.NativeServices; +import org.gradle.process.internal.JvmOptions; import org.gradle.tooling.*; import org.gradle.tooling.internal.consumer.DefaultExecutorServiceFactory; import org.gradle.tooling.internal.consumer.DefaultGradleConnector; @@ -49,6 +52,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.Field; +import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Set; @@ -132,8 +136,14 @@ public class GradleExecutionHelper { jvmArgs.addAll(extraJvmArgs); if (!jvmArgs.isEmpty()) { + // merge gradle args e.g. defined in gradle.properties + BuildEnvironment buildEnvironment = getBuildEnvironment(connection); + Collection merged = buildEnvironment != null + ? mergeJvmArgs(settings.getServiceDirectory(), buildEnvironment.getJava().getJvmArguments(), jvmArgs) + : jvmArgs; + // filter nulls and empty strings - List filteredArgs = ContainerUtil.mapNotNull(jvmArgs, new Function() { + List filteredArgs = ContainerUtil.mapNotNull(merged, new Function() { @Override public String fun(String s) { return StringUtil.isEmpty(s) ? null : s; @@ -284,6 +294,15 @@ public class GradleExecutionHelper { } } + private static List mergeJvmArgs(String serviceDirectory, Iterable jvmArgs1, Iterable jvmArgs2) { + File gradleUserHomeDir = serviceDirectory != null ? new File(serviceDirectory) : new BuildLayoutParameters().getGradleUserHomeDir(); + LOG.debug("Gradle home: " + gradleUserHomeDir); + NativeServices.initialize(gradleUserHomeDir, false); + JvmOptions jvmOptions = new JvmOptions(null); + jvmOptions.setAllJvmArgs(ContainerUtil.concat(jvmArgs1, jvmArgs2)); + return jvmOptions.getAllJvmArgs(); + } + /** * Allows to retrieve gradle api connection to use for the given project. * diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/settings/IdeaGradleSystemSettingsControlBuilder.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/settings/IdeaGradleSystemSettingsControlBuilder.java index ebffcc340d8a..63ce50b2da04 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/settings/IdeaGradleSystemSettingsControlBuilder.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/settings/IdeaGradleSystemSettingsControlBuilder.java @@ -23,15 +23,16 @@ import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.ui.TextComponentAccessor; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.components.JBCheckBox; import com.intellij.ui.components.JBLabel; import com.intellij.ui.components.JBTextField; +import org.gradle.initialization.BuildLayoutParameters; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.gradle.settings.GradleSettings; import org.jetbrains.plugins.gradle.util.GradleBundle; -import org.jetbrains.plugins.gradle.util.GradleConstants; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; @@ -214,11 +215,8 @@ public class IdeaGradleSystemSettingsControlBuilder implements GradleSystemSetti } private static void deduceServiceDirectory(@NotNull TextFieldWithBrowseButton serviceDirectoryPathField) { - String path = System.getenv().get(GradleConstants.SYSTEM_DIRECTORY_PATH_KEY); - if (StringUtil.isEmpty(path)) { - path = new File(System.getProperty("user.home"), ".gradle").getAbsolutePath(); - } - serviceDirectoryPathField.setText(path); + File gradleUserHomeDir = new BuildLayoutParameters().getGradleUserHomeDir(); + serviceDirectoryPathField.setText(FileUtil.toSystemIndependentName(gradleUserHomeDir.getPath())); serviceDirectoryPathField.getTextField().setForeground(LocationSettingType.DEDUCED.getColor()); }