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);
}
}
}
Aggregations