编译时注解学习八 -模板文件读取

补充一个读取模板文件生成类的方法过程。
在这里插入图片描述
模板文件内容:

package %package%;

public class %classname% {

    private String name;
    private int data;

    private void setName(String name){
        this.name = name;
    }

    private String getName(){
        return name;
    }

    private void setData(){
        data = %data%;
    }

    private int getData(){
        return data;
    }

}

读取模板文件的工具:

//文件名写法 /temp/template
 public static String getTempFileString( String file ) {

        BufferedReader reader = new BufferedReader( new InputStreamReader( Utils.class.getResourceAsStream( file ) ) );
        StringBuilder builder = new StringBuilder();
        try {
            String line;
            while ( ( line = reader.readLine() ) != null ) {
                builder.append( line ).append( "\n" );
            }
            reader.close();
        } catch ( IOException e ) {
            try {
                reader.close();
            } catch ( IOException e1 ) {
            }
        }

        return builder.toString();
    }

processor文件写法:

@SupportedOptions({"CLASSNAME"})
@SupportedAnnotationTypes("com.ldx.annotationlib.Template")
@SupportedSourceVersion(SourceVersion.RELEASE_7)
@AutoService(Processor.class)
public class AptProcessor5 extends AbstractProcessor  {

    private Filer mFilerUtils;
    private Types mTypesUtils;
    private Elements mElementsUtils;
    private Messager mMessager;
    private Map<String,String> mOptionMap;
    private ArrayList<VariableElement> mElementList;

    @Override
    public synchronized void init(ProcessingEnvironment processingEnvironment) {
        super.init(processingEnvironment);
        mFilerUtils = processingEnv.getFiler();
        mTypesUtils = processingEnv.getTypeUtils();
        mElementsUtils = processingEnv.getElementUtils();
        mMessager = processingEnv.getMessager();
        mOptionMap = processingEnv.getOptions();
        mElementList = new ArrayList<>();
    }

    @Override
    public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment) {
        if (set != null && set.size() > 0){

            Set<? extends Element>  elements = roundEnvironment.getElementsAnnotatedWith(Template.class);
            for (Element element : elements) {
                VariableElement variableElement = (VariableElement) element;
                mElementList.add(variableElement);
            }

            createFile(mElementList);

            return true;
        }
        return false;
    }

    private void createFile(ArrayList<VariableElement> mElementList) {
        TypeElement enclosingElement = (TypeElement) mElementList.get(0).getEnclosingElement();
        String pkName = mElementsUtils.getPackageOf(enclosingElement).getQualifiedName().toString();
        String packName = mElementsUtils.getPackageOf(enclosingElement).asType().toString();
        String className = enclosingElement.getSimpleName().toString();

        try {
            JavaFileObject jfo = mFilerUtils.createSourceFile(pkName + "."+className+ "Template", new Element[]{});
            Writer writer = jfo.openWriter();
            String data = Utils.getTempFileString("/temp/template");
            if (data != null){
                data = data.replace("%classname%", className+ "Template");
                data = data.replace("%package%", pkName);
                data = data.replace("%data%", "2");
            }
            writer.write(data);
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

最终生成的文件
在这里插入图片描述

package com.ldx.canvasdrawdemo.activity;

public class BindViewActivityTemplate {

    private String name;
    private int data;

    private void setName(String name){
        this.name = name;
    }

    private String getName(){
        return name;
    }

    private void setData(){
        data = 2;
    }

    private int getData(){
        return data;
    }

}

编译时注解学习一之 Element元素
编译时注解学习二之 注解处理器初探AbstractProcessor
编译时注解学习三之 注解处理器AbstractProcessor工具和Element属性简述
编译期注解学习四 简单的view注入框架
编译期注解学习五 - ElementKind,TypeKind,不同Element类型判断
编译期注解学习六- 生成java文件javapoet
编译期注解学习七-如何进行调试
编译时注解学习八 -模板文件读取

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在IDEA中,可以通过创建文件命名模板来更快捷方便地创建文件,节省间。创建文件命名模板的步骤如下: 1. 找到任意项目中日后经常所需的文件。 2. 在model类中使用@Table注解来创建model类,如果需要将字段输出到页面上,则需要在字段上添加@Comment字段备注注解(注意命名规范和大小写)。 3. 编译model类,使其编译至target/classes目录下,目的是让代码生成器可读取到class文件。 4. 在实体类里鼠标右击,或者...,可以创建模板的好处是将有用的记录下来,方便日后自己和他人学习。 通过创建文件命名模板,您可以更加高效地创建文件,并且可以根据您的需求进行自定义配置,提高开发效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [IDEA技巧篇——文件模板功能](https://blog.csdn.net/m0_60461669/article/details/127914634)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [NutzWk企业级开源开发框架](https://download.csdn.net/download/weixin_38735101/16496390)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值