From b1af03fe3b8ebcff30e4b8873867b476e5abc3fa Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Mon, 19 Aug 2013 11:26:25 +0400 Subject: [PATCH] IDEA-107959 Can't debug unit tests (test task) from Gradle --- .../ExternalSystemRunConfiguration.java | 2 +- .../ExternalSystemTaskDebugRunner.java | 2 +- .../service/task/GradleTaskManager.java | 30 ++++++++++++++----- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemRunConfiguration.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemRunConfiguration.java index 061a88c5b9ae..a0ea3e405b5a 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemRunConfiguration.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemRunConfiguration.java @@ -148,7 +148,7 @@ public class ExternalSystemRunConfiguration extends LocatableConfigurationBase { } String vmOptions; if (myDebugPort > 0) { - String debuggerSetup = "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=" + myDebugPort; + String debuggerSetup = "-agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=" + myDebugPort; String regular = mySettings.getVmOptions(); vmOptions = regular == null ? debuggerSetup : regular + " " + debuggerSetup; } diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemTaskDebugRunner.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemTaskDebugRunner.java index b0d18c6da9c5..71b74f6e2272 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemTaskDebugRunner.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/execution/ExternalSystemTaskDebugRunner.java @@ -59,7 +59,7 @@ public class ExternalSystemTaskDebugRunner extends GenericDebuggerRunner { if (state instanceof ExternalSystemRunConfiguration.MyRunnableState) { int port = ((ExternalSystemRunConfiguration.MyRunnableState)state).getDebugPort(); if (port > 0) { - RemoteConnection connection = new RemoteConnection(true, "127.0.0.1", String.valueOf(port), false); + RemoteConnection connection = new RemoteConnection(true, "127.0.0.1", String.valueOf(port), true); return attachVirtualMachine(project, state, contentToReuse, env, connection, true); } else { diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/task/GradleTaskManager.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/task/GradleTaskManager.java index bdf44b6c4dab..5fa7ca40e7af 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/task/GradleTaskManager.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/task/GradleTaskManager.java @@ -15,13 +15,15 @@ */ package org.jetbrains.plugins.gradle.service.task; -import com.intellij.openapi.externalSystem.task.ExternalSystemTaskManager; import com.intellij.openapi.externalSystem.model.ExternalSystemException; import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskId; import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotificationListener; +import com.intellij.openapi.externalSystem.task.ExternalSystemTaskManager; +import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.Function; +import com.intellij.util.SystemProperties; import org.gradle.tooling.BuildLauncher; import org.gradle.tooling.ProjectConnection; import org.jetbrains.annotations.NotNull; @@ -29,6 +31,8 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.gradle.service.project.GradleExecutionHelper; import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings; +import java.io.File; +import java.io.IOException; import java.util.List; /** @@ -36,7 +40,7 @@ import java.util.List; * @since 3/14/13 5:09 PM */ public class GradleTaskManager implements ExternalSystemTaskManager { - + private final GradleExecutionHelper myHelper = new GradleExecutionHelper(); @Override @@ -45,21 +49,33 @@ public class GradleTaskManager implements ExternalSystemTaskManager f = new Function() { @Override public Void fun(ProjectConnection connection) { BuildLauncher launcher = myHelper.getBuildLauncher(id, connection, settings, listener); if (!StringUtil.isEmpty(vmOptions)) { - assert vmOptions != null; - launcher.setJvmArguments(vmOptions.trim()); + try { + final File tempFile = FileUtil.createTempFile("init", ".gradle"); + tempFile.deleteOnExit(); + final String[] lines = { + "gradle.taskGraph.beforeTask { Task task ->", + " if (task instanceof JavaForkOptions) {", + " task.jvmArgs '" + vmOptions.trim() + '\'', + "}}", + }; + FileUtil.writeToFile(tempFile, StringUtil.join(lines, SystemProperties.getLineSeparator())); + launcher.withArguments("--init-script", tempFile.getAbsolutePath()); + } + catch (IOException e) { + throw new ExternalSystemException(e); + } } launcher.forTasks(ArrayUtil.toStringArray(taskNames)); launcher.run(); return null; } }; - myHelper.execute(projectPath, settings, f); + myHelper.execute(projectPath, settings, f); } }