// Path: holder-compiler/src/main/java/com/steve/creact/processor/core/model/AbstractModel.java
// public abstract class AbstractModel<R> {
// 
//     protected Element element;
//     protected ElementVisitorAdapter elementVisitor;
//     /**
//      * real model
//      */
//     private R model;
// 
//     public AbstractModel(Element element) {
//         this.element = element;
//     }
// 
//     public boolean isClass() {
//         return element.getKind().isClass();
//     }
// 
//     public boolean isInterface() {
//         return element.getKind().isInterface();
//     }
// 
//     public boolean isField() {
// 
//         return element.getKind().isField();
//     }
// 
//     public String getSimpleName() {
//         return element.getSimpleName().toString();
//     }
// 
//     public <P> void visit(P p) {
//         model = (R) element.accept(this.elementVisitor, p);
//     }
// 
//     public <P> void setElementVisitor(ElementVisitorAdapter<R, P> visitor) {
//         this.elementVisitor = visitor;
//     }
// 
//     public R getRealModel() {
//         return model;
//     }
// 
// }
// 
// Path: holder-compiler/src/main/java/com/steve/creact/processor/core/model/ModelCreator.java
// public interface ModelCreator {
// 
//     /**
//      * create a model
//      * @param element
//      * @param processingEnv
//      * @return
//      */
//     AbstractModel createModel(Element element, ProcessingEnvironment processingEnv);
// }
// 
// Path: holder-compiler/src/main/java/com/steve/creact/processor/core/view/ViewGenerator.java
// public interface ViewGenerator<T> {
// 
//     /**
//      * Generate View according to the model
//      * @param abstractModel
//      * @param processingEnv
//      */
//     void generate(AbstractModel<T> abstractModel,ProcessingEnvironment processingEnv);
// }


import com.steve.creact.processor.core.model.AbstractModel;
import com.steve.creact.processor.core.model.ModelCreator;
import com.steve.creact.processor.core.view.ViewGenerator;
import java.lang.annotation.Annotation;
import java.util.Set;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.tools.Diagnostic;
package com.steve.creact.processor.core;




/**
 * Created by Administrator on 2016/4/17.
 */
public abstract class BaseProcessor extends AbstractProcessor {
    public enum ProcessType {
        PROCESS_ANNOTATION_OF_TYPE_ELEMENT,
        PROCESS_ANNOTATION_OF_ELEMENT
    }

    protected Set<? extends Element> elements;
    protected Set<? extends TypeElement> typeElements;
    protected Logger logger;
    protected ModelCreator modelCreator;
// Path: holder-compiler/src/main/java/com/steve/creact/processor/core/model/AbstractModel.java
// public abstract class AbstractModel<R> {
// 
//     protected Element element;
//     protected ElementVisitorAdapter elementVisitor;
//     /**
//      * real model
//      */
//     private R model;
// 
//     public AbstractModel(Element element) {
//         this.element = element;
//     }
// 
//     public boolean isClass() {
//         return element.getKind().isClass();
//     }
// 
//     public boolean isInterface() {
//         return element.getKind().isInterface();
//     }
// 
//     public boolean isField() {
// 
//         return element.getKind().isField();
//     }
// 
//     public String getSimpleName() {
//         return element.getSimpleName().toString();
//     }
// 
//     public <P> void visit(P p) {
//         model = (R) element.accept(this.elementVisitor, p);
//     }
// 
//     public <P> void setElementVisitor(ElementVisitorAdapter<R, P> visitor) {
//         this.elementVisitor = visitor;
//     }
// 
//     public R getRealModel() {
//         return model;
//     }
// 
// }
// 
// Path: holder-compiler/src/main/java/com/steve/creact/processor/core/model/ModelCreator.java
// public interface ModelCreator {
// 
//     /**
//      * create a model
//      * @param element
//      * @param processingEnv
//      * @return
//      */
//     AbstractModel createModel(Element element, ProcessingEnvironment processingEnv);
// }
// 
// Path: holder-compiler/src/main/java/com/steve/creact/processor/core/view/ViewGenerator.java
// public interface ViewGenerator<T> {
// 
//     /**
//      * Generate View according to the model
//      * @param abstractModel
//      * @param processingEnv
//      */
//     void generate(AbstractModel<T> abstractModel,ProcessingEnvironment processingEnv);
// }


// Path: holder-compiler/src/main/java/com/steve/creact/processor/core/BaseProcessor.java
import com.steve.creact.processor.core.model.AbstractModel;
import com.steve.creact.processor.core.model.ModelCreator;
import com.steve.creact.processor.core.view.ViewGenerator;
import java.lang.annotation.Annotation;
import java.util.Set;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.tools.Diagnostic;

package com.steve.creact.processor.core;




/**
 * Created by Administrator on 2016/4/17.
 */
public abstract class BaseProcessor extends AbstractProcessor {
    public enum ProcessType {
        PROCESS_ANNOTATION_OF_TYPE_ELEMENT,
        PROCESS_ANNOTATION_OF_ELEMENT
    }

    protected Set<? extends Element> elements;
    protected Set<? extends TypeElement> typeElements;
    protected Logger logger;
    protected ModelCreator modelCreator;
    protected ViewGenerator viewGenerator;