Kotlin Decompiler 生成错误代码 - 是否可以预防?

Kotlin Decompiler generates erroneous code - Is it possible to prevent?

class CheckInventory(target: Target) : Command(target) {

}

使用 IntelliJ 的“Show Kotlin bytecode”选项反编译上述 Kotlin 代码时,它会在 super() 调用上方生成一条语句:

class CheckInventory extends Command {
    public CheckInventory(Target target) {
        Intrinsic.checkParameterIsNotNull(target, "target");
        super(target); //error, must be first call
    }
}

还有一些其他问题,例如使用 WhenMapping 的访问修饰符生成顶级 类:

public class MyClass {

}

public final class MyClass$WhenMappings { //error, shouldn't be public

}

我检查了 Kotlin 和 IntelliJ 的更新,我都使用了最新版本。

起初我认为这可能与编写糟糕的 Kotlin 代码有关,但即使是最简单的代码文件似乎也需要某种 check/generation,这在 Java 中是非法的。

问题

有什么方法可以确保反编译过程保持在 Java 语言规则的范围内?

没有。 IntelliJ IDEA 中的 Java 反编译器专为反编译 Java 源代码而设计。 Kotlin 编译器从 Java 编译器生成不同的字节码模式,因此 Java 反编译器并不总是生成有效 Java 代码的输出。