(CoroutineDebugger) fails to start in gradle mode
#KT-39634 fixed
This commit is contained in:
+20
-6
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.configuration
|
|||||||
|
|
||||||
import com.intellij.openapi.diagnostic.Logger
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
import com.intellij.util.Consumer
|
import com.intellij.util.Consumer
|
||||||
|
import org.jetbrains.kotlin.idea.debugger.KotlinDebuggerSettings
|
||||||
import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension
|
import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension
|
||||||
|
|
||||||
class KotlinGradleCoroutineDebugProjectResolver : AbstractProjectResolverExtension() {
|
class KotlinGradleCoroutineDebugProjectResolver : AbstractProjectResolverExtension() {
|
||||||
@@ -14,7 +15,9 @@ class KotlinGradleCoroutineDebugProjectResolver : AbstractProjectResolverExtensi
|
|||||||
|
|
||||||
override fun enhanceTaskProcessing(taskNames: MutableList<String>, jvmParametersSetup: String?, initScriptConsumer: Consumer<String>) {
|
override fun enhanceTaskProcessing(taskNames: MutableList<String>, jvmParametersSetup: String?, initScriptConsumer: Consumer<String>) {
|
||||||
try {
|
try {
|
||||||
setupCoroutineAgentForJvmForkedTestTasks(initScriptConsumer)
|
val disableCoroutineAgent = KotlinDebuggerSettings.getInstance().debugDisableCoroutineAgent
|
||||||
|
if (!disableCoroutineAgent)
|
||||||
|
setupCoroutineAgentForJvmForkedTestTasks(initScriptConsumer)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
log.error("Gradle: not possible to attach a coroutine debugger agent.", e)
|
log.error("Gradle: not possible to attach a coroutine debugger agent.", e)
|
||||||
}
|
}
|
||||||
@@ -25,11 +28,22 @@ class KotlinGradleCoroutineDebugProjectResolver : AbstractProjectResolverExtensi
|
|||||||
//language=Gradle
|
//language=Gradle
|
||||||
"""
|
"""
|
||||||
gradle.taskGraph.beforeTask { Task task ->
|
gradle.taskGraph.beforeTask { Task task ->
|
||||||
if (task instanceof Test) {
|
if (task instanceof Test) {
|
||||||
def kotlinxCoroutinesDebugJar = task.classpath.find { it.name.startsWith("kotlinx-coroutines-debug") }
|
def kotlinxCoroutinesDebugJar = task.classpath.find { it.name.startsWith("kotlinx-coroutines-debug") }
|
||||||
if (kotlinxCoroutinesDebugJar)
|
if (kotlinxCoroutinesDebugJar)
|
||||||
task.jvmArgs ("-javaagent:${'$'}{kotlinxCoroutinesDebugJar?.absolutePath}", "-ea")
|
task.jvmArgs ("-javaagent:${'$'}{kotlinxCoroutinesDebugJar?.absolutePath}", "-ea")
|
||||||
}
|
else {
|
||||||
|
for (lib in task.getClasspath()) {
|
||||||
|
def results = (lib.getName() =~ /kotlinx-coroutines-core\-([\d\.]+)\.jar${'$'}/).findAll()
|
||||||
|
if (results) {
|
||||||
|
def version = results.first()[1]
|
||||||
|
if (org.gradle.util.VersionNumber.parse( version ) >= org.gradle.util.VersionNumber.parse( '1.3.6' )) {
|
||||||
|
task.jvmArgs ("-javaagent:${'$'}{lib?.absolutePath}", "-ea")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
initScriptConsumer.consume(script)
|
initScriptConsumer.consume(script)
|
||||||
|
|||||||
+3
-2
@@ -33,14 +33,15 @@ class DebuggerConnection(
|
|||||||
val project: Project,
|
val project: Project,
|
||||||
val configuration: RunConfigurationBase<*>,
|
val configuration: RunConfigurationBase<*>,
|
||||||
val params: JavaParameters?,
|
val params: JavaParameters?,
|
||||||
val runnerSettings: DebuggingRunnerData?
|
val runnerSettings: DebuggingRunnerData?,
|
||||||
|
modifyArgs: Boolean = true
|
||||||
) : XDebuggerManagerListener {
|
) : XDebuggerManagerListener {
|
||||||
var disposable: Disposable? = null
|
var disposable: Disposable? = null
|
||||||
var connection: MessageBusConnection? = null
|
var connection: MessageBusConnection? = null
|
||||||
private val log by logger
|
private val log by logger
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (params is JavaParameters) {
|
if (params is JavaParameters && modifyArgs) {
|
||||||
// gradle related logic in KotlinGradleCoroutineDebugProjectResolver
|
// gradle related logic in KotlinGradleCoroutineDebugProjectResolver
|
||||||
val kotlinxCoroutinesCore = params.classPath?.pathList?.firstOrNull { it.contains("kotlinx-coroutines-core") }
|
val kotlinxCoroutinesCore = params.classPath?.pathList?.firstOrNull { it.contains("kotlinx-coroutines-core") }
|
||||||
val kotlinxCoroutinesDebug = params.classPath?.pathList?.firstOrNull { it.contains("kotlinx-coroutines-debug") }
|
val kotlinxCoroutinesDebug = params.classPath?.pathList?.firstOrNull { it.contains("kotlinx-coroutines-debug") }
|
||||||
|
|||||||
+7
-3
@@ -34,12 +34,16 @@ class CoroutineDebuggerListener(val project: Project) : DebuggerListener {
|
|||||||
val isExternalSystemRunConfiguration = configuration is ExternalSystemRunConfiguration
|
val isExternalSystemRunConfiguration = configuration is ExternalSystemRunConfiguration
|
||||||
val isGradleConfiguration = gradleConfiguration(configuration.type.id)
|
val isGradleConfiguration = gradleConfiguration(configuration.type.id)
|
||||||
val disableCoroutineAgent = KotlinDebuggerSettings.getInstance().debugDisableCoroutineAgent
|
val disableCoroutineAgent = KotlinDebuggerSettings.getInstance().debugDisableCoroutineAgent
|
||||||
if (!disableCoroutineAgent && runnerSettings is DebuggingRunnerData && !isExternalSystemRunConfiguration && !isGradleConfiguration)
|
if (!disableCoroutineAgent && runnerSettings is DebuggingRunnerData) {
|
||||||
return DebuggerConnection(project, configuration, params, runnerSettings)
|
if (isExternalSystemRunConfiguration && isGradleConfiguration)
|
||||||
|
// gradle related logic in KotlinGradleCoroutineDebugProjectResolver
|
||||||
|
return DebuggerConnection(project, configuration, params, runnerSettings, false)
|
||||||
|
else
|
||||||
|
return DebuggerConnection(project, configuration, params, runnerSettings, true)
|
||||||
|
}
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun gradleConfiguration(configurationName: String) =
|
private fun gradleConfiguration(configurationName: String) =
|
||||||
"GradleRunConfiguration" == configurationName || "KotlinGradleRunConfiguration" == configurationName
|
"GradleRunConfiguration" == configurationName || "KotlinGradleRunConfiguration" == configurationName
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user