从无到有手写ButterKnife框架

导航

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

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

继承是树形结构

例如javapoetdemo中的示例
从无到有手写ButterKnife框架_第1张图片
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 childNodeList = new ArrayList<>(  );
    public TypeElement typeElement;
    public List elementList;
    public Set fieldNameSets;
    public String typeName;
    public  boolean isSorted;
}

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

2、创建根节点 root

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

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

5、用Set 去重

详见算法
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

你可能感兴趣的:(从无到有手写ButterKnife框架)