Search in sources :

Example 1 with LoadExtraBuilder

use of com.xsm.easy.compiler.utils.LoadExtraBuilder in project EasyRouter by Xiasm.

the class ExtraProcessor method generateAutoWired.

private void generateAutoWired() throws IOException {
    TypeMirror typeActivity = elementUtils.getTypeElement(Constant.ACTIVITY).asType();
    TypeElement iExtra = elementUtils.getTypeElement(Constant.IEXTRA);
    if (!Utils.isEmpty(parentAndChild)) {
        // 参数 Object target
        ParameterSpec objectParamSpec = ParameterSpec.builder(TypeName.OBJECT, "target").build();
        for (Map.Entry<TypeElement, List<Element>> entry : parentAndChild.entrySet()) {
            TypeElement rawClassElement = entry.getKey();
            if (!typeUtils.isSubtype(rawClassElement.asType(), typeActivity)) {
                throw new RuntimeException("just support activity filed: " + rawClassElement);
            }
            // 封装的函数生成类
            LoadExtraBuilder loadExtra = new LoadExtraBuilder(objectParamSpec);
            loadExtra.setElementUtils(elementUtils);
            loadExtra.setTypeUtils(typeUtils);
            ClassName className = ClassName.get(rawClassElement);
            loadExtra.injectTarget(className);
            // 遍历属性
            for (int i = 0; i < entry.getValue().size(); i++) {
                Element element = entry.getValue().get(i);
                loadExtra.buildStatement(element);
            }
            // 生成java类名
            String extraClassName = rawClassElement.getSimpleName() + Constant.NAME_OF_EXTRA;
            // 生成 XX$$Autowired
            JavaFile.builder(className.packageName(), TypeSpec.classBuilder(extraClassName).addSuperinterface(ClassName.get(iExtra)).addModifiers(PUBLIC).addMethod(loadExtra.build()).build()).build().writeTo(filerUtils);
            log.i("Generated Extra: " + className.packageName() + "." + extraClassName);
        }
    }
}
Also used : TypeMirror(javax.lang.model.type.TypeMirror) ParameterSpec(com.squareup.javapoet.ParameterSpec) TypeElement(javax.lang.model.element.TypeElement) TypeElement(javax.lang.model.element.TypeElement) Element(javax.lang.model.element.Element) ClassName(com.squareup.javapoet.ClassName) ArrayList(java.util.ArrayList) List(java.util.List) LoadExtraBuilder(com.xsm.easy.compiler.utils.LoadExtraBuilder) HashMap(java.util.HashMap) Map(java.util.Map)

Aggregations

ClassName (com.squareup.javapoet.ClassName)1 ParameterSpec (com.squareup.javapoet.ParameterSpec)1 LoadExtraBuilder (com.xsm.easy.compiler.utils.LoadExtraBuilder)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 Element (javax.lang.model.element.Element)1 TypeElement (javax.lang.model.element.TypeElement)1 TypeMirror (javax.lang.model.type.TypeMirror)1