diff --git a/java/debugger/impl/BUILD.bazel b/java/debugger/impl/BUILD.bazel index af6953cfacea..f5f067be7b5e 100644 --- a/java/debugger/impl/BUILD.bazel +++ b/java/debugger/impl/BUILD.bazel @@ -64,6 +64,7 @@ jvm_library( "//java/codeserver/highlighting", "//xml/xml-psi-api:psi", "//platform/xdebugger-impl/shared", + "//platform/xdebugger-impl/rpc", ], runtime_deps = [":impl_resources"] ) diff --git a/java/debugger/impl/intellij.java.debugger.impl.iml b/java/debugger/impl/intellij.java.debugger.impl.iml index 5c8d2b8abf9b..cfe0a6a210e8 100644 --- a/java/debugger/impl/intellij.java.debugger.impl.iml +++ b/java/debugger/impl/intellij.java.debugger.impl.iml @@ -97,6 +97,7 @@ + diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/HotSwapAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/HotSwapAction.java index 84a0870c5394..43b51a9551d0 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/HotSwapAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/HotSwapAction.java @@ -12,6 +12,7 @@ import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.project.Project; import com.intellij.xdebugger.impl.hotswap.HotSwapStatistics; +import com.intellij.xdebugger.impl.rpc.HotSwapSource; import org.jetbrains.annotations.NotNull; public class HotSwapAction extends AnAction { @@ -24,7 +25,7 @@ public class HotSwapAction extends AnAction { DebuggerSession session = debuggerManager.getContext().getDebuggerSession(); if (session != null && session.isAttached()) { - HotSwapStatistics.logHotSwapCalled(project, HotSwapStatistics.HotSwapSource.RELOAD_ALL); + HotSwapStatistics.logHotSwapCalled(project, HotSwapSource.RELOAD_ALL); HotSwapUI.getInstance(project).reloadChangedClasses(session, DebuggerSettings.getInstance().COMPILE_BEFORE_HOTSWAP); } } diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/ReloadFileAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/ReloadFileAction.java index 745b009e4210..d4bed3092017 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/ReloadFileAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/ReloadFileAction.java @@ -11,6 +11,7 @@ import com.intellij.openapi.compiler.CompilerManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.xdebugger.impl.hotswap.HotSwapStatistics; +import com.intellij.xdebugger.impl.rpc.HotSwapSource; import org.jetbrains.annotations.NotNull; public class ReloadFileAction extends CompileAction { @@ -22,7 +23,7 @@ public class ReloadFileAction extends CompileAction { if (files.length > 0) { DebuggerSession session = DebuggerManagerEx.getInstanceEx(project).getContext().getDebuggerSession(); if (session != null) { - HotSwapStatistics.logHotSwapCalled(project, HotSwapStatistics.HotSwapSource.RELOAD_FILE); + HotSwapStatistics.logHotSwapCalled(project, HotSwapSource.RELOAD_FILE); HotSwapUI.getInstance(project).compileAndReload(session, files); } } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapUIImpl.java b/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapUIImpl.java index 41b83ad4c8da..9706255c6b19 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapUIImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapUIImpl.java @@ -34,6 +34,7 @@ import com.intellij.util.containers.FileCollectionFactory; import com.intellij.util.messages.MessageBusConnection; import com.intellij.xdebugger.impl.hotswap.HotSwapStatistics; import com.intellij.xdebugger.impl.hotswap.HotSwapStatusNotificationManager; +import com.intellij.xdebugger.impl.rpc.HotSwapSource; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Unmodifiable; @@ -176,7 +177,7 @@ public final class HotSwapUIImpl extends HotSwapUI { statusListener.onCancel(sessions); return; } - HotSwapStatistics.logHotSwapCalled(myProject, HotSwapStatistics.HotSwapSource.ON_REBUILD_ASK); + HotSwapStatistics.logHotSwapCalled(myProject, HotSwapSource.ON_REBUILD_ASK); Set toReload = new HashSet<>(dialog.getSessionsToReload()); for (DebuggerSession session : modifiedClasses.keySet()) { if (!toReload.contains(session)) { @@ -404,7 +405,7 @@ public final class HotSwapUIImpl extends HotSwapUI { if (listener == null) continue; context.putUserData(HOT_SWAP_CALLBACK_KEY, listener); if (alwaysDoHotSwapOnRebuild) { - HotSwapStatistics.logHotSwapCalled(myProject, HotSwapStatistics.HotSwapSource.ON_REBUILD_AUTO); + HotSwapStatistics.logHotSwapCalled(myProject, HotSwapSource.ON_REBUILD_AUTO); } return; } diff --git a/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/hotswap/BackendXDebuggerHotSwapApi.kt b/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/hotswap/BackendXDebuggerHotSwapApi.kt index 0dfd4298d16f..fe2503af2088 100644 --- a/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/hotswap/BackendXDebuggerHotSwapApi.kt +++ b/platform/xdebugger-impl/backend/src/com/intellij/platform/debugger/impl/backend/hotswap/BackendXDebuggerHotSwapApi.kt @@ -11,6 +11,7 @@ import com.intellij.platform.project.findProject import com.intellij.xdebugger.impl.hotswap.HotSwapSessionImpl import com.intellij.xdebugger.impl.hotswap.HotSwapSessionManagerImpl import com.intellij.xdebugger.impl.hotswap.HotSwapStatistics +import com.intellij.xdebugger.impl.rpc.HotSwapSource import com.intellij.xdebugger.impl.rpc.XDebugHotSwapCurrentSessionStatus import com.intellij.xdebugger.impl.rpc.XDebugHotSwapSessionId import com.intellij.xdebugger.impl.rpc.XDebuggerHotSwapApi @@ -41,7 +42,7 @@ internal class BackendXDebuggerHotSwapApi : XDebuggerHotSwapApi { } } - override suspend fun performHotSwap(sessionId: XDebugHotSwapSessionId, source: HotSwapStatistics.HotSwapSource) { + override suspend fun performHotSwap(sessionId: XDebugHotSwapSessionId, source: HotSwapSource) { val session = findValueById(sessionId, type = HowSwapSessionValueIdType) ?: return HotSwapStatistics.logHotSwapCalled(session.project, source) session.performHotSwap() diff --git a/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/hotswap/FrontendHotSwapManager.kt b/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/hotswap/FrontendHotSwapManager.kt index 38c9092a256d..0792b97c08e4 100644 --- a/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/hotswap/FrontendHotSwapManager.kt +++ b/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/hotswap/FrontendHotSwapManager.kt @@ -5,12 +5,8 @@ import com.intellij.openapi.components.Service import com.intellij.openapi.components.service import com.intellij.openapi.project.Project import com.intellij.platform.project.projectId -import com.intellij.xdebugger.impl.hotswap.HotSwapStatistics -import com.intellij.xdebugger.impl.hotswap.HotSwapVisibleStatus import com.intellij.xdebugger.impl.hotswap.NOTIFICATION_TIME_SECONDS -import com.intellij.xdebugger.impl.rpc.XDebugHotSwapCurrentSessionStatus -import com.intellij.xdebugger.impl.rpc.XDebugHotSwapSessionId -import com.intellij.xdebugger.impl.rpc.XDebuggerHotSwapApi +import com.intellij.xdebugger.impl.rpc.* import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.delay @@ -40,7 +36,7 @@ internal class FrontendHotSwapManager(private val project: Project, val coroutin val currentStatus: XDebugHotSwapCurrentSessionStatus? get() = frontendStatusFlow.value - fun performHotSwap(sessionId: XDebugHotSwapSessionId, source: HotSwapStatistics.HotSwapSource) { + fun performHotSwap(sessionId: XDebugHotSwapSessionId, source: HotSwapSource) { coroutineScope.launch { XDebuggerHotSwapApi.getInstance().performHotSwap(sessionId, source) } diff --git a/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/hotswap/HotSwapFloatingToolbarProvider.kt b/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/hotswap/HotSwapFloatingToolbarProvider.kt index 4c83666409c8..a1b2ddbff012 100644 --- a/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/hotswap/HotSwapFloatingToolbarProvider.kt +++ b/platform/xdebugger-impl/frontend/src/com/intellij/platform/debugger/impl/frontend/hotswap/HotSwapFloatingToolbarProvider.kt @@ -22,9 +22,9 @@ import com.intellij.ui.AnimatedIcon import com.intellij.ui.PopupHandler import com.intellij.util.ui.JBUI import com.intellij.xdebugger.XDebuggerBundle -import com.intellij.xdebugger.impl.hotswap.HotSwapStatistics import com.intellij.xdebugger.impl.hotswap.HotSwapUiExtension -import com.intellij.xdebugger.impl.hotswap.HotSwapVisibleStatus +import com.intellij.xdebugger.impl.rpc.HotSwapSource +import com.intellij.xdebugger.impl.rpc.HotSwapVisibleStatus import com.intellij.xdebugger.impl.rpc.XDebugHotSwapCurrentSessionStatus import icons.PlatformDebuggerImplIcons import kotlinx.coroutines.Dispatchers @@ -64,7 +64,7 @@ internal class HotSwapModifiedFilesAction : AnAction(), DumbAware { val project = e.project ?: return val status = getCurrentStatus(project) ?: return if (!status.hasChanges) return - FrontendHotSwapManager.getInstance(project).performHotSwap(status.sessionId, HotSwapStatistics.HotSwapSource.RELOAD_MODIFIED_ACTION) + FrontendHotSwapManager.getInstance(project).performHotSwap(status.sessionId, HotSwapSource.RELOAD_MODIFIED_ACTION) } override fun update(e: AnActionEvent) { @@ -93,7 +93,7 @@ private class HotSwapWithRebuildAction : AnAction(), CustomComponentAction, Dumb override fun actionPerformed(e: AnActionEvent) { val project = e.project ?: return val status = getCurrentStatus(project) ?: return - FrontendHotSwapManager.getInstance(project).performHotSwap(status.sessionId, HotSwapStatistics.HotSwapSource.RELOAD_MODIFIED_BUTTON) + FrontendHotSwapManager.getInstance(project).performHotSwap(status.sessionId, HotSwapSource.RELOAD_MODIFIED_BUTTON) } override fun getActionUpdateThread() = ActionUpdateThread.EDT diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/rpc/XDebuggerHotSwapApi.kt b/platform/xdebugger-impl/rpc/src/com/intellij/platform/debugger/impl/rpc/XDebuggerHotSwapApi.kt similarity index 79% rename from platform/xdebugger-impl/src/com/intellij/xdebugger/impl/rpc/XDebuggerHotSwapApi.kt rename to platform/xdebugger-impl/rpc/src/com/intellij/platform/debugger/impl/rpc/XDebuggerHotSwapApi.kt index a4002214f6b3..97a9eff8015e 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/rpc/XDebuggerHotSwapApi.kt +++ b/platform/xdebugger-impl/rpc/src/com/intellij/platform/debugger/impl/rpc/XDebuggerHotSwapApi.kt @@ -5,8 +5,6 @@ import com.intellij.platform.project.ProjectId import com.intellij.platform.rpc.Id import com.intellij.platform.rpc.RemoteApiProviderService import com.intellij.platform.rpc.UID -import com.intellij.xdebugger.impl.hotswap.HotSwapStatistics -import com.intellij.xdebugger.impl.hotswap.HotSwapVisibleStatus import fleet.rpc.RemoteApi import fleet.rpc.Rpc import fleet.rpc.remoteApiDescriptor @@ -18,7 +16,7 @@ import org.jetbrains.annotations.ApiStatus @Rpc interface XDebuggerHotSwapApi : RemoteApi { suspend fun currentSessionStatus(projectId: ProjectId): Flow - suspend fun performHotSwap(sessionId: XDebugHotSwapSessionId, source: HotSwapStatistics.HotSwapSource) + suspend fun performHotSwap(sessionId: XDebugHotSwapSessionId, source: HotSwapSource) suspend fun hide(projectId: ProjectId) companion object { @@ -36,3 +34,19 @@ data class XDebugHotSwapSessionId(override val uid: UID) : Id @ApiStatus.Internal @Serializable data class XDebugHotSwapCurrentSessionStatus(val sessionId: XDebugHotSwapSessionId, val status: HotSwapVisibleStatus) + +@ApiStatus.Internal +enum class HotSwapVisibleStatus { + NO_CHANGES, CHANGES_READY, IN_PROGRESS, SUCCESS, HIDDEN +} + +@ApiStatus.Internal +@Serializable +enum class HotSwapSource { + RELOAD_FILE, + RELOAD_ALL, + ON_REBUILD_AUTO, + ON_REBUILD_ASK, + RELOAD_MODIFIED_ACTION, + RELOAD_MODIFIED_BUTTON, +} diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/hotswap/HotSwapSessionManagerImpl.kt b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/hotswap/HotSwapSessionManagerImpl.kt index 05518d068f90..e3051195eeb0 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/hotswap/HotSwapSessionManagerImpl.kt +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/hotswap/HotSwapSessionManagerImpl.kt @@ -8,6 +8,7 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.util.Disposer import com.intellij.platform.util.coroutines.childScope import com.intellij.xdebugger.hotswap.* +import com.intellij.xdebugger.impl.rpc.HotSwapVisibleStatus import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.MutableStateFlow @@ -98,11 +99,6 @@ class HotSwapSessionManagerImpl private constructor(private val project: Project @ApiStatus.Internal data class CurrentSessionState(val session: HotSwapSessionImpl<*>, val status: HotSwapVisibleStatus) -@ApiStatus.Internal -enum class HotSwapVisibleStatus { - NO_CHANGES, CHANGES_READY, IN_PROGRESS, SUCCESS, HIDDEN -} - private val logger = logger>() private val COMPLETED_STATUS: HotSwapVisibleStatus? = null diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/hotswap/HotSwapStatistics.kt b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/hotswap/HotSwapStatistics.kt index f768f3e0de14..8b6d0fe586e0 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/hotswap/HotSwapStatistics.kt +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/hotswap/HotSwapStatistics.kt @@ -5,13 +5,13 @@ import com.intellij.internal.statistic.eventLog.EventLogGroup import com.intellij.internal.statistic.eventLog.events.EventFields import com.intellij.internal.statistic.service.fus.collectors.CounterUsagesCollector import com.intellij.openapi.project.Project -import kotlinx.serialization.Serializable +import com.intellij.xdebugger.impl.rpc.HotSwapSource import org.jetbrains.annotations.ApiStatus @Suppress("PublicApiImplicitType") @ApiStatus.Internal object HotSwapStatistics : CounterUsagesCollector() { - private val group = EventLogGroup("debugger.hotswap", 1) + private val group = EventLogGroup("debugger.hotswap", 2) private val hotSwapCalled = group.registerEvent("hotswap.called", EventFields.Enum("source")) private val hotSwapStatus = group.registerEvent("hotswap.finished", EventFields.Enum("status")) @@ -32,16 +32,6 @@ object HotSwapStatistics : CounterUsagesCollector() { @JvmStatic fun logClassesReloaded(project: Project, count: Int) = hotSwapClassesNumber.log(project, count) - @Serializable - enum class HotSwapSource { - RELOAD_FILE, - RELOAD_ALL, - ON_REBUILD_AUTO, - ON_REBUILD_ASK, - RELOAD_MODIFIED_ACTION, - RELOAD_MODIFIED_BUTTON, - } - enum class HotSwapStatus { SUCCESS, COMPILATION_FAILURE, diff --git a/platform/xdebugger-impl/testSrc/com/intellij/xdebugger/impl/hotswap/HotSwapSessionManagerTest.kt b/platform/xdebugger-impl/testSrc/com/intellij/xdebugger/impl/hotswap/HotSwapSessionManagerTest.kt index 8124467132f2..73fa7c86d395 100644 --- a/platform/xdebugger-impl/testSrc/com/intellij/xdebugger/impl/hotswap/HotSwapSessionManagerTest.kt +++ b/platform/xdebugger-impl/testSrc/com/intellij/xdebugger/impl/hotswap/HotSwapSessionManagerTest.kt @@ -8,6 +8,7 @@ import com.intellij.openapi.Disposable import com.intellij.openapi.util.Disposer import com.intellij.testFramework.HeavyPlatformTestCase import com.intellij.xdebugger.hotswap.* +import com.intellij.xdebugger.impl.rpc.HotSwapVisibleStatus import kotlinx.coroutines.* import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.ReceiveChannel