Kotlin反编译器生成错误的代码 - 有没有可能防止?

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

}

使用 IntelliJ 的“显示 Kotlin 字节码”选项反编译上述 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 代码写得不好有关,但即使是最简单的代码文件似乎也需要某种检查/生成,在 Java 中是非法的。
问题:是否有办法确保反编译过程遵守 Java 语言规则的限制?
1个回答

9

不行。IntelliJ IDEA中的Java反编译器是用于反编译Java源代码的。Kotlin编译器生成的字节码模式与Java编译器不同,因此Java反编译器并不总是会产生有效的Java代码输出。


5
请注意,这不仅仅是一个糟糕的反编译器的问题——涉及的字节码在没有以某种方式影响语义的情况下转换为有效的Java代码是不可能的。 - undefined
嗨,已经过去了5年。有什么进展吗? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接