From b8f68b70043425a584241b1f059eff3d89125733 Mon Sep 17 00:00:00 2001 From: UltraDev Date: Fri, 30 Sep 2022 17:33:29 +0200 Subject: [PATCH 1/4] Navigate to line on stack frame changes --- .../instrument/breakpoint/ui/FramesTab.kt | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ui/FramesTab.kt b/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ui/FramesTab.kt index 3c579bf2a..593275993 100644 --- a/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ui/FramesTab.kt +++ b/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ui/FramesTab.kt @@ -18,6 +18,9 @@ package spp.jetbrains.sourcemarker.service.instrument.breakpoint.ui import com.intellij.icons.AllIcons import com.intellij.openapi.Disposable +import com.intellij.openapi.editor.LogicalPosition +import com.intellij.openapi.editor.ScrollType +import com.intellij.openapi.fileEditor.FileEditorManager import com.intellij.openapi.project.Project import com.intellij.ui.CollectionListModel import com.intellij.ui.ColoredListCellRenderer @@ -94,6 +97,23 @@ class FramesTab( tab.stackFrameManager.currentFrame = stackFrame tab.stackFrameManager.currentFrameIndex = stackFrameList.selectedIndex tab.onStackFrameUpdated() + + val psiFile = stackFrameManager?.stackTrace?.language?.let { + ArtifactNamingService.getService(it).findPsiFile(it, project, stackFrame) + } + if (psiFile != null && psiFile.isWritable) { + val fileEditorManager = FileEditorManager.getInstance(project) + fileEditorManager.openFile(psiFile.virtualFile, true) + val editor = fileEditorManager.selectedTextEditor!! + editor.caretModel.moveToLogicalPosition( + LogicalPosition( + stackFrame.sourceAsLineNumber()!! - 1, + 0 + ) + ) + + editor.scrollingModel.scrollToCaret(ScrollType.CENTER) + } } } } From 4990f26aeef7d17e99b3d806d59a64c7b2dc86ca Mon Sep 17 00:00:00 2001 From: UltraDev Date: Fri, 30 Sep 2022 18:26:00 +0200 Subject: [PATCH 2/4] Check for non-null line number --- .../sourcemarker/service/instrument/breakpoint/ui/FramesTab.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ui/FramesTab.kt b/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ui/FramesTab.kt index 593275993..8e3ed0b93 100644 --- a/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ui/FramesTab.kt +++ b/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ui/FramesTab.kt @@ -101,7 +101,7 @@ class FramesTab( val psiFile = stackFrameManager?.stackTrace?.language?.let { ArtifactNamingService.getService(it).findPsiFile(it, project, stackFrame) } - if (psiFile != null && psiFile.isWritable) { + if (psiFile != null && psiFile.isWritable && stackFrame.sourceAsLineNumber() != null) { val fileEditorManager = FileEditorManager.getInstance(project) fileEditorManager.openFile(psiFile.virtualFile, true) val editor = fileEditorManager.selectedTextEditor!! From bcf3d6226cd16e261d61cce5206644c4a139fcda Mon Sep 17 00:00:00 2001 From: Brandon Fergerson Date: Fri, 30 Sep 2022 20:26:59 +0400 Subject: [PATCH 3/4] fix: show execution point regression --- .../status/BreakpointStatusBar.java | 2 +- .../breakpoint/ExecutionPointManager.kt | 22 +++++++------------ .../instrument/breakpoint/ui/FramesTab.kt | 20 ----------------- 3 files changed, 9 insertions(+), 35 deletions(-) diff --git a/plugin/src/main/java/spp/jetbrains/sourcemarker/status/BreakpointStatusBar.java b/plugin/src/main/java/spp/jetbrains/sourcemarker/status/BreakpointStatusBar.java index cd8ece1ec..cb9cfa931 100644 --- a/plugin/src/main/java/spp/jetbrains/sourcemarker/status/BreakpointStatusBar.java +++ b/plugin/src/main/java/spp/jetbrains/sourcemarker/status/BreakpointStatusBar.java @@ -277,7 +277,7 @@ public void mouseClicked(MouseEvent e) { BreakpointHitWindowService.Companion.getInstance(inlayMark.getProject()) .clearContent(); BreakpointHitWindowService.Companion.getInstance(inlayMark.getProject()) - .showBreakpointHit(shownBreakpointHit.get(), false); + .showBreakpointHit(shownBreakpointHit.get(), true); }); } })); diff --git a/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ExecutionPointManager.kt b/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ExecutionPointManager.kt index 32eb2a0a3..b03a4f89b 100644 --- a/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ExecutionPointManager.kt +++ b/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ExecutionPointManager.kt @@ -25,12 +25,11 @@ import com.intellij.openapi.fileEditor.OpenFileDescriptor import com.intellij.openapi.project.Project import com.intellij.xdebugger.XDebuggerUtil import com.intellij.xdebugger.impl.ui.ExecutionPointHighlighter -import spp.jetbrains.marker.SourceMarker -import spp.protocol.artifact.exception.qualifiedClassName +import spp.jetbrains.marker.impl.ArtifactNamingService import spp.protocol.artifact.exception.sourceAsLineNumber /** - * todo: probably don't need this as the breakpoint bar serves as the execution point indicator + * Shows the execution point in the editor for the selected stack frame. * * @since 0.3.0 * @author [Brandon Fergerson](mailto:bfergerson@apache.org) @@ -47,16 +46,11 @@ class ExecutionPointManager( override fun onChanged(stackFrameManager: StackFrameManager) { if (!showExecutionPoint) return - val currentFrame = stackFrameManager.currentFrame - var fromClass = currentFrame!!.qualifiedClassName() - - //check for inner class - val indexOfDollarSign = fromClass.indexOf("$") - if (indexOfDollarSign >= 0) { - fromClass = fromClass.substring(0, indexOfDollarSign) - } - val fileMarker = SourceMarker.getInstance(project).getSourceFileMarker(fromClass) ?: return - val virtualFile = fileMarker.psiFile.containingFile.virtualFile ?: return + val currentFrame = stackFrameManager.currentFrame ?: return + val psiFile = stackFrameManager.stackTrace.language?.let { + ArtifactNamingService.getService(it).findPsiFile(it, project, currentFrame) + } ?: return + val virtualFile = psiFile.containingFile.virtualFile ?: return val document = FileDocumentManager.getInstance().getDocument(virtualFile) ?: return val lineStartOffset = document.getLineStartOffset(currentFrame.sourceAsLineNumber()!!) - 1 @@ -69,7 +63,7 @@ class ExecutionPointManager( executionPointHighlighter.show( XDebuggerUtil.getInstance().createPositionByOffset( virtualFile, lineStartOffset - )!!, false, null + )!!, true, null ) } catch (e: Throwable) { log.error("Failed to set execution point", e) diff --git a/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ui/FramesTab.kt b/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ui/FramesTab.kt index 8e3ed0b93..3c579bf2a 100644 --- a/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ui/FramesTab.kt +++ b/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ui/FramesTab.kt @@ -18,9 +18,6 @@ package spp.jetbrains.sourcemarker.service.instrument.breakpoint.ui import com.intellij.icons.AllIcons import com.intellij.openapi.Disposable -import com.intellij.openapi.editor.LogicalPosition -import com.intellij.openapi.editor.ScrollType -import com.intellij.openapi.fileEditor.FileEditorManager import com.intellij.openapi.project.Project import com.intellij.ui.CollectionListModel import com.intellij.ui.ColoredListCellRenderer @@ -97,23 +94,6 @@ class FramesTab( tab.stackFrameManager.currentFrame = stackFrame tab.stackFrameManager.currentFrameIndex = stackFrameList.selectedIndex tab.onStackFrameUpdated() - - val psiFile = stackFrameManager?.stackTrace?.language?.let { - ArtifactNamingService.getService(it).findPsiFile(it, project, stackFrame) - } - if (psiFile != null && psiFile.isWritable && stackFrame.sourceAsLineNumber() != null) { - val fileEditorManager = FileEditorManager.getInstance(project) - fileEditorManager.openFile(psiFile.virtualFile, true) - val editor = fileEditorManager.selectedTextEditor!! - editor.caretModel.moveToLogicalPosition( - LogicalPosition( - stackFrame.sourceAsLineNumber()!! - 1, - 0 - ) - ) - - editor.scrollingModel.scrollToCaret(ScrollType.CENTER) - } } } } From 618730905439b07c896470a39b560b9bc8136fe3 Mon Sep 17 00:00:00 2001 From: Brandon Fergerson Date: Fri, 30 Sep 2022 20:31:58 +0400 Subject: [PATCH 4/4] fix: check for non-null line number --- .../service/instrument/breakpoint/ExecutionPointManager.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ExecutionPointManager.kt b/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ExecutionPointManager.kt index b03a4f89b..22118f148 100644 --- a/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ExecutionPointManager.kt +++ b/plugin/src/main/kotlin/spp/jetbrains/sourcemarker/service/instrument/breakpoint/ExecutionPointManager.kt @@ -52,7 +52,9 @@ class ExecutionPointManager( } ?: return val virtualFile = psiFile.containingFile.virtualFile ?: return val document = FileDocumentManager.getInstance().getDocument(virtualFile) ?: return - val lineStartOffset = document.getLineStartOffset(currentFrame.sourceAsLineNumber()!!) - 1 + val lineStartOffset = currentFrame.sourceAsLineNumber()?.let { + document.getLineStartOffset(it) - 1 + } ?: return ApplicationManager.getApplication().invokeLater { try {