IntelliJ 是否一直在编译,因为它在出现错误时用红色波浪线告诉我? (除了自动完成功能)还是在进行某种伪编译?
如果它在进行合法编译,那么它会将这些编译后的类放在哪里?我想将我的 JRebel 指向该目录而不是单个模块目标文件夹。
最佳答案
Meo 是对的,根据我在为自定义语言开发插件时学到的知识,IntelliJ 不会编译任何东西,直到你明确地创建你的项目。在您键入时,其词法分析器/解析器会检测到任何无效的标记或代码构造。同时,它维护项目中每个类和方法的索引及其依赖项,以及它们的签名等。
停止输入后,您会在右侧排水沟的顶部看到一个彩色的小眼睛。它表示 IDE 正在运行“注释器”和“代码检查”。他们能够根据当前索引和文件的当前状态(导入、声明等)判断类、方法和变量是否有效。未使用的变量、方法调用中的无效参数等也是如此。
优点:
- 注释者直接在他们所谓的 PSI 树上工作,这基本上是代表您当前文件的增强型 AST
- 每次都编译可能会更快(它使用了一个索引,不需要每个依赖类都重新编译)
- 注释器可以检测事物
javac
不关心,例如潜在的错误(例如在=
条件下使用==
而不是while
)
缺点:
- 工作量太大了,基本上他们需要重写逻辑来找出
javac
的每一个错误可以产生(这就是为什么你可以在他们的错误跟踪器上找到许多标记为“good code is red”或“错误代码是绿色”的问题,这意味着他们检测到的内容与编译器输出的内容之间存在差异)
TL;DR:它不会产生任何 .class
在您完成项目之前,一切都是“手工”完成的
关于java - IntelliJ 在输入期间编译时将 .class 文件放在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25045621/