# lombok-reading **Repository Path**: mazaiting/lombok-reading ## Basic Information - **Project Name**: lombok-reading - **Description**: lombok源码阅读注释 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-11-02 - **Last Updated**: 2022-07-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # lombok #### 介绍 lombok源码阅读注释 #### 源码阅读流程 1. `LombokProcessor` 作为 lombok 的入口, 即注解处理器 2. 在`init()`中初始化了`javacProcessingEnv`变量与`javacFiler` 2.1 `getJavacProcessingEnvironment()`中添加了Java 语法树需要的类库及各个环境对`JavacProcessingEnvironment`包装类解析 2.2. 创建了 Java 语法树`trees`与转换器`transformer` 2.3. `JavacTransformer`构造方法中调用`HandlerLibrary.load()`方法, 来加载注解处理器与观察者处理器 3. 在`process()`中调用`transformer.transform()`处理对应注解的功能 4. 在`transform()`中首先创建`JavacAST`对象, 然后调用`ast.traverse()`方法(传入`AnnotationVisitor`)进行注解处理, 在内部调用`JavacNode.traverse()` 4. 在`JavacNode.traverse()`中, 根据类型匹配到`ANNOTATION`分支, 再根据类型匹配是方法还是变量.(此处以方法(METHOD)作为示例) 4. 调用`AnnotationVisitor.visitAnnotationOnMethod()`注解处理方法, 内部又调用`HandlerLibrary.handleAnnotation()`来处理注解, 内部再次调用`AnnotationHandlerContainer.handle()` 4. 调用 core.lombok.javac.handles 包下的注解处理具体实现来完成注解的处理.