@Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {

        System.out.println("#####################################################");
        System.out.println("start generating code ...");
        for(TypeElement typeElement : annotations){
            GeneratorType type = getTypeByName(typeElement.getQualifiedName().toString());
            if(type==null){
                continue;
            }
            Class<? extends AbstractGenerator> cls = type.getClazz();

            try {
                Constructor<? extends AbstractGenerator> ct = cls.getConstructor(
                        TypeElement.class,
                        RoundEnvironment.class,
                        ProcessingEnvironment.class
                );

                try {
                    AbstractGenerator generator = ct.newInstance(typeElement, roundEnv, processingEnv);
                    generator.execute();
                } catch (InstantiationException e) {
                    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                } catch (IllegalAccessException e) {
                    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                } catch (InvocationTargetException e) {
                    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                }

            } catch (NoSuchMethodException e) {
                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
            }
        }
        return false;
    }