Fix exception: for inline functions in stdlib we calculate classname by declaration

This commit is contained in:
Natalia Ukhorskaya
2015-05-22 16:14:30 +03:00
parent 5d9daf3890
commit 403ca00a63
@@ -321,7 +321,7 @@ public class JetPositionManager(private val myDebugProcess: DebugProcess) : Mult
if (parent is JetObjectDeclaration && parent.isCompanion()) { if (parent is JetObjectDeclaration && parent.isCompanion()) {
return PositionedElement(getInternalClassNameForElement(parent.getParent(), typeMapper, file, isInLibrary).className, parent) 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) -> { element is JetProperty && (!element.isTopLevel() || !isInLibrary) -> {
if (isInPropertyAccessor(notPositionedElement)) { if (isInPropertyAccessor(notPositionedElement)) {
@@ -343,7 +343,7 @@ public class JetPositionManager(private val myDebugProcess: DebugProcess) : Mult
return getInternalClassNameForElement(element.getParent(), typeMapper, file, isInLibrary) return getInternalClassNameForElement(element.getParent(), typeMapper, file, isInLibrary)
} }
val parent = getElementToCalculateClassName(element) val parent = getElementToCalculateClassName(element.getParent())
if (parent is JetClassOrObject) { if (parent is JetClassOrObject) {
return PositionedElement(getJvmInternalNameForImpl(typeMapper, parent), element) return PositionedElement(getJvmInternalNameForImpl(typeMapper, parent), element)
} }
@@ -369,13 +369,18 @@ public class JetPositionManager(private val myDebugProcess: DebugProcess) : Mult
return PositionedElement(PackagePartClassUtils.getPackagePartInternalName(file), element) return PositionedElement(PackagePartClassUtils.getPackagePartInternalName(file), element)
} }
private fun getElementToCalculateClassName(notPositionedElement: PsiElement?): JetElement? = private val TYPES_TO_CALCULATE_CLASSNAME: Array<Class<out JetElement>> =
PsiTreeUtil.getParentOfType(notPositionedElement, arrayOf(javaClass<JetClassOrObject>(),
javaClass<JetClassOrObject>(), javaClass<JetFunctionLiteral>(),
javaClass<JetFunctionLiteral>(), javaClass<JetNamedFunction>(),
javaClass<JetNamedFunction>(), javaClass<JetProperty>(),
javaClass<JetProperty>(), javaClass<JetClassInitializer>())
javaClass<JetClassInitializer>())
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 { public fun getJvmInternalNameForPropertyOwner(typeMapper: JetTypeMapper, descriptor: PropertyDescriptor): String {
return typeMapper.mapOwner( return typeMapper.mapOwner(