Giter VIP home page Giter VIP logo

kotlin-ir-printer's Introduction

Kotlin IR Printer

License: MIT Maven Central

Print transformed Kotlin IR into sources. Raw IR and two Kotlin like source code styles are supported.

Background

If you are interesting with the output of any compiler plugins, such as Jetpack Compose, you will definitely need this.

When we write the code as below:

@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    Text(
        text = "Hello $name!",
        modifier = modifier
    )
}

You may wonder what will happen to the function Greeting. You will most likely decompile the compiled classes back into Java sources, but that would be a mess.

With IR printer, you will get the Kotlin source code or raw IR structure directly from the Kotlin IR. So the corresponding output of Greeting will be:

@Composable
@ComposableTarget(applier = "androidx.compose.ui.UiComposable")
fun Greeting(name: String, modifier: Modifier?, $composer: Composer?, $changed: Int, $default: Int) {
    $composer = $composer.startRestartGroup(853713123)
    sourceInformation($composer, "C(Greeting)P(1)30@1094L70:MainActivity.kt#tztr8q")
    val $dirty = $changed
    if ($default and 0b0001 != 0) {
        $dirty = $dirty or 0b0110
    } else if ($changed and 0b1110 == 0) {
        $dirty = $dirty or if ($composer.changed(name)) 0b0100 else 0b0010
    }
    if ($default and 0b0010 != 0) {
        $dirty = $dirty or 0b00110000
    } else if ($changed and 0b01110000 == 0) {
        $dirty = $dirty or if ($composer.changed(modifier)) 0b00100000 else 0b00010000
    }
    if ($dirty and 0b01011011 != 0b00010010 || !$composer.skipping) {
        if ($default and 0b0010 != 0) {
            modifier = Companion
        }
        if (isTraceInProgress()) {
            traceEventStart(853713123, $dirty, -1, "com.bennyhuo.kotlin.printer.sample.Greeting (MainActivity.kt:29)")
        }
        Text("Hello $name!", modifier, <unsafe-coerce>(0L), <unsafe-coerce>(0L), null, null, null, <unsafe-coerce>(0L), null, null, <unsafe-coerce>(0L), <unsafe-coerce>(0), false, 0, 0, null, null, $composer, 0b01110000 and $dirty, 0, 131068)
        if (isTraceInProgress()) {
            traceEventEnd()
        }
    } else {
        $composer.skipToGroupEnd()
    }
    $composer.endRestartGroup()?.updateScope { $composer: Composer?, $force: Int ->
        Greeting(name, modifier, $composer, updateChangedFlags($changed or 0b0001), $default)
    }
}

The output file will be located in $buildDir/outputs/kotlin/ir be default and can be customized via the gradle extensions.

Try it

Configure the repos:

settings.gradle.kts

pluginManagement {
    repositories {
        mavenCentral()
        // for snapshots
        maven("https://s01.oss.sonatype.org/content/repositories/snapshots")
    }
}

dependencyResolutionManagement {
    repositories {
        mavenCentral()
        // for snapshots
        maven("https://s01.oss.sonatype.org/content/repositories/snapshots")
    }
}

Apply the plugin:

build.gradle.kts

plugins {
    ...
    // Make sure to apply it in the last.
    id("com.bennyhuo.kotlin.ir.printer") version "<latest-version>"
}

irPrinter {
    isEnabled = true // default: true
    indent = "    " //  default: "  "
    outputDir = "/path/to/output" // default: <project>/build/outputs/kotlin/ir
    outputType = OutputType.KOTLIN_LIKE_JETPACK_COMPOSE_STYLE
}

And then, just compile the code:

./gradlew compileKotlin

for Android project:

./gradlew :app:compileDebugKotlin

Change Log

See releases.

License

MIT License

Copyright (c) 2024 Bennyhuo

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

kotlin-ir-printer's People

Contributors

bennyhuo avatar

Stargazers

xiaofei avatar  avatar 昌柏智 avatar  avatar Ting Sun avatar  avatar Merab Tato Kutalia avatar Takahiro Menju avatar Seiko avatar lt avatar Mine avatar Zhan TY avatar Ferb2012 avatar GuanJun avatar Lowae avatar panpf avatar  avatar J avatar Binlly avatar ForteScarlet avatar QuincySx avatar LittleLoli avatar 夜白 avatar  avatar Arlena Hodkiewicz avatar  avatar

Watchers

 avatar  avatar

kotlin-ir-printer's Issues

IR lowering failed enum class

java.lang.Exception: IR lowering failed at: Main.kt
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitFile(JcIrSourcePrinter.kt:1546)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid$DefaultImpls.visitFile(IrElementVisitorVoid.kt:198)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitFile(JcIrSourcePrinter.kt:141)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitFile(JcIrSourcePrinter.kt:141)
	at org.jetbrains.kotlin.ir.declarations.IrFile.accept(IrFile.kt:31)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinterKt.dumpSrc(JcIrSourcePrinter.kt:125)
	at com.bennyhuo.kotlin.ir.printer.compiler.IrSourcePrinterExtension.generate(IrPrinterIrGenerationExtension.kt:36)
	at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.convertToIr$lambda$1(JvmIrCodegenFactory.kt:225)
	at org.jetbrains.kotlin.psi2ir.Psi2IrTranslator.generateModuleFragment(Psi2IrTranslator.kt:107)
	at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.convertToIr(JvmIrCodegenFactory.kt:255)
	at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.convertToIr(JvmIrCodegenFactory.kt:59)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.convertToIr(KotlinToJVMBytecodeCompiler.kt:224)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:101)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli$default(KotlinToJVMBytecodeCompiler.kt:43)
	at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:165)
	at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:50)
	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:104)
	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:48)
	at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
	at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:463)
	at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:62)
	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.doCompile(IncrementalCompilerRunner.kt:477)
	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:400)
	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileNonIncrementally(IncrementalCompilerRunner.kt:281)
	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:125)
	at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:657)
	at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:105)
	at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1624)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360)
	at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
	at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:714)
	at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:598)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:844)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:721)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:720)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.IllegalStateException: Synthetic body contains no statements: IrSyntheticBodyImpl(ENUM_VALUES)
	at org.jetbrains.kotlin.ir.util.IrUtilsKt.getStatements(IrUtils.kt:281)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.printBody(JcIrSourcePrinter.kt:261)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitSimpleFunction(JcIrSourcePrinter.kt:256)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid$DefaultImpls.visitSimpleFunction(IrElementVisitorVoid.kt:173)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitSimpleFunction(JcIrSourcePrinter.kt:141)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitSimpleFunction(JcIrSourcePrinter.kt:141)
	at org.jetbrains.kotlin.ir.declarations.IrSimpleFunction.accept(IrSimpleFunction.kt:37)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.print(JcIrSourcePrinter.kt:148)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.printJoin(JcIrSourcePrinter.kt:171)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitClass(JcIrSourcePrinter.kt:1146)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid$DefaultImpls.visitClass(IrElementVisitorVoid.kt:111)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitClass(JcIrSourcePrinter.kt:141)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitClass(JcIrSourcePrinter.kt:141)
	at org.jetbrains.kotlin.ir.declarations.IrClass.accept(IrClass.kt:73)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.print(JcIrSourcePrinter.kt:148)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.printJoin(JcIrSourcePrinter.kt:171)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitFile(JcIrSourcePrinter.kt:192)
	... 42 more

复现代码

enum class LRC

outputs\kotlin\ir 文件夹没有自动创建

java.lang.IllegalStateException: Directory does not exist: D:\AndroidApplication\MyApp\app\build\outputs\kotlin\ir
at org.jetbrains.kotlin.incremental.FileUtilsKt.deleteDirectoryContents(fileUtils.kt:40)
at com.bennyhuo.kotlin.ir.printer.compiler.IrSourcePrinterExtension.generate(IrPrinterIrGenerationExtension.kt:28)

IR lowering failed

irPrinter {
isEnabled = true
indent = " "
outputType = OutputType.KOTLIN_LIKE_JETPACK_COMPOSE_STYLE
}

java.lang.Exception: IR lowering failed at: LyricBean.kt
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitFile(JcIrSourcePrinter.kt:1541)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid$DefaultImpls.visitFile(IrElementVisitorVoid.kt:198)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitFile(JcIrSourcePrinter.kt:141)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitFile(JcIrSourcePrinter.kt:141)
	at org.jetbrains.kotlin.ir.declarations.IrFile.accept(IrFile.kt:31)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinterKt.dumpSrc(JcIrSourcePrinter.kt:125)
	at com.bennyhuo.kotlin.ir.printer.compiler.IrSourcePrinterExtension.generate(IrPrinterIrGenerationExtension.kt:36)
	at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.convertToIr$lambda$1(JvmIrCodegenFactory.kt:225)
	at org.jetbrains.kotlin.psi2ir.Psi2IrTranslator.generateModuleFragment(Psi2IrTranslator.kt:107)
	at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.convertToIr(JvmIrCodegenFactory.kt:255)
	at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.convertToIr(JvmIrCodegenFactory.kt:59)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.convertToIr(KotlinToJVMBytecodeCompiler.kt:224)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:101)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli$default(KotlinToJVMBytecodeCompiler.kt:43)
	at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:165)
	at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:50)
	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:104)
	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:48)
	at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
	at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:463)
	at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:62)
	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.doCompile(IncrementalCompilerRunner.kt:477)
	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:400)
	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileNonIncrementally(IncrementalCompilerRunner.kt:281)
	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:125)
	at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:657)
	at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:105)
	at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1624)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360)
	at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
	at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
	at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.IllegalStateException: Unhandled operator dataClassArrayMemberToString
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitCall(JcIrSourcePrinter.kt:348)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid$DefaultImpls.visitCall(IrElementVisitorVoid.kt:299)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitCall(JcIrSourcePrinter.kt:141)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitCall(JcIrSourcePrinter.kt:141)
	at org.jetbrains.kotlin.ir.expressions.IrCall.accept(IrCall.kt:26)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.print(JcIrSourcePrinter.kt:148)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitStringConcatenation(JcIrSourcePrinter.kt:674)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid$DefaultImpls.visitStringConcatenation(IrElementVisitorVoid.kt:452)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitStringConcatenation(JcIrSourcePrinter.kt:141)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitStringConcatenation(JcIrSourcePrinter.kt:141)
	at org.jetbrains.kotlin.ir.expressions.IrStringConcatenation.accept(IrStringConcatenation.kt:24)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.print(JcIrSourcePrinter.kt:148)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitReturn(JcIrSourcePrinter.kt:809)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid$DefaultImpls.visitReturn(IrElementVisitorVoid.kt:447)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitReturn(JcIrSourcePrinter.kt:141)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitReturn(JcIrSourcePrinter.kt:141)
	at org.jetbrains.kotlin.ir.expressions.IrReturn.accept(IrReturn.kt:26)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.print(JcIrSourcePrinter.kt:148)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.printJoin(JcIrSourcePrinter.kt:171)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitBlockBody(JcIrSourcePrinter.kt:1063)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid$DefaultImpls.visitBlockBody(IrElementVisitorVoid.kt:216)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitBlockBody(JcIrSourcePrinter.kt:141)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitBlockBody(JcIrSourcePrinter.kt:141)
	at org.jetbrains.kotlin.ir.expressions.IrBlockBody.accept(IrBlockBody.kt:25)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.print(JcIrSourcePrinter.kt:148)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.printBody(JcIrSourcePrinter.kt:265)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitSimpleFunction(JcIrSourcePrinter.kt:256)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid$DefaultImpls.visitSimpleFunction(IrElementVisitorVoid.kt:173)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitSimpleFunction(JcIrSourcePrinter.kt:141)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitSimpleFunction(JcIrSourcePrinter.kt:141)
	at org.jetbrains.kotlin.ir.declarations.IrSimpleFunction.accept(IrSimpleFunction.kt:37)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.print(JcIrSourcePrinter.kt:148)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.printJoin(JcIrSourcePrinter.kt:171)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitClass(JcIrSourcePrinter.kt:1141)
	at org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid$DefaultImpls.visitClass(IrElementVisitorVoid.kt:111)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitClass(JcIrSourcePrinter.kt:141)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitClass(JcIrSourcePrinter.kt:141)
	at org.jetbrains.kotlin.ir.declarations.IrClass.accept(IrClass.kt:73)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.print(JcIrSourcePrinter.kt:148)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.printJoin(JcIrSourcePrinter.kt:171)
	at com.bennyhuo.kotlin.ir.printer.compiler.output.JcIrSourcePrinter.visitFile(JcIrSourcePrinter.kt:192)
	... 44 more

可能是反编译器有点问题,KOTLIN_LIKE,RAW_IR没问题可以正常生成
我的代码 LyricBean.kt

package com.cnl.kikoeru.data.bean

import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.cnl.kikoeru.utils.newString
import java.nio.charset.Charset

@Entity
data class LyricBean(
    @PrimaryKey(autoGenerate = true)
    val id: Int = 0,
    val rj: Long,                   // 12345 逐步弃用
    @ColumnInfo(defaultValue = "")
    val sourceId: String,           // RJxx BJxx VJxx
    val nameBin: ByteArray,
    var nameEnc: String? = null,
    val lyricBin: ByteArray,
    var lyricEnc: String? = null,
    val duration: Long = 0,
    val documentUri: String,        // content://xxx
    @ColumnInfo(defaultValue = "")
    val zipInnerPath: String = ""   // /a/b/xxx.zip \n /c/d/e.lrc
) {
    val name by lazy {
        nameBin.newString(Charset.forName(nameEnc ?: Charsets.UTF_8.name()))
            .substringAfterLast('/')
    }
    val lyric by lazy { lyricBin.newString(Charset.forName(lyricEnc ?: Charsets.UTF_8.name())) }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.