繁体   English   中英

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

[英]Do IDEs compile your Java or Scala source code to offer static analysis?

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

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

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

这在很大程度上取决于IDE。

IntelliJ利用索引过程来获取整个项目,并将其编入自己的内部结构(称为Psi*类)。 然后,IDE将引用这些类以提供静态分析并确定代码流。

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

除非您允许 IntelliJ,否则IntelliJ不会代表您编译代码,但为了使静态分析真正起作用,您的代码必须是可编译的。 如果不是,你就不会得到静态分析; 相反,你会得到红色的波浪线。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM