From a1e5ce2c8bfe0fe8d5d8a32e779b3573ef072b7c Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Wed, 6 Mar 2019 19:57:27 +0300 Subject: [PATCH] Don't activate Kotlin async stack trace provider in Java sources (KT-30318) --- .../KotlinCoroutinesAsyncStackTraceProvider.kt | 3 +++ .../kotlin/idea/debugger/KotlinPositionManager.kt | 6 +----- .../org/jetbrains/kotlin/idea/debugger/debuggerUtil.kt | 10 ++++++++++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinCoroutinesAsyncStackTraceProvider.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinCoroutinesAsyncStackTraceProvider.kt index a8a016865e3..6400ab2df07 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinCoroutinesAsyncStackTraceProvider.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinCoroutinesAsyncStackTraceProvider.kt @@ -65,6 +65,9 @@ class KotlinCoroutinesAsyncStackTraceProvider : KotlinCoroutinesAsyncStackTraceP fun getAsyncStackTrace(frameProxy: StackFrameProxyImpl, suspendContext: SuspendContextImpl): List? { val location = frameProxy.location() + if (!location.isInKotlinSources()) { + return null + } val method = location.safeMethod() ?: return null val currentThread = frameProxy.threadProxy().threadReference if (currentThread == null || !currentThread.isSuspended || !currentThread.isAtBreakpoint) { diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinPositionManager.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinPositionManager.kt index 1c15e3df5ec..9b099406a7f 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinPositionManager.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinPositionManager.kt @@ -91,9 +91,7 @@ class KotlinPositionManager(private val myDebugProcess: DebugProcess) : MultiReq } override fun createStackFrame(frame: StackFrameProxyImpl, debugProcess: DebugProcessImpl, location: Location): XStackFrame? { - val declaringType = location.declaringType() - val fileExtension = declaringType.safeSourceName()?.toLowerCase()?.substringAfterLast('.') ?: "" - if (fileExtension in KotlinFileTypeFactory.KOTLIN_EXTENSIONS || declaringType.containsKotlinStrata()) { + if (location.isInKotlinSources()) { return KotlinStackFrame(frame) } return null @@ -354,8 +352,6 @@ class KotlinPositionManager(private val myDebugProcess: DebugProcess) : MultiReq } }) } - - private fun ReferenceType.containsKotlinStrata() = availableStrata().contains(KOTLIN_STRATA_NAME) } inline fun U.readAction(crossinline f: (U) -> V): V { diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/debuggerUtil.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/debuggerUtil.kt index 7b72312cd10..5c0583fb855 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/debuggerUtil.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/debuggerUtil.kt @@ -17,6 +17,8 @@ import org.jetbrains.kotlin.codegen.binding.CodegenBinding.asmTypeForAnonymousCl import org.jetbrains.kotlin.codegen.coroutines.DO_RESUME_METHOD_NAME import org.jetbrains.kotlin.codegen.coroutines.INVOKE_SUSPEND_METHOD_NAME import org.jetbrains.kotlin.codegen.coroutines.continuationAsmTypes +import org.jetbrains.kotlin.codegen.inline.KOTLIN_STRATA_NAME +import org.jetbrains.kotlin.idea.KotlinFileTypeFactory import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils import org.jetbrains.kotlin.idea.debugger.evaluate.KotlinDebuggerCaches import org.jetbrains.kotlin.idea.refactoring.getLineEndOffset @@ -30,6 +32,14 @@ import org.jetbrains.kotlin.resolve.inline.InlineUtil import org.jetbrains.org.objectweb.asm.Type as AsmType import java.util.* +fun Location.isInKotlinSources(): Boolean { + val declaringType = declaringType() + val fileExtension = declaringType.safeSourceName()?.substringAfterLast('.')?.toLowerCase() ?: "" + return fileExtension in KotlinFileTypeFactory.KOTLIN_EXTENSIONS || declaringType.containsKotlinStrata() +} + +fun ReferenceType.containsKotlinStrata() = availableStrata().contains(KOTLIN_STRATA_NAME) + fun isInsideInlineArgument( inlineArgument: KtFunction, location: Location,