作家
登录

Android如何编写基于编译时注解的项目

作者: 来源: 2017-05-26 14:06:10 阅读 我要评论

  •     //一、收集信息 
  •     for (Element element : elements){ 
  •         //检查element类型 
  •         if (!checkAnnotationUseValid(element)){ 
  •             return false
  •         } 
  •         //field type 
  •         VariableElement variableElement = (VariableElement) element; 
  •         //class type 
  •         TypeElement typeElement = (TypeElement) variableElement.getEnclosingElement();//TypeElement 
  •         String qualifiedName = typeElement.getQualifiedName().toString(); 
  •  
  •         ProxyInfo proxyInfo = mProxyMap.get(qualifiedName); 
  •         if (proxyInfo == null){ 
  •             proxyInfo = new ProxyInfo(mElementUtils, typeElement); 
  •             mProxyMap.put(qualifiedName, proxyInfo); 
  •         } 
  •         BindView annotation = variableElement.getAnnotation(BindView.class); 
  •         int id = annotation.value(); 
  •         proxyInfo.mInjectElements.put(id, variableElement); 
  •     } 
  •     return true
  • 起首我们调用一下mProxyMap.clear();,因为process可能会多次调用,避免生成反复的代劳类,避免生成类的类名已存在异常。

    然后,经由过程roundEnv.getElementsAnnotatedWith拿到我们经由过程@BindView注解的元素,这里返回值,按照我们的预期应当是VariableElement集合,因为我们用于成员变量上。

    接下来for轮回我们的元素,起首检查类型是否是VariableElement.

    这里一般情况会对生成的代劳类做一下缓存处理,比如应用Map存储下,没有再生成,这里我们就不去做了。

    接下来,会将与该类对应的且被@BindView声明的VariableElement参加到ProxyInfo中去,key为我们声明时填写的id,即View的id。

    b.生成代劳类

    1. @Override 
    2. public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv){ 
    3.     //...省略收集信息的代码,以及try,catch相干 
    4.     for(String key : mProxyMap.keySet()){ 
    5.         ProxyInfo proxyInfo = mProxyMap.get(key); 
    6.         JavaFileObject sourceFile = mFileUtils.createSourceFile( 
    7.                 proxyInfo.getProxyClassFullName(), proxyInfo.getTypeElement()); 
    8.             Writer writer = sourceFile.openWriter(); 
    9.             writer.write(proxyInfo.generateJavaCode()); 

        推荐阅读

        Python算法实战系列:栈

      栈(stack)又称之为客栈是一个特别的有序表,其插入和删除操作都在栈顶进行操作,并且按照先辈后出,落后先出的规矩进交运作。如下图所示例如枪的弹匣,第一颗放进弹匣的枪弹反而在发射出去>>>详细阅读


      本文标题:Android如何编写基于编译时注解的项目

      地址:http://www.17bianji.com/lsqh/35453.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)