diff --git a/plugins/kotlin/jvm-debugger/coroutines/src/org/jetbrains/kotlin/idea/debugger/coroutine/CoroutineAgentConnector.kt b/plugins/kotlin/jvm-debugger/coroutines/src/org/jetbrains/kotlin/idea/debugger/coroutine/CoroutineAgentConnector.kt index c3b735ded207..1fb4a298a562 100644 --- a/plugins/kotlin/jvm-debugger/coroutines/src/org/jetbrains/kotlin/idea/debugger/coroutine/CoroutineAgentConnector.kt +++ b/plugins/kotlin/jvm-debugger/coroutines/src/org/jetbrains/kotlin/idea/debugger/coroutine/CoroutineAgentConnector.kt @@ -2,6 +2,8 @@ package org.jetbrains.kotlin.idea.debugger.coroutine import com.intellij.execution.configurations.JavaParameters +import com.intellij.execution.configurations.ModuleBasedConfiguration +import com.intellij.execution.configurations.RunConfigurationBase import com.intellij.openapi.project.Project import com.intellij.openapi.projectRoots.JdkUtil import com.intellij.openapi.vfs.VirtualFile @@ -28,12 +30,11 @@ internal object CoroutineAgentConnector { private val versionToCompareTo = DefaultArtifactVersion("1.3.7-255") private val kotlinxCoroutinesCoreJarRegex = Regex(""".+\W$kotlinxCoroutinesCoreName(-jvm)?-(\d[\w.\-]+)?\.jar""") - fun attachCoroutineAgent(project: Project, params: JavaParameters): Boolean { - if (!params.classPath.containsKotlinxCoroutinesCore()) { + fun attachCoroutineAgent(project: Project, params: JavaParameters, configuration: RunConfigurationBase<*>?): Boolean { + if (!params.classPath.containsKotlinxCoroutinesCore()) { return false } - - val searchResult = findKotlinxCoroutinesCoreJar(project) + val searchResult = findKotlinxCoroutinesCoreJar(project, configuration) if (searchResult.debuggerMode == CoroutineDebuggerMode.VERSION_1_3_8_AND_UP && searchResult.jarPath != null) { return initializeCoroutineAgent(params, searchResult.jarPath) @@ -44,9 +45,9 @@ internal object CoroutineAgentConnector { private fun PathsList.containsKotlinxCoroutinesCore() = pathList.any { it.contains(kotlinxCoroutinesCoreName) } - private fun findKotlinxCoroutinesCoreJar(project: Project): KotlinxCoroutinesSearchResult { + private fun findKotlinxCoroutinesCoreJar(project: Project, configuration: RunConfigurationBase<*>?): KotlinxCoroutinesSearchResult { val matchResult = project - .getJarVirtualFiles(kotlinxCoroutinesPackageName) + .getJarVirtualFiles(project, configuration, kotlinxCoroutinesPackageName) .matchToPackageRegexInProject(project, kotlinxCoroutinesCoreJarRegex) if (matchResult == null || matchResult.groupValues.size < 3) { @@ -71,11 +72,15 @@ internal object CoroutineAgentConnector { return null } - private fun Project.getJarVirtualFiles(packageName: String): List { + private fun Project.getJarVirtualFiles(project: Project, configuration: RunConfigurationBase<*>?, packageName: String): List { val kotlinxCoroutinesPackage = JavaPsiFacade.getInstance(this) .findPackage(packageName) ?: return emptyList() - return kotlinxCoroutinesPackage.directories.mapNotNull { it.virtualFile } + var scope = GlobalSearchScope.allScope(project) + if (configuration is ModuleBasedConfiguration<*, *>) { + configuration.configurationModule.module?.let { scope = it.getModuleRuntimeScope(true) } + } + return kotlinxCoroutinesPackage.getDirectories(scope).mapNotNull { it.virtualFile } } private fun String.getParentJarPath(): String? { diff --git a/plugins/kotlin/jvm-debugger/coroutines/src/org/jetbrains/kotlin/idea/debugger/coroutine/DebuggerConnection.kt b/plugins/kotlin/jvm-debugger/coroutines/src/org/jetbrains/kotlin/idea/debugger/coroutine/DebuggerConnection.kt index de1c8434d423..12d0b68f252e 100644 --- a/plugins/kotlin/jvm-debugger/coroutines/src/org/jetbrains/kotlin/idea/debugger/coroutine/DebuggerConnection.kt +++ b/plugins/kotlin/jvm-debugger/coroutines/src/org/jetbrains/kotlin/idea/debugger/coroutine/DebuggerConnection.kt @@ -41,7 +41,7 @@ class DebuggerConnection( init { if (params is JavaParameters && modifyArgs) { // gradle related logic in KotlinGradleCoroutineDebugProjectResolver - coroutineAgentAttached = CoroutineAgentConnector.attachCoroutineAgent(project, params) + coroutineAgentAttached = CoroutineAgentConnector.attachCoroutineAgent(project, params, configuration) } else { coroutineAgentAttached = false log.debug("Coroutine debugger disabled.")