javac
javac 源码解析
一个努力的码农
这个作者很懒,什么都没留下…
展开
-
javac编译选项-Option
前言javac有很多选项,在jdk1.8中,通过javac -help 可以看到如下信息的输出:关于这个option所对应的类就是Option.接下来我们就来看一下这个类解析Option类是一个枚举,代表javac的选项.处理命令行选项的特定选项是通过按顺序搜索此枚举的成员来标识的,找到第一个匹配的.其中,Option又分为OptionKind,OptionGroup,ChoiceKi...原创 2018-10-23 14:17:22 · 19547 阅读 · 0 评论 -
javac 中的if-else变量初始化问题
前言在前几篇文章中我们介绍过了AbstractAssignAnalyzer.visitIf(JCIf),该方法是用来判断在if语句中变量的初始化情况的.例如如下代码:public void assgin(){ int c; int a = 0; if(c != 0){ } }在IDE 中会提示 The local variable c may not have ...原创 2018-09-27 17:22:56 · 15672 阅读 · 0 评论 -
javac中的位图
前言本文我们来介绍javac中用到的位图–Bits.本文围绕着位运算的基础知识和Bits源码来讲解基础知识所有比特的编号方法是:从低字节的低位比特位开始,第一个bit为0,最后一个bit为 n-1。比如,给出一个数组:int[] array = new int[4]。那么:a[0] – a[4] 的比特位分别为:0–31,32–63,64–95,96–127下面我们依据一个程序探究数组...原创 2018-10-08 12:18:43 · 14104 阅读 · 0 评论 -
javac final变量未赋值检测讲解
前言我们在前面介绍AssignAnalyzer时,对AssignAnalyzer.letInit(DiagnosticPosition, VarSymbol)方法进行了简单的介绍.本文就举一个案例,来深入理解一下.案例案例代码如下:public class CheckInitError { static final int b; public CheckInitError(){...原创 2018-09-19 18:41:01 · 14639 阅读 · 0 评论 -
BaseAnalyzer,AbstractAssignAnalyzer,AssignAnalyzer解析
前言本文我们来介绍一下javac在flow阶段使用的BaseAnalyzer,AbstractAssignAnalyzer,AssignAnalyzer.类的继承结构如下:解析BaseAnalyzerBaseAnalyzer–> 数据流分析的基类.该类定义了处理break/continue的逻辑.其中定义了一个枚举,JumpKind.定义如下:enum JumpKind { ...原创 2018-09-19 11:36:35 · 14106 阅读 · 0 评论 -
AssignAnalyzer案例1
前言上篇文章介绍了BaseAnalyzer,AbstractAssignAnalyzer,AssignAnalyzer.其中有很多点分享的不够透彻,这里就对于AssignAnalyzer,什么是静态变量和静态初始块来介绍.案例静态变量和静态初始块的案例本案例的代码如下:public class AssignDemo { static int a = 7; static final ...原创 2018-09-19 11:38:54 · 13934 阅读 · 0 评论 -
javax.lang.model.util源码解析
前言本文我们来看一下javax.lang.model.util中的类,这是javax.lang.model中的最后一个子包了.这部分的代码不太好理解.解析Elements操作java源程序元素的工具方法.兼容性提醒:本类中的方法可能会在未来的版本中添加.public interface Elements { /** * 返回指定全限定名所对应...原创 2018-09-04 14:40:05 · 14399 阅读 · 0 评论 -
javax.lang.model.element源码解析
前言本文解析javax.lang.model.element包中几个类的源码,看这部分的代码也是因为javac中实现了这部分的接口.类不多,如图:解析在解析之前,先来看下javax.lang.model包下的几个顶级接口, javax.lang.model.element包中有几个类是其子接口.UnknownEntityException表示未知类型的实体遇到的异常的超...原创 2018-09-03 18:25:10 · 16577 阅读 · 1 评论 -
javax.lang.model.type源码解析
前言本文我们介绍一下javax.lang.model.type.类不多,如图:至于为啥要看这部分的代码,原因很简单,javac 实现了javax.lang.model中的API.解析TypeKind该类是一个媒介,定义了java中各种类型所对应的枚举.public enum TypeKind { /** * The primitive type...原创 2018-08-31 19:20:08 · 14870 阅读 · 1 评论 -
为啥要看javac源代码
前言本文为javac 源码解析的第一篇,主要介绍了如下内如:阅读javac源代码的好处阅读javac源代码的储配知识build javacjavac源代码结构说明重要说明: javac是java的编译器,内容高深,非常人所能参透,本人也同样,写本文只为了交流,因此,诸位看客发现纰漏,请指出,点拨一下小弟,不甚感激.阅读javac源代码的好处阅读javac的好处如下...原创 2018-08-31 12:00:42 · 18729 阅读 · 2 评论 -
JAVAC原理
前言本文是对 compilation-overview 的翻译. 如有翻译不对的地方,还望海涵.正文将一组源文件编译成相应的一组类文件的过程并不简单,但是通常可以分为三个阶段。源文件的不同部分可以在“按需”的基础上以不同的速率进行处理。这个过程是由JavaCompiler类来处理的:将命令行上指定的源文件进行读取,解析为语法树,然后将所有外部可见的定义都输入到编译器的...翻译 2018-08-31 15:58:49 · 15199 阅读 · 1 评论