Javac会通过调用引用对象的getClass()来判空,主要有几处: (1)JCMethodInvocation()方法中,如下实例: class A{ class B{} } public class Test06 extends A.B{ public Test06(A a){ a.super(); } } 要保证a不能为null值. (2)visitNewClass()方法中对明确指定的encl属性不能为空 (3)visitStringSwitch()方法中的给switch传递的参数 S…
参考文章: (1)关于类的符号输入过程第二篇 ImportScope中存储的为ImportEntry,继承了Scope.Entry类并且多定义了个origin属性,也就是符号的最终来源.除此之外还对getOrigin()方法进行了覆写,返回origin属性,这是由于静态导入的原因,举例如下: package com.test19; public class TestStaticParent { public static class AAA{ int a =2; } } 然后在同一个包下编写子类…
在Javac中解语法糖主要是Lower类来完成,调用这个类的入口函数translateTopLevelClass即可.这个方法只是JavacCompiler类的desugar方法中进行了调用. 首先来看下local class本地类解语法糖,举个例子,如下: class Outer { class AOuter{ int temp = 0; } final int count1 = new Integer(1); final int count2 = 1; static final int co…
枚举类在Javac中是被当作类来看待的. An enum type is implicitly final unless it contains at least one enum constant that has a class body. 举例如下: enum EnumTest { MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6) { @Override public boolean isRest() { return true; } }, SU…
在OptionName类中的枚举定义如下: XLINT("-Xlint"), XLINT_CUSTOM("-Xlint:"), -Xlint Enable all recommended warnings. In this release, enabling all available warnings is recommended.-Xlint:all Enable all recommended warnings. In this release,…