mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[coroutine debugger] do not attach if configuration scope does not contain coroutine dependency (KTIJ-19215)
GitOrigin-RevId: 203186dc62d36b93bfcf3311e70cbe25af445976
This commit is contained in:
committed by
intellij-monorepo-bot
parent
285bfaccf8
commit
8b9143ff22
+13
-8
@@ -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<VirtualFile> {
|
||||
private fun Project.getJarVirtualFiles(project: Project, configuration: RunConfigurationBase<*>?, packageName: String): List<VirtualFile> {
|
||||
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? {
|
||||
|
||||
+1
-1
@@ -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.")
|
||||
|
||||
Reference in New Issue
Block a user