@Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
        setLogInfo();
        logInfo("Running " + getClass().getSimpleName());

        if (roundEnv.processingOver() || annotations.size() == 0) {
            return ALLOW_OTHER_PROCESSORS_TO_CLAIM_ANNOTATIONS;
        }

        if (roundEnv.getRootElements() == null || roundEnv.getRootElements().isEmpty()) {
            logInfo("No sources to process");
            return ALLOW_OTHER_PROCESSORS_TO_CLAIM_ANNOTATIONS;
        }

        conf = createConfiguration(roundEnv);
        context = new Context();
        Set<Class<? extends Annotation>> entityAnnotations = conf.getEntityAnnotations();
        TypeMappings typeMappings = conf.getTypeMappings();
        QueryTypeFactory queryTypeFactory = conf.getQueryTypeFactory();
        this.typeFactory = createTypeFactory(entityAnnotations, typeMappings, queryTypeFactory);
        elementHandler = createElementHandler(typeMappings, queryTypeFactory);
        this.roundEnv = roundEnv;

        // process annotations
        processAnnotations();

        validateMetaTypes();

        // serialize created types
        serializeMetaTypes();

        return ALLOW_OTHER_PROCESSORS_TO_CLAIM_ANNOTATIONS;
    }
{@code AbstractQuerydslProcessor} is the base class for Querydsl annotation processors and
contains the main processing logic. The subclasses just provide the configuration.

@author tiwe
querydsl-apt/src/main/java/com/querydsl/apt/AbstractQuerydslProcessor.java