2020 年研究源码时,IDEA 中有些类可以看到方法体,有些却只有:
/* compiled code */
检查插件列表时发现两个名称相近的条目:Java Bytecode Decompiler 和 Java Decompiler Intellij Plugin。当时禁用后者、重启 IDE 后,有问题的文件恢复了反编译显示。
先看当前打开的是源码还是 class
有匹配版本源码包时,应优先查看源码;没有源码才涉及反编译。源码附件版本错误、文件类型识别或打开方式,也可能让看到的内容与预期不同。
反编译结果是从字节码重建的表示,并不等同于原始源码,注释、变量名或部分结构可能无法恢复。
对同一个文件做插件对照
可以先记录 IDE 版本、插件名称、ID 和版本,以及同一个 class 文件的状态,再禁用一个可疑的非必要插件,按提示重启后比较。修改前记录原状态,出现其他问题时恢复。
不要仅靠名称判断哪个是内置插件,也不要因为两项名字相近就全部删除。这次经历支持的是“插件组合值得检查”,没有证明所有 compiled code 占位都来自同一冲突。
仍失败时看更具体的信息
查看 IDE 的反编译错误日志,确认是否只影响特定字节码版本或特定文件,并对照相同文件在受支持环境中的表现。若需要报告问题,只提供可公开的最小样本和脱敏日志。
调整插件后显示恢复是结果;找到准确插件身份和失败条件,才更容易避免下一次升级后重复出现。