All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.vicpin.kpa.annotation.processor.KpaProcessor Maven / Gradle / Ivy

package com.vicpin.kpa.annotation.processor;

import com.vicpin.kpa.annotation.processor.model.Model;

import java.util.Set;

import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.TypeElement;

@SupportedAnnotationTypes({
        "com.vicpin.kpa.annotation.AutoViewHolder"
})
public class KpaProcessor extends AbstractProcessor {

    @Override
    public boolean process(Set annotations, RoundEnvironment roundEnv) {

        EnvironmentUtil.init(processingEnv);

        Model model = buildModel(roundEnv);

        if(model.getEntities().size() == 0) {
            return false;
        }

        for (Model.EntityModel entity : model.getEntities()) {
            createViewHolderClassFor(entity);
            createPresenterClassFor(entity);
            createAdapterClassFor(entity);
        }


        return true;
    }

    private void createViewHolderClassFor(Model.EntityModel entity) {
        ViewHolderWritter writter = new ViewHolderWritter(entity);
        writter.generateFile(processingEnv);
    }

    private void createPresenterClassFor(Model.EntityModel entity) {
        PresenterWritter writter = new PresenterWritter(entity);
        writter.generateFile(processingEnv);
    }

    private void createAdapterClassFor(Model.EntityModel entity) {
        AdapterWritter writter = new AdapterWritter(entity);
        writter.generateFile(processingEnv);
    }


    @Override
    public SourceVersion getSupportedSourceVersion() {
        return SourceVersion.latestSupported();
    }

    private Model buildModel(RoundEnvironment env) {
        return Model.Companion.buildFrom(env, getSupportedAnnotationTypes());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy