Kotlin Decompiler生成错误的代码 – 是否有可能防止?
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 } }
还有其他一些问题,如使用访问修饰符生成顶级类的时候:
public class MyClass { } public final class MyClass$WhenMappings { //error, shouldn't be public }
我检查了Kotlin和IntelliJ更新,我正在使用最新版本。
起初,我认为这可能与编写不好的Kotlin代码有关,但即使是最简单的代码文件似乎也需要某种在Java中非法的检查/生成。
题
有什么方法可以确保反编译过程保持在Java语言规则的范围之内吗?
不可以。IntelliJ IDEA中的Java反编译器专门用于反编译Java源代码。 Kotlin编译器从Java编译器生成不同的字节码模式,所以Java反编译器并不总是生成有效的Java代码。