看看this question吧。当你打开启用了scala插件的.class文件(Intellij Idea)时,它会显示scala代码,但当它关闭时,java反编译插件会显示一个反编译的java代码。请注意,即使启用了javac插件,由scala编译的.class文件也会进行反编译。这意味着scala插件会“查看”类文件中的一些标记,并截取文件内容显示。
它实际使用的标记是什么?有没有办法打开.class文件并更改编译器(和/或)其他信息,使这些类看起来像是由javac编译的
发布于 2018-01-19 18:01:25
每个类文件都可以有一个包含源代码文件名称的SourceFile attribute。因为这是一个任意的字符串,所以它与约定有关,例如对于Java源代码,它通常只包含文件名,而不包含任何特定于包的目录。
因此,仍然有一些信息的解释,例如,如果指定的名称以.java结尾,集成开发环境必须在已知的源代码树中查找与实际包匹配的子目录中的匹配文件。
确定源文件不是Java就像认识到它具有不同的文件名结尾一样简单,然后,如果已经安装了知道特定语言的插件,则可以使用用于特定语言的任何约定。否则,大多数IDE将简单地查找任何具有该名称的文本文件并显示它。可能有LineNumberTable attributes,它告诉字节码指令如何映射到源代码行号,允许调试器在不理解源代码语法的情况下单步执行代码。我已经用这种方式逐步介绍了从XSLT文件编译的代码。
当然,指定的源代码文件名的模式也可以用来决定在没有找到源文件时使用哪个反编译器。
发布于 2018-01-19 15:24:22
Intellij想法
Intellij IDEA (假设你的问题是关于这个IDE),只需找出二进制文件是从哪个源文件编译的,然后显示相应的源代码。
它不会从二进制文件中提取或产生源代码。它只能找到给定二进制文件的源代码。您可以通过匹配文件名和路径来完成此操作。不过,Intellij可能做得更多。
总体而言
一般来说,几乎可以肯定的是,没有一个好的反编译器可以从类文件生成Scala源代码。而且源代码没有嵌入,所以您所能做的就是尝试将源代码文件与二进制文件进行匹配。
从反编译中获得的Java代码是在IDE找不到相应的源文件时显示的代码。
https://stackoverflow.com/questions/48335274
复制相似问题