From 403ca00a63b62950aba82a9485f7c6c018184853 Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Fri, 22 May 2015 16:14:30 +0300 Subject: [PATCH] Fix exception: for inline functions in stdlib we calculate classname by declaration --- .../idea/debugger/JetPositionManager.kt | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/JetPositionManager.kt b/idea/src/org/jetbrains/kotlin/idea/debugger/JetPositionManager.kt index 073b0073c55..09d056f084a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/JetPositionManager.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/JetPositionManager.kt @@ -321,7 +321,7 @@ public class JetPositionManager(private val myDebugProcess: DebugProcess) : Mult if (parent is JetObjectDeclaration && parent.isCompanion()) { return PositionedElement(getInternalClassNameForElement(parent.getParent(), typeMapper, file, isInLibrary).className, parent) } - return getInternalClassNameForElement(element, typeMapper, file, isInLibrary) + return getInternalClassNameForElement(element.getParent(), typeMapper, file, isInLibrary) } element is JetProperty && (!element.isTopLevel() || !isInLibrary) -> { if (isInPropertyAccessor(notPositionedElement)) { @@ -343,7 +343,7 @@ public class JetPositionManager(private val myDebugProcess: DebugProcess) : Mult return getInternalClassNameForElement(element.getParent(), typeMapper, file, isInLibrary) } - val parent = getElementToCalculateClassName(element) + val parent = getElementToCalculateClassName(element.getParent()) if (parent is JetClassOrObject) { return PositionedElement(getJvmInternalNameForImpl(typeMapper, parent), element) } @@ -369,13 +369,18 @@ public class JetPositionManager(private val myDebugProcess: DebugProcess) : Mult return PositionedElement(PackagePartClassUtils.getPackagePartInternalName(file), element) } - private fun getElementToCalculateClassName(notPositionedElement: PsiElement?): JetElement? = - PsiTreeUtil.getParentOfType(notPositionedElement, - javaClass(), - javaClass(), - javaClass(), - javaClass(), - javaClass()) + private val TYPES_TO_CALCULATE_CLASSNAME: Array> = + arrayOf(javaClass(), + javaClass(), + javaClass(), + javaClass(), + javaClass()) + + private fun getElementToCalculateClassName(notPositionedElement: PsiElement?): JetElement? { + if (notPositionedElement?.javaClass in TYPES_TO_CALCULATE_CLASSNAME ) return notPositionedElement as JetElement + + return PsiTreeUtil.getParentOfType(notPositionedElement, *TYPES_TO_CALCULATE_CLASSNAME) + } public fun getJvmInternalNameForPropertyOwner(typeMapper: JetTypeMapper, descriptor: PropertyDescriptor): String { return typeMapper.mapOwner(