-
Notifications
You must be signed in to change notification settings - Fork 131
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1661 from JetBrains/feature/pausepoints
Add pausepoints
- Loading branch information
Showing
23 changed files
with
242 additions
and
2 deletions.
There are no files selected for viewing
43 changes: 43 additions & 0 deletions
43
...n/com/jetbrains/rider/plugins/unity/debugger/breakpoints/UnityPausepointBreakpointType.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package com.jetbrains.rider.plugins.unity.debugger.breakpoints | ||
|
||
import com.intellij.openapi.project.Project | ||
import com.intellij.openapi.vfs.VirtualFile | ||
import com.intellij.xdebugger.breakpoints.SuspendPolicy | ||
import com.intellij.xdebugger.breakpoints.XLineBreakpoint | ||
import com.jetbrains.rider.debugger.breakpoint.DotNetLineBreakpointProperties | ||
import com.jetbrains.rider.debugger.breakpoint.DotNetLineBreakpointType | ||
import icons.UnityIcons | ||
import java.util.* | ||
import javax.swing.Icon | ||
|
||
class UnityPausepointBreakpointType : DotNetLineBreakpointType(Id, Title) { | ||
companion object { | ||
const val Id = "UnityPausepointType" | ||
const val Title = "Unity Pausepoints" | ||
} | ||
|
||
override fun getDisplayText(breakpoint: XLineBreakpoint<DotNetLineBreakpointProperties>?): String { | ||
return "Pause Unity editor when debugger reaches " + super.getDisplayText(breakpoint) | ||
} | ||
|
||
override fun getDisabledIcon(): Icon = UnityIcons.Debugger.Db_disabled_pausepoint | ||
override fun getEnabledIcon(): Icon = UnityIcons.Debugger.Db_set_pausepoint | ||
override fun getInactiveDependentIcon(): Icon = UnityIcons.Debugger.Db_dep_line_pausepoint | ||
override fun getInvalidIcon(): Icon = UnityIcons.Debugger.Db_invalid_pausepoint | ||
override fun getMutedDisabledIcon(): Icon = UnityIcons.Debugger.Db_muted_disabled_pausepoint | ||
override fun getMutedEnabledIcon(): Icon = UnityIcons.Debugger.Db_muted_pausepoint | ||
override fun getSuspendNoneIcon(): Icon = UnityIcons.Debugger.Db_no_suspend_pausepoint | ||
// Temporary is remove-once-hit | ||
override fun getTemporaryIcon(): Icon = UnityIcons.Debugger.Db_set_pausepoint | ||
override fun getVerifiedIcon() = UnityIcons.Debugger.Db_verified_pausepoint | ||
override fun getVerifiedIconWithNoSuspend() = UnityIcons.Debugger.Db_verified_no_suspend_pausepoint | ||
// getPendingIcon is not overridden. Base will return null, which then uses set icon | ||
|
||
// Don't allow adding the breakpoint manually | ||
override fun canPutAt(file: VirtualFile, line: Int, project: Project): Boolean = false | ||
|
||
override fun getPriority(): Int = super.getPriority() - 1 | ||
override fun getDefaultSuspendPolicy() = SuspendPolicy.NONE | ||
|
||
override fun getVisibleStandardPanels(): EnumSet<StandardPanels> = EnumSet.of(StandardPanels.DEPENDENCY) | ||
} |
7 changes: 7 additions & 0 deletions
7
...kotlin/com/jetbrains/rider/plugins/unity/debugger/breakpoints/UnityPausepointConstants.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package com.jetbrains.rider.plugins.unity.debugger.breakpoints | ||
|
||
object UnityPausepointConstants { | ||
const val pauseEditorCommand = "(UnityEditor.EditorApplication.isPaused = true) ? \"Unity pausepoint hit. Pausing Unity editor at the end of frame\" : \"Unable to pause Unity editor\"" | ||
const val convertToPausepointText = "Convert to Unity Pausepoint" | ||
const val convertToLineBreakpointText = "Convert to Line Breakpoint" | ||
} |
23 changes: 23 additions & 0 deletions
23
...n/com/jetbrains/rider/plugins/unity/debugger/breakpoints/UnityPausepointHandlerFactory.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
package com.jetbrains.rider.plugins.unity.debugger.breakpoints | ||
|
||
import com.intellij.xdebugger.breakpoints.XBreakpointHandler | ||
import com.intellij.xdebugger.breakpoints.XLineBreakpoint | ||
import com.jetbrains.rider.debugger.DotNetDebugProcess | ||
import com.jetbrains.rider.debugger.breakpoint.DotNetLineBreakpointProperties | ||
import com.jetbrains.rider.debugger.breakpoint.IDotNetSupportedBreakpointHandlerFactory | ||
|
||
class UnityPausepointHandler(private val debugProcess: DotNetDebugProcess) : XBreakpointHandler<XLineBreakpoint<DotNetLineBreakpointProperties>>(UnityPausepointBreakpointType::class.java) { | ||
override fun registerBreakpoint(breakpoint: XLineBreakpoint<DotNetLineBreakpointProperties>) { | ||
debugProcess.breakpointsManager.registerLineBreakpoint(breakpoint) | ||
} | ||
|
||
override fun unregisterBreakpoint(breakpoint: XLineBreakpoint<DotNetLineBreakpointProperties>, p1: Boolean) { | ||
debugProcess.breakpointsManager.unregisterLineBreakpoint(breakpoint) | ||
} | ||
} | ||
|
||
class UnityPausepointHandlerFactory : IDotNetSupportedBreakpointHandlerFactory { | ||
override fun createHandler(debugProcess: DotNetDebugProcess): XBreakpointHandler<*> { | ||
return UnityPausepointHandler(debugProcess) | ||
} | ||
} |
88 changes: 88 additions & 0 deletions
88
...in/com/jetbrains/rider/plugins/unity/debugger/breakpoints/UnityPausepointPanelProvider.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
package com.jetbrains.rider.plugins.unity.debugger.breakpoints | ||
|
||
import com.intellij.openapi.project.Project | ||
import com.intellij.ui.HyperlinkLabel | ||
import com.intellij.util.ui.UIUtil | ||
import com.intellij.xdebugger.XDebuggerManager | ||
import com.intellij.xdebugger.XDebuggerUtil | ||
import com.intellij.xdebugger.breakpoints.SuspendPolicy | ||
import com.intellij.xdebugger.breakpoints.XLineBreakpoint | ||
import com.intellij.xdebugger.breakpoints.ui.XBreakpointCustomPropertiesPanel | ||
import com.jetbrains.rd.platform.util.application | ||
import com.jetbrains.rider.UnityProjectDiscoverer | ||
import com.jetbrains.rider.debugger.breakpoint.DotNetLineBreakpointProperties | ||
import com.jetbrains.rider.debugger.breakpoint.DotNetLineBreakpointType | ||
import com.jetbrains.rider.debugger.breakpoint.IDotNetLineBreakpointCustomPanelsProvider | ||
import javax.swing.JComponent | ||
import javax.swing.event.HyperlinkListener | ||
|
||
class UnityPausepointPanelProvider : IDotNetLineBreakpointCustomPanelsProvider { | ||
override fun getCustomBreakpointPanel(project: Project): XBreakpointCustomPropertiesPanel<XLineBreakpoint<DotNetLineBreakpointProperties>>? { | ||
if (!UnityProjectDiscoverer.getInstance(project).isUnityProject) | ||
return null | ||
return UnityPausepointPanel(project) | ||
} | ||
} | ||
|
||
class UnityPausepointPanel(private val project: Project) : XBreakpointCustomPropertiesPanel<XLineBreakpoint<DotNetLineBreakpointProperties>>() { | ||
|
||
private val activatePausepointHyperlink = HyperlinkLabel(UnityPausepointConstants.convertToPausepointText) | ||
private var currentListener: HyperlinkListener? = null | ||
|
||
override fun loadFrom(breakpoint: XLineBreakpoint<DotNetLineBreakpointProperties>) { | ||
val isPausepoint = breakpoint.type is UnityPausepointBreakpointType | ||
activatePausepointHyperlink.setHyperlinkText( | ||
if (isPausepoint) | ||
UnityPausepointConstants.convertToLineBreakpointText | ||
else | ||
UnityPausepointConstants.convertToPausepointText | ||
) | ||
|
||
val listener = HyperlinkListener { | ||
if (!isPausepoint) { | ||
convertToPausepoint(breakpoint) | ||
} else { | ||
convertToLineBreakpoint(breakpoint) | ||
} | ||
} | ||
|
||
if (currentListener != null) { | ||
activatePausepointHyperlink.removeHyperlinkListener(currentListener) | ||
} | ||
currentListener = listener | ||
|
||
activatePausepointHyperlink.addHyperlinkListener(listener) | ||
} | ||
|
||
override fun saveTo(breakpoint: XLineBreakpoint<DotNetLineBreakpointProperties>) { | ||
} | ||
|
||
override fun getComponent(): JComponent = activatePausepointHyperlink | ||
|
||
private fun convertToPausepoint(breakpoint: XLineBreakpoint<DotNetLineBreakpointProperties>) { | ||
UIUtil.invokeLaterIfNeeded { | ||
application.runWriteAction { | ||
val breakpointManager = XDebuggerManager.getInstance(project).breakpointManager | ||
val unityPausepointType = XDebuggerUtil.getInstance().findBreakpointType(UnityPausepointBreakpointType::class.java) | ||
breakpointManager.removeBreakpoint(breakpoint) | ||
|
||
breakpointManager.addLineBreakpoint(unityPausepointType, breakpoint.fileUrl, breakpoint.line, breakpoint.properties).apply { | ||
this.suspendPolicy = SuspendPolicy.NONE | ||
this.logExpression = UnityPausepointConstants.pauseEditorCommand | ||
} | ||
} | ||
} | ||
} | ||
|
||
private fun convertToLineBreakpoint(breakpoint: XLineBreakpoint<DotNetLineBreakpointProperties>) { | ||
UIUtil.invokeLaterIfNeeded { | ||
application.runWriteAction { | ||
val breakpointManager = XDebuggerManager.getInstance(project).breakpointManager | ||
val dotnetLineBreakpointType = XDebuggerUtil.getInstance().findBreakpointType(DotNetLineBreakpointType::class.java) | ||
breakpointManager.removeBreakpoint(breakpoint) | ||
|
||
breakpointManager.addLineBreakpoint(dotnetLineBreakpointType, breakpoint.fileUrl, breakpoint.line, breakpoint.properties) | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
6 changes: 6 additions & 0 deletions
6
rider/src/main/resources/Icons/debugger/db_dep_line_pausepoint.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions
6
rider/src/main/resources/Icons/debugger/db_dep_line_pausepoint_dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions
3
rider/src/main/resources/Icons/debugger/db_disabled_pausepoint.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions
3
rider/src/main/resources/Icons/debugger/db_disabled_pausepoint_dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions
3
rider/src/main/resources/Icons/debugger/db_invalid_pausepoint.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions
3
rider/src/main/resources/Icons/debugger/db_invalid_pausepoint_dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions
3
rider/src/main/resources/Icons/debugger/db_muted_dep_pausepoint.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions
3
rider/src/main/resources/Icons/debugger/db_muted_dep_pausepoint_dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions
3
rider/src/main/resources/Icons/debugger/db_muted_disabled_pausepoint.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions
3
rider/src/main/resources/Icons/debugger/db_muted_disabled_pausepoint_dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions
3
rider/src/main/resources/Icons/debugger/db_muted_pausepoint.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions
3
rider/src/main/resources/Icons/debugger/db_muted_pausepoint_dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions
3
rider/src/main/resources/Icons/debugger/db_no_suspend_pausepoint.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions
3
rider/src/main/resources/Icons/debugger/db_no_suspend_pausepoint_dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions
6
rider/src/main/resources/Icons/debugger/db_verified_no_suspend_pausepoint.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions
6
rider/src/main/resources/Icons/debugger/db_verified_no_suspend_pausepoint_dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters