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代码。
- 在intellij中将kotlinx-html-js添加到kotlin / js项目中
- Docs for Spring告诉我,myRepository.findOne(Id id)返回实体,如果没有find,则返回null,但IntelliJ说不同
- 如何调试Kotlin序列/集合
- 使Intellij Idea插件与Kotlin文件一起工作
- 是否可以在Android Studio中将我的Kotlin文件移动到单独的包(源types)中?
- 尝试在IntelliJ IDEA中运行Kotlin脚本
- IntelliJ错误:构建过程exception终止
- 用父类的实例属性初始化子类Kotlin类的快速方法
- Intellij IDEA中Kotlin项目的自动完成和代码分析非常慢