diff --git a/.idea/modules.xml b/.idea/modules.xml
index b02a82fb1d95..1c443e85542d 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -904,7 +904,6 @@
-
diff --git a/platform/bootstrap/coroutine/intellij.platform.bootstrap.coroutine.iml b/platform/bootstrap/coroutine/intellij.platform.bootstrap.coroutine.iml
deleted file mode 100644
index 29ce45fa06c6..000000000000
--- a/platform/bootstrap/coroutine/intellij.platform.bootstrap.coroutine.iml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/platform/bootstrap/coroutine/src/kotlin/coroutines/jvm/internal/CoroutineDumpState.java b/platform/bootstrap/coroutine/src/kotlin/coroutines/jvm/internal/CoroutineDumpState.java
deleted file mode 100644
index 03c31511f6ed..000000000000
--- a/platform/bootstrap/coroutine/src/kotlin/coroutines/jvm/internal/CoroutineDumpState.java
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package kotlin.coroutines.jvm.internal;
-
-// cannot be in DebugProbesKt - in some context our override of class DebugProbesKt maybe not loaded
-@SuppressWarnings({"KotlinInternalInJava", "UnnecessaryFullyQualifiedName", "RedundantSuppression"})
-public final class CoroutineDumpState {
- // not volatile - that's ok to miss something
- static boolean INSTALLED = false;
-
- public static void install() {
- if (INSTALLED) {
- return;
- }
-
- // set to true - otherwise, install will try to load byte-buddy
- kotlinx.coroutines.debug.internal.AgentInstallationType.INSTANCE.setInstalledStatically$kotlinx_coroutines_core(true);
- kotlinx.coroutines.debug.internal.DebugProbesImpl debugProbes = kotlinx.coroutines.debug.internal.DebugProbesImpl.INSTANCE;
- debugProbes.setEnableCreationStackTraces$kotlinx_coroutines_core(false);
- debugProbes.install$kotlinx_coroutines_core();
-
- INSTALLED = true;
- }
-}
\ No newline at end of file
diff --git a/platform/bootstrap/coroutine/src/kotlin/coroutines/jvm/internal/DebugProbesKt.java b/platform/bootstrap/coroutine/src/kotlin/coroutines/jvm/internal/DebugProbesKt.java
deleted file mode 100644
index d6b067824acd..000000000000
--- a/platform/bootstrap/coroutine/src/kotlin/coroutines/jvm/internal/DebugProbesKt.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
-package kotlin.coroutines.jvm.internal;
-
-import kotlin.coroutines.Continuation;
-
-@SuppressWarnings({"KotlinInternalInJava", "RedundantSuppression", "unchecked", "UnnecessaryFullyQualifiedName", "unused", "rawtypes"})
-public final class DebugProbesKt {
- public static Continuation probeCoroutineCreated(Continuation completion) {
- if (CoroutineDumpState.INSTALLED) {
- return kotlinx.coroutines.debug.internal.DebugProbesImpl.INSTANCE.probeCoroutineCreated$kotlinx_coroutines_core(completion);
- }
- else {
- return completion;
- }
- }
-
- public static void probeCoroutineResumed(Continuation frame) {
- if (CoroutineDumpState.INSTALLED) {
- kotlinx.coroutines.debug.internal.DebugProbesImpl.INSTANCE.probeCoroutineResumed$kotlinx_coroutines_core(frame);
- }
- }
-
- public static void probeCoroutineSuspended(Continuation frame) {
- if (CoroutineDumpState.INSTALLED) {
- kotlinx.coroutines.debug.internal.DebugProbesImpl.INSTANCE.probeCoroutineSuspended$kotlinx_coroutines_core(frame);
- }
- }
-}
\ No newline at end of file
diff --git a/platform/bootstrap/intellij.platform.bootstrap.iml b/platform/bootstrap/intellij.platform.bootstrap.iml
index 44e74c84e6de..011ad8a28d73 100644
--- a/platform/bootstrap/intellij.platform.bootstrap.iml
+++ b/platform/bootstrap/intellij.platform.bootstrap.iml
@@ -18,6 +18,7 @@
+
diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/PlatformModules.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/PlatformModules.kt
index ee8a05dc91d1..c6b45c0d3791 100644
--- a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/PlatformModules.kt
+++ b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/PlatformModules.kt
@@ -200,9 +200,6 @@ internal suspend fun createPlatformLayout(addPlatformCoverage: Boolean,
"intellij.platform.diagnostic",
"intellij.platform.util",
"intellij.platform.core",
- // it has package `kotlin.coroutines.jvm.internal` - should be packed into the same JAR as coroutine lib,
- // to ensure that package index will not report one more JAR in a search path
- "intellij.platform.bootstrap.coroutine",
), productLayout = productLayout, layout = layout)
// used by jdom - pack to the same JAR
layout.withProjectLibrary(libraryName = "aalto-xml", jarName = UTIL_8_JAR)
diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/mergeJars.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/mergeJars.kt
index 44779bdb38a3..a91076cd5206 100644
--- a/platform/build-scripts/src/org/jetbrains/intellij/build/mergeJars.kt
+++ b/platform/build-scripts/src/org/jetbrains/intellij/build/mergeJars.kt
@@ -375,8 +375,8 @@ private fun getIgnoredNames(): Set {
set.add("META-INF/$name.md")
}
}
- set.add("kotlinx/coroutines/debug/internal/ByteBuddyDynamicAttach.class")
- set.add("kotlin/coroutines/jvm/internal/DebugProbesKt.class")
+ //set.add("kotlinx/coroutines/debug/internal/ByteBuddyDynamicAttach.class")
+ //set.add("kotlin/coroutines/jvm/internal/DebugProbesKt.class")
return java.util.Set.copyOf(set)
}
@@ -429,7 +429,7 @@ private fun checkNameForZipSource(name: String, excludes: List, includeMa
!name.startsWith("META-INF/versions/10/org/bouncycastle/") &&
!name.startsWith("META-INF/versions/15/org/bouncycastle/") &&
- !name.startsWith("kotlinx/coroutines/repackaged/") &&
+ //!name.startsWith("kotlinx/coroutines/repackaged/") &&
!name.startsWith("native/") &&
!name.startsWith("licenses/") &&
diff --git a/platform/platform-impl/intellij.platform.ide.impl.iml b/platform/platform-impl/intellij.platform.ide.impl.iml
index ae3bb3afd347..15927b77d8cb 100644
--- a/platform/platform-impl/intellij.platform.ide.impl.iml
+++ b/platform/platform-impl/intellij.platform.ide.impl.iml
@@ -141,7 +141,6 @@
-
diff --git a/platform/platform-impl/src/com/intellij/platform/ide/bootstrap/ApplicationLoader.kt b/platform/platform-impl/src/com/intellij/platform/ide/bootstrap/ApplicationLoader.kt
index 82b453760876..3c8d6598d2c2 100644
--- a/platform/platform-impl/src/com/intellij/platform/ide/bootstrap/ApplicationLoader.kt
+++ b/platform/platform-impl/src/com/intellij/platform/ide/bootstrap/ApplicationLoader.kt
@@ -7,6 +7,7 @@ package com.intellij.platform.ide.bootstrap
import com.intellij.diagnostic.COROUTINE_DUMP_HEADER
import com.intellij.diagnostic.LoadingState
import com.intellij.diagnostic.dumpCoroutines
+import com.intellij.diagnostic.enableCoroutineDump
import com.intellij.diagnostic.logs.LogLevelConfigurationManager
import com.intellij.ide.*
import com.intellij.ide.bootstrap.InitAppContext
@@ -56,6 +57,7 @@ import com.intellij.util.PlatformUtils
import com.intellij.util.io.URLUtil
import com.intellij.util.io.createDirectories
import com.intellij.util.lang.ZipFilePool
+import com.intellij.util.system.CpuArch
import com.jetbrains.JBR
import kotlinx.coroutines.*
import org.jetbrains.annotations.ApiStatus.Internal
@@ -66,7 +68,6 @@ import java.nio.file.Files
import java.nio.file.Path
import java.util.concurrent.CancellationException
import java.util.function.BiFunction
-import kotlin.coroutines.jvm.internal.CoroutineDumpState
import kotlin.system.exitProcess
@Suppress("SSBasedInspection")
@@ -203,7 +204,7 @@ internal suspend fun loadApp(app: ApplicationImpl,
appRegisteredJob.join()
initConfigurationStoreJob.join()
- launch {
+ val appInitializedListenerJob = launch {
val appInitializedListeners = appInitListeners.await()
span("app initialized callback") {
// An async scope here is intended for FLOW. FLOW!!! DO NOT USE the surrounding main scope.
@@ -226,6 +227,8 @@ internal suspend fun loadApp(app: ApplicationImpl,
addActivateAndWindowsCliListeners()
}
+ appInitializedListenerJob.join()
+
applicationStarter.await()
}
}
@@ -274,15 +277,25 @@ private suspend fun preloadNonHeadlessServices(
}
private suspend fun enableCoroutineDumpAndJstack() {
- if (!System.getProperty("idea.enable.coroutine.dump", "true").toBoolean()) {
+ if (!System.getProperty("idea.enable.coroutine.dump", "true").toBoolean() || (SystemInfoRt.isWindows && CpuArch.isArm64())) {
return
}
var isInstalled = false
span("coroutine debug probes init") {
try {
- CoroutineDumpState.install()
- isInstalled = true
+ enableCoroutineDump()
+ .onFailure { e ->
+ if (ApplicationManager.getApplication().isHeadlessEnvironment) {
+ LOG.warn("Cannot enable coroutine debug dump", e)
+ }
+ else {
+ LOG.error("Cannot enable coroutine debug dump", e)
+ }
+ }
+ .onSuccess {
+ isInstalled = true
+ }
}
catch (e: Throwable) {
LOG.error("Cannot enable coroutine debug dump", e)
diff --git a/platform/testFramework/common/intellij.platform.testFramework.common.iml b/platform/testFramework/common/intellij.platform.testFramework.common.iml
index 1ce8eaf12e17..85029f58582e 100644
--- a/platform/testFramework/common/intellij.platform.testFramework.common.iml
+++ b/platform/testFramework/common/intellij.platform.testFramework.common.iml
@@ -7,7 +7,7 @@
-
+
@@ -23,6 +23,5 @@
-
\ No newline at end of file
diff --git a/platform/testFramework/common/src/common/testApplication.kt b/platform/testFramework/common/src/common/testApplication.kt
index 9f3525ce7dd7..d1b8c809161e 100644
--- a/platform/testFramework/common/src/common/testApplication.kt
+++ b/platform/testFramework/common/src/common/testApplication.kt
@@ -75,7 +75,6 @@ import org.jetbrains.annotations.TestOnly
import sun.awt.AWTAutoShutdown
import java.time.Duration
import java.util.concurrent.TimeUnit
-import kotlin.coroutines.jvm.internal.CoroutineDumpState
private var appInitResult: Result? = null
const val LEAKED_PROJECTS: String = "leakedProjects"
@@ -116,9 +115,7 @@ fun loadApp(setupEventQueue: Runnable) {
System.setProperty("idea.diagnostic.opentelemetry.file",
PathManager.getLogDir().resolve("opentelemetry.json").toAbsolutePath().toString())
- // if BB in classpath
enableCoroutineDump()
- CoroutineDumpState.install()
JBR.getJstack()?.includeInfoFrom {
"""
$COROUTINE_DUMP_HEADER