IDE是否编译Java或Scala源代码以提供静态分析?

IDE是否编译Java或Scala源代码以提供静态分析?,java,eclipse,scala,intellij-idea,static-analysis,Java,Eclipse,Scala,Intellij Idea,Static Analysis,IDE提供了很多很酷的特性,比如跳转到声明和语法突出显示。出于好奇,为了提供这些特性,我的IDE(IntelliJ)是否必须首先编译我的源代码?就像我注意到的,每当我在IDE中打开一个新项目时,都会有一个延迟,它会生成一个“目标”文件夹。IDE是否在没有我显式运行代码或告诉它编译的情况下编译我的任何源代码?这在很大程度上取决于IDE IntelliJ利用了一个索引过程,在这个过程中,它获取整个项目,并在自己的内部结构(称为Psi*类)中对其进行索引。然后IDE引用这些类来提供静态分析和确定代码流

IDE提供了很多很酷的特性,比如跳转到声明和语法突出显示。出于好奇,为了提供这些特性,我的IDE(IntelliJ)是否必须首先编译我的源代码?就像我注意到的,每当我在IDE中打开一个新项目时,都会有一个延迟,它会生成一个“目标”文件夹。IDE是否在没有我显式运行代码或告诉它编译的情况下编译我的任何源代码?

这在很大程度上取决于IDE

IntelliJ利用了一个索引过程,在这个过程中,它获取整个项目,并在自己的内部结构(称为
Psi*
类)中对其进行索引。然后IDE引用这些类来提供静态分析和确定代码流

我对Eclipse不太熟悉,但抽象语法树是存在的,很可能类似于IntelliJ的内部结构


IntelliJ不会为您的代码进行编译,除非您允许,但为了使其静态分析真正起作用,您的代码必须是可编译的。如果不是,就不会得到静态分析;你会看到红色的曲线。

这里发生了几件事。导入sbt项目时,IntelliJ运行sbt以提取项目结构。这需要一段时间,sbt本身会创建
target
文件夹


大多数IDE特性,比如跳转到声明,都不需要编译。IntelliJ将代码解析为自己的内部语法模型,该模型允许索引、错误突出显示等。该模型允许许多重构和分析,甚至对有编译错误的代码也是如此。索引通常发生在后台进程中的初始导入之后。

IDE通常使用Eclipse之类的工具进行分析。有些相关:。可能重复