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

如何在Kotlin K2编译器插件中使用HtmlFirDump?

导出FIR结构的示例(使用HtmlFirDump)

1. 核心Dump代码

在K2编译器插件中,你可以通过HtmlFirDump直接导出FIR元素的结构化HTML文件,以下是最简实现:

import org.jetbrains.kotlin.fir.dump.HtmlFirDump
import org.jetbrains.kotlin.fir.dump.HtmlFirDumpConfiguration
import java.io.File

/**
 * 导出单个FIR文件的结构到HTML
 * @param firFile 要分析的FIR文件节点
 * @param outputDir 输出目录路径
 */
fun dumpFirStructure(firFile: org.jetbrains.kotlin.fir.declarations.FirFile, outputDir: String) {
    // 配置Dump内容:可按需开启/关闭源码、描述符、属性显示
    val dumpConfig = HtmlFirDumpConfiguration(
        showSourceCode = true,
        showDescriptors = true,
        showAttributes = true
    )
    val htmlDump = HtmlFirDump(dumpConfig)
    val outputFile = File(outputDir, "${firFile.name}.fir.html")
    
    // 创建输出目录(如果不存在)
    outputFile.parentFile.mkdirs()
    
    // 执行Dump并写入文件
    htmlDump.dumpElement(firFile, outputFile.outputStream())
}

2. 在插件中触发Dump

通过FirAnalysisHandlerExtension在编译分析阶段注入Dump逻辑,遍历所有处理的FIR文件:

import org.jetbrains.kotlin.fir.analysis.extensions.FirAnalysisHandlerExtension
import org.jetbrains.kotlin.fir.declarations.FirFile

class FirDumpAnalysisExtension : FirAnalysisHandlerExtension() {
    override fun runAnalysis(files: List<FirFile>) {
        super.runAnalysis(files)
        val outputDir = "./fir-structure-dumps" // 自定义输出路径
        
        files.forEach { firFile ->
            // 可添加过滤逻辑,比如只Dump特定包/类
            if (firFile.packageName.asString().startsWith("com.your.package")) {
                dumpFirStructure(firFile, outputDir)
            }
        }
    }
}

3. 注册插件扩展

将上述分析扩展注册到编译器插件中:

import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
import org.jetbrains.kotlin.config.CompilerConfiguration

class FirDumpPluginRegistrar : CompilerPluginRegistrar() {
    override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
        FirAnalysisHandlerExtension.registerExtension(FirDumpAnalysisExtension())
    }
}

注意事项

  • HtmlFirDump属于Kotlin编译器内部API,版本兼容性需与插件依赖的Kotlin版本保持一致;
  • 调试完成后建议移除Dump代码,避免额外的编译性能开销;
  • 生成的HTML文件可直接在浏览器中打开,查看FIR节点的层级结构、关联源码及属性详情。

内容的提问来源于stack exchange,提问作者Todd O'Bryan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:40:15