Minor: do less work in debug thread during stepping commands for inline functions
This commit is contained in:
+7
-11
@@ -17,7 +17,6 @@
|
|||||||
package org.jetbrains.kotlin.idea.debugger.stepping
|
package org.jetbrains.kotlin.idea.debugger.stepping
|
||||||
|
|
||||||
import com.intellij.debugger.SourcePosition
|
import com.intellij.debugger.SourcePosition
|
||||||
import com.intellij.debugger.engine.ContextUtil
|
|
||||||
import com.intellij.debugger.engine.DebugProcessImpl
|
import com.intellij.debugger.engine.DebugProcessImpl
|
||||||
import com.intellij.debugger.engine.SuspendContextImpl
|
import com.intellij.debugger.engine.SuspendContextImpl
|
||||||
import com.intellij.debugger.engine.events.DebuggerCommandImpl
|
import com.intellij.debugger.engine.events.DebuggerCommandImpl
|
||||||
@@ -25,7 +24,6 @@ import com.intellij.debugger.impl.JvmSteppingCommandProvider
|
|||||||
import com.intellij.util.concurrency.Semaphore
|
import com.intellij.util.concurrency.Semaphore
|
||||||
import com.intellij.xdebugger.impl.XSourcePositionImpl
|
import com.intellij.xdebugger.impl.XSourcePositionImpl
|
||||||
import com.sun.jdi.Location
|
import com.sun.jdi.Location
|
||||||
import com.sun.jdi.ReferenceType
|
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully
|
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
|
||||||
@@ -34,7 +32,6 @@ import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils
|
|||||||
import org.jetbrains.kotlin.idea.core.refactoring.getLineCount
|
import org.jetbrains.kotlin.idea.core.refactoring.getLineCount
|
||||||
import org.jetbrains.kotlin.idea.core.refactoring.getLineStartOffset
|
import org.jetbrains.kotlin.idea.core.refactoring.getLineStartOffset
|
||||||
import org.jetbrains.kotlin.idea.util.DebuggerUtils
|
import org.jetbrains.kotlin.idea.util.DebuggerUtils
|
||||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
||||||
@@ -50,13 +47,12 @@ public class KotlinSteppingCommandProvider: JvmSteppingCommandProvider() {
|
|||||||
): DebugProcessImpl.ResumeCommand? {
|
): DebugProcessImpl.ResumeCommand? {
|
||||||
if (suspendContext == null) return null
|
if (suspendContext == null) return null
|
||||||
|
|
||||||
val result: Pair<SourcePosition, ReferenceType>? = computeInManagerThread(suspendContext) {
|
val location = computeInManagerThread(suspendContext) {
|
||||||
val sp = runReadAction { ContextUtil.getSourcePosition(it) } ?: return@computeInManagerThread null
|
it.frameProxy?.location()
|
||||||
val cl = it.frameProxy?.location()?.declaringType() ?: return@computeInManagerThread null
|
} ?: return null
|
||||||
sp to cl
|
|
||||||
}
|
|
||||||
|
|
||||||
val (sourcePosition, computedReferenceType) = result ?: return null
|
val sourcePosition = suspendContext.debugProcess.positionManager.getSourcePosition(location) ?: return null
|
||||||
|
val computedReferenceType = location.declaringType() ?: return null
|
||||||
|
|
||||||
val file = sourcePosition.file as? JetFile ?: return null
|
val file = sourcePosition.file as? JetFile ?: return null
|
||||||
|
|
||||||
@@ -68,8 +64,8 @@ public class KotlinSteppingCommandProvider: JvmSteppingCommandProvider() {
|
|||||||
val nextLine = sourcePosition.line + 2 /* +1 - because of locations are counted from 1 and +1 - because we want next line */
|
val nextLine = sourcePosition.line + 2 /* +1 - because of locations are counted from 1 and +1 - because we want next line */
|
||||||
|
|
||||||
for (lineNumber in nextLine..countOfLinesInFile) {
|
for (lineNumber in nextLine..countOfLinesInFile) {
|
||||||
val location = locations.firstOrNull { it.lineNumber() == lineNumber }
|
val locationAtLine = locations.firstOrNull { it.lineNumber() == lineNumber }
|
||||||
if (location != null) {
|
if (locationAtLine != null) {
|
||||||
val lineStartOffset = file.getLineStartOffset(lineNumber - 1) ?: continue
|
val lineStartOffset = file.getLineStartOffset(lineNumber - 1) ?: continue
|
||||||
if (inlinedArguments.any { it.textRange.contains(lineStartOffset) }) continue
|
if (inlinedArguments.any { it.textRange.contains(lineStartOffset) }) continue
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user