3.基于Dagger2.38.1的hilt源码-CustomTestApplicationProcessor

120 阅读1分钟

前言

CustomTestApplicationProcessor类处理@CustomTestApplication。当前使用该注解的节点校验并且生成CustomTestApplicationMetadata对象,针对该CustomTestApplicationMetadata对象再生成类。

用于测试。

校验并且生成CustomTestApplicationMetadata对象

@CustomTestApplication修饰节点规则

  1. @CustomTestApplication修饰节点必须是类或接口;

  2. @CustomTestApplication注解中的value值类型(及其深层次遍历到的类型)不能使用@HiltAndroidApp修饰;

  3. @CustomTestApplication注解中的value值类型(及其深层次遍历到的类型)不能存在@Inject修饰的变量或普通方法或构造函数;

  4. @CustomTestApplication注解中的value值类型必须存在并且是Application或其子类。

CustomTestApplicationMetadata对象

  1. TypeElement element:当前@CustomTestApplication修饰节点,

  2. ClassName baseAppName:@CustomTestApplication注解中的value值类(一定存在并且是Application或其子类)。

CustomTestApplicationGenerator生成类

demo:

@CustomTestApplication(BaseApplication.class)
class CustomTestApplication{}

生成代码如下:

@Generated("CustomTestApplicationProcessor")
public final class CustomTestApplication_Application extends BaseApplication interface GeneratedComponentManager<Object>,TestApplicationComponentManagerHolder{
	 private TestApplicationComponentManager componentManager;

	 protected final void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        componentManager = new TestApplicationComponentManager(this);
      }

	 @Override
     public final GeneratedComponentManager<Object> componentManager(){
         return componentManager;
     }

	@Override
    public final Object generatedComponent(){
        return componentManager.generatedComponent();
    }
}

总结

当前@CustomTestApplication修饰的节点应用于测试环节。

源码的学习让我们明智,有一种授之以渔的感觉。