You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin中查找IrFunction所属的外围类?

在Kotlin IR中获取IrFunction所属的类

要找到IrFunction实例所属的类,核心是利用Kotlin IR的声明父节点链向上遍历——类成员函数的直接父节点通常就是它所属的IrClass,如果是局部嵌套函数,则需要递归查找。

直接获取(适用于非嵌套函数)

如果你的函数是类的直接成员(不是局部函数或嵌套在其他函数内),可以直接通过parent属性转换为IrClass:

val containingClass = yourIrFunction.parent as? IrClass

递归查找(通用方案)

如果函数可能嵌套在其他函数、初始化块等结构中,需要递归遍历父节点直到找到IrClass:

fun IrFunction.findContainingClass(): IrClass? {
    var currentNode = this.parent
    while (currentNode != null) {
        if (currentNode is IrClass) {
            return currentNode
        }
        // 仅声明类有父节点,继续向上遍历
        currentNode = (currentNode as? IrDeclaration)?.parent
    }
    return null
}

补充说明

  • IrFunction实现了IrDeclarationParent接口,同时本身也是IrDeclaration,父节点链是IR组织代码结构的核心逻辑。
  • 虽然IrFunction还实现了IrMemberWithContainerSource,但containerSource更多用于源码关联,获取所属类还是父节点链的方式更直接可靠。

内容的提问来源于stack exchange,提问作者Molly Tian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:50:32