mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[rd debugger] Move hot swap API to rpc module
GitOrigin-RevId: adc558e1a6929b34f2895acde1c77d580661c161
This commit is contained in:
committed by
intellij-monorepo-bot
parent
83022a3519
commit
d51fe808a8
@@ -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"]
|
||||
)
|
||||
|
||||
@@ -97,6 +97,7 @@
|
||||
<orderEntry type="module" module-name="intellij.java.codeserver.highlighting" />
|
||||
<orderEntry type="module" module-name="intellij.xml.psi" />
|
||||
<orderEntry type="module" module-name="intellij.platform.debugger.impl.shared" />
|
||||
<orderEntry type="module" module-name="intellij.platform.debugger.impl.rpc" />
|
||||
</component>
|
||||
<component name="copyright">
|
||||
<Base>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<DebuggerSession> 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;
|
||||
}
|
||||
|
||||
+2
-1
@@ -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()
|
||||
|
||||
+2
-6
@@ -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)
|
||||
}
|
||||
|
||||
+4
-4
@@ -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
|
||||
|
||||
+17
-3
@@ -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<Unit> {
|
||||
suspend fun currentSessionStatus(projectId: ProjectId): Flow<XDebugHotSwapCurrentSessionStatus?>
|
||||
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,
|
||||
}
|
||||
+1
-5
@@ -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<HotSwapSession<*>>()
|
||||
|
||||
private val COMPLETED_STATUS: HotSwapVisibleStatus? = null
|
||||
|
||||
+2
-12
@@ -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<HotSwapSource>("source"))
|
||||
private val hotSwapStatus = group.registerEvent("hotswap.finished", EventFields.Enum<HotSwapStatus>("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,
|
||||
|
||||
+1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user