【问题标题】:Kotlin Decompiler generates erroneous code - Is it possible to prevent?Kotlin Decompiler 生成错误代码 - 是否可以防止?
【发布时间】:2017-03-28 16:41:46
【问题描述】:
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 语言规则的范围内?

【问题讨论】:

    标签: java intellij-idea kotlin bytecode decompiling


    【解决方案1】:

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

    【讨论】:

    • 另外请注意,这不仅仅是一个糟糕的反编译器的问题——有问题的字节码实际上不可能在不以某种方式影响语义的情况下转化为有效的 Java。
    • 嗨,5 年过去了。有进展吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2017-05-31
    • 1970-01-01
    • 2023-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多