diff --git a/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/DebuggerClassNameProvider.kt b/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/DebuggerClassNameProvider.kt index 90dd6bfa23f..2e1681a3d4e 100644 --- a/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/DebuggerClassNameProvider.kt +++ b/idea/jvm-debugger/jvm-debugger-core/src/org/jetbrains/kotlin/idea/debugger/DebuggerClassNameProvider.kt @@ -24,7 +24,6 @@ import com.intellij.psi.util.PsiTreeUtil import com.sun.jdi.AbsentInformationException import com.sun.jdi.ObjectCollectedException import com.sun.jdi.ReferenceType -import org.jetbrains.kotlin.codegen.binding.CodegenBinding.asmTypeForAnonymousClass import org.jetbrains.kotlin.codegen.binding.CodegenBinding.asmTypeForAnonymousClassOrNull import org.jetbrains.kotlin.descriptors.ScriptDescriptor import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil @@ -222,15 +221,19 @@ class DebuggerClassNameProvider( is KtFunctionLiteral -> { val typeMapper = KotlinDebuggerCaches.getOrCreateTypeMapper(element) - val nonInlinedLambdaClassName = runReadAction { - asmTypeForAnonymousClass(typeMapper.bindingContext, element).internalName.toJdiName() + val names = runReadAction { + val name = asmTypeForAnonymousClassOrNull(typeMapper.bindingContext, element)?.internalName?.toJdiName() + if (name != null) Cached(name) else EMPTY } - if (!alwaysReturnLambdaParentClass && !InlineUtil.isInlinedArgument(element, typeMapper.bindingContext, true)) { - return Cached(nonInlinedLambdaClassName) + if (!names.isEmpty() + && !alwaysReturnLambdaParentClass + && !InlineUtil.isInlinedArgument(element, typeMapper.bindingContext, true) + ) { + return names } - Cached(nonInlinedLambdaClassName) + getOuterClassNamesForElement(element.relevantParentInReadAction) + names + getOuterClassNamesForElement(element.relevantParentInReadAction) } else -> getOuterClassNamesForElement(element.relevantParentInReadAction) } diff --git a/idea/jvm-debugger/jvm-debugger-util/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinDebuggerCaches.kt b/idea/jvm-debugger/jvm-debugger-util/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinDebuggerCaches.kt index a08241da9c2..dfdbdc847e1 100644 --- a/idea/jvm-debugger/jvm-debugger-util/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinDebuggerCaches.kt +++ b/idea/jvm-debugger/jvm-debugger-util/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinDebuggerCaches.kt @@ -229,6 +229,8 @@ class KotlinDebuggerCaches(project: Project) { fun NonCached(classNames: List) = ComputedClassNames(classNames, false) } + fun isEmpty() = classNames.isEmpty() + fun distinct() = ComputedClassNames(classNames.distinct(), shouldBeCached) operator fun plus(other: ComputedClassNames) = ComputedClassNames(