三方架构分析

从无到有手写ButterKnife框架

2019-03-15  本文已影响0人  陈桐Caliburn
导航

一、代码的演进
二、butterKnife反射调用
三、javapoet自动生成模板代码
四、apt与注解
五、注解支持多层继承
六、apt调试
七、javapoet语法

1、注解支持多层继承,并且支持field相同去重

继承是树形结构

例如javapoetdemo中的示例
public class BaseActivity extends AppCompatActivity {
    @ViewId(R.id.helloTv)
    TextView helloTv;
}
public class MainActivity extends BaseActivity {
    @ViewId( R.id.register )
    Button register;
    @ViewId( R.id.login )
    Button login;
}
public class TestActivity extends MainActivity {
    @ViewId( R.id.guess )
    Button guess;
    @ViewId( R.id.login )
    Button helloTv;
}

上面的代码是常见情况
1、支持注解是继承关系
2、支持子类父类field相同,采用子类注解

public class ElementTree {
    public ElementTree parentNode = null;
    public List<ElementTree> childNodeList = new ArrayList<>(  );
    public TypeElement typeElement;
    public List<Element> elementList;
    public Set<String> fieldNameSets;
    public String typeName;
    public  boolean isSorted;
}

1、思路我们可以获得Map<TypeElement,List<Element>> 当前类,当前类元素列表转换成List< ElementTree >

2、创建根节点 root

3、按照中序的方式(中左右)创建树形关系

4、遍历list< ElementTree > 每个元素,每个元素判断是否有父节点,按照子父排序方式获得所有元素列表List<List<Element>> ,Set<String>

5、用Set<String> 去重

详见算法
https://github.com/yinlingchaoliu/JavaPoetDemo/blob/master/poet-compiler/src/main/java/com/chaoliu/sort/ElementTree.java
https://github.com/yinlingchaoliu/JavaPoetDemo/blob/master/poet-compiler/src/main/java/com/chaoliu/sort/TreeUtils.java

关键在思路,不多于赘述

从无到有手写butterKnife框架

https://github.com/yinlingchaoliu/JavaPoetDemo

上一篇 下一篇

猜你喜欢

热点阅读