Minor: do less work in debug thread during stepping commands for inline functions

This commit is contained in:
Natalia Ukhorskaya
2015-09-02 14:49:57 +03:00
parent 060b6e6b15
commit c836060f3a
@@ -17,7 +17,6 @@
package org.jetbrains.kotlin.idea.debugger.stepping
import com.intellij.debugger.SourcePosition
import com.intellij.debugger.engine.ContextUtil
import com.intellij.debugger.engine.DebugProcessImpl
import com.intellij.debugger.engine.SuspendContextImpl
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.xdebugger.impl.XSourcePositionImpl
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.analyzeFully
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.getLineStartOffset
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.psiUtil.endOffset
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
@@ -50,13 +47,12 @@ public class KotlinSteppingCommandProvider: JvmSteppingCommandProvider() {
): DebugProcessImpl.ResumeCommand? {
if (suspendContext == null) return null
val result: Pair<SourcePosition, ReferenceType>? = computeInManagerThread(suspendContext) {
val sp = runReadAction { ContextUtil.getSourcePosition(it) } ?: return@computeInManagerThread null
val cl = it.frameProxy?.location()?.declaringType() ?: return@computeInManagerThread null
sp to cl
}
val location = computeInManagerThread(suspendContext) {
it.frameProxy?.location()
} ?: return null
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
@@ -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 */
for (lineNumber in nextLine..countOfLinesInFile) {
val location = locations.firstOrNull { it.lineNumber() == lineNumber }
if (location != null) {
val locationAtLine = locations.firstOrNull { it.lineNumber() == lineNumber }
if (locationAtLine != null) {
val lineStartOffset = file.getLineStartOffset(lineNumber - 1) ?: continue
if (inlinedArguments.any { it.textRange.contains(lineStartOffset) }) continue