FIR: Properly support local functions in DEBUG_INFO_CALL

This commit is contained in:
Denis Zharkov
2020-04-15 18:32:43 +03:00
parent fa3b3e7a9a
commit 65e444a39c
5 changed files with 52 additions and 7 deletions
@@ -10,7 +10,17 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
// NB: with className == null we are at top level
data class CallableId(val packageName: FqName, val className: FqName?, val callableName: Name) {
data class CallableId(
val packageName: FqName,
val className: FqName?,
val callableName: Name,
val pathToLocal: FqName? = null
) {
private companion object {
val LOCAL_NAME = Name.special("<local>")
val PACKAGE_FQ_NAME_FOR_LOCAL = FqName.topLevel(LOCAL_NAME)
}
var classId: ClassId? = null
get() {
if (field == null && className != null) {
@@ -26,9 +36,19 @@ data class CallableId(val packageName: FqName, val className: FqName?, val calla
constructor(packageName: FqName, callableName: Name) : this(packageName, null, callableName)
@Deprecated("TODO: Better solution for local callables?")
constructor(callableName: Name) : this(FqName.topLevel(Name.special("<local>")), null, callableName)
constructor(
callableName: Name,
pathToLocal: FqName? = null
) : this(
PACKAGE_FQ_NAME_FOR_LOCAL,
className = null,
callableName,
pathToLocal,
)
fun asFqNameForDebugInfo(): FqName {
if (pathToLocal != null) return pathToLocal.child(callableName)
fun asFqName(): FqName {
if (className == null) return packageName.child(callableName)
return classId!!.asSingleFqName().child(callableName)
}