带你读《2022技术人的百宝黑皮书》——一个搞定责任链的注解(5)https://developer.aliyun.com/article/1339673?groupCode=taobaotech
生成相关源代码,一个源文件采用一个特定的代码生成器生成,各个类的生成器继承AbstractGenerator
源代码生成类:HandlerGenerator#gen
下面以HandlerGenerator#gen 为例:
fun gen() { // 生成类 val handlerTypeBuilder = TypeSpec.interfaceBuilder(desc.handlerRawClassName) .addTypeVariables(desc.entityDeclaredTypeVariables) .addModifiers(Modifier.PUBLIC) // 构建handlerContext参数 val contextParam = ParameterSpec.builder( desc.handlerContextTypeName, desc.handlerContextRawClassName.asFieldName() ).build() // 为原来接口的每个方法额外添加handlerContext参数desc.entityMethods.forEach { val operationMethod = createMethodSpecBuilder(it.executableElement) .addParameter(contextParam) .build() handlerTypeBuilder.addMethod(operationMethod) } // 生成源码 javaFileBuilder(desc.handlerRawClassName.packageName(), handlerTypeBuilder.build()) .build() .writeTo(filer) }
编译Debug探秘
可以通过Idea Maven自带的Debug工具 调试编译过程
在项目的maven compile上右键,点击Debug '${moduleName}'
在AutoPipelineProcessor#process方法上加上断连,即可断点Debug源码
带你读《2022技术人的百宝黑皮书》——一个搞定责任链的注解(7)https://developer.aliyun.com/article/1339671?groupCode=taobaotech