private void parseInterceptors(Set<? extends Element> elements) throws IOException {
        if (CollectionUtils.isNotEmpty(elements)) {
            logger.info(">>> Found interceptors, size is " + elements.size() + " <<<");

            // Verify and cache, sort incidentally.
            for (Element element : elements) {
                if (verify(element)) {  // Check the interceptor meta
                    logger.info("A interceptor verify over, its " + element.asType());
                    Interceptor interceptor = element.getAnnotation(Interceptor.class);

                    Element lastInterceptor = interceptors.get(interceptor.priority());
                    if (null != lastInterceptor) { // Added, throw exceptions
                        throw new IllegalArgumentException(
                                String.format(Locale.getDefault(), "More than one interceptors use same priority [%d], They are [%s] and [%s].",
                                        interceptor.priority(),
                                        lastInterceptor.getSimpleName(),
                                        element.getSimpleName())
                        );
                    }

                    interceptors.put(interceptor.priority(), element);
                } else {
                    logger.error("A interceptor verify failed, its " + element.asType());
                }
            }

            // Interface of ARouter.
            TypeElement type_ITollgate = elementUtils.getTypeElement(IINTERCEPTOR);
            TypeElement type_ITollgateGroup = elementUtils.getTypeElement(IINTERCEPTOR_GROUP);

            /**
             *  Build input type, format as :
             *
             *  ```Map<Integer, Class<? extends ITollgate>>```
             */
            ParameterizedTypeName inputMapTypeOfTollgate = ParameterizedTypeName.get(
                    ClassName.get(Map.class),
                    ClassName.get(Integer.class),
                    ParameterizedTypeName.get(
                            ClassName.get(Class.class),
                            WildcardTypeName.subtypeOf(ClassName.get(type_ITollgate))
                    )
            );

            // Build input param name.
            ParameterSpec tollgateParamSpec = ParameterSpec.builder(inputMapTypeOfTollgate, "interceptors").build();

            // Build method : 'loadInto'
            MethodSpec.Builder loadIntoMethodOfTollgateBuilder = MethodSpec.methodBuilder(METHOD_LOAD_INTO)
                    .addAnnotation(Override.class)
                    .addModifiers(PUBLIC)
                    .addParameter(tollgateParamSpec);

            // Generate
            if (null != interceptors && interceptors.size() > 0) {
                // Build method body
                for (Map.Entry<Integer, Element> entry : interceptors.entrySet()) {
                    loadIntoMethodOfTollgateBuilder.addStatement("interceptors.put(" + entry.getKey() + ", $T.class)", ClassName.get((TypeElement) entry.getValue()));
                }
            }

            // Write to disk(Write file even interceptors is empty.)
            JavaFile.builder(PACKAGE_OF_GENERATE_FILE,
                    TypeSpec.classBuilder(NAME_OF_INTERCEPTOR + SEPARATOR + moduleName)
                            .addModifiers(PUBLIC)
                            .addJavadoc(WARNING_TIPS)
                            .addMethod(loadIntoMethodOfTollgateBuilder.build())
                            .addSuperinterface(ClassName.get(type_ITollgateGroup))
                            .build()
            ).build().writeTo(mFiler);

            logger.info(">>> Interceptor group write over. <<<");
        }
    }
private void parseInterceptors ( Set < ? extends Element > elements ) throws IOException { if ( CollectionUtils . isNotEmpty ( elements ) ) { logger . info ( ">>> Found interceptors, size is " + elements . size ( ) + " <<<" ) ; for ( Element element : elements ) { if ( verify ( element ) ) { logger . info ( "A interceptor verify over, its " + element . asType ( ) ) ; Interceptor interceptor = element . getAnnotation ( Interceptor . class ) ; Element lastInterceptor = interceptors . get ( interceptor . priority ( ) ) ; if ( null != lastInterceptor ) { throw new IllegalArgumentException ( String . format ( Locale . getDefault ( ) , "More than one interceptors use same priority [%d], They are [%s] and [%s]." , interceptor . priority ( ) , lastInterceptor . getSimpleName ( ) , element . getSimpleName ( ) ) ) ; } interceptors . put ( interceptor . priority ( ) , element ) ; } else { logger . error ( "A interceptor verify failed, its " + element . asType ( ) ) ; } } TypeElement type_ITollgate = elementUtils . getTypeElement ( IINTERCEPTOR ) ; TypeElement type_ITollgateGroup = elementUtils . getTypeElement ( IINTERCEPTOR_GROUP ) ; ParameterizedTypeName inputMapTypeOfTollgate = ParameterizedTypeName . get ( ClassName . get ( Map . class ) , ClassName . get ( Integer . class ) , ParameterizedTypeName . get ( ClassName . get ( Class . class ) , WildcardTypeName . subtypeOf ( ClassName . get ( type_ITollgate ) ) ) ) ; ParameterSpec tollgateParamSpec = ParameterSpec . builder ( inputMapTypeOfTollgate , "interceptors" ) . build ( ) ; MethodSpec . Builder loadIntoMethodOfTollgateBuilder = MethodSpec . methodBuilder ( METHOD_LOAD_INTO ) . addAnnotation ( Override . class ) . addModifiers ( PUBLIC ) . addParameter ( tollgateParamSpec ) ; if ( null != interceptors && interceptors . size ( ) > 0 ) { for ( Map . Entry < Integer , Element > entry : interceptors . entrySet ( ) ) { loadIntoMethodOfTollgateBuilder . addStatement ( "interceptors.put(" + entry . getKey ( ) + ", $T.class)" , ClassName . get ( ( TypeElement ) entry . getValue ( ) ) ) ; } } JavaFile . builder ( PACKAGE_OF_GENERATE_FILE , TypeSpec . classBuilder ( NAME_OF_INTERCEPTOR + SEPARATOR + moduleName ) . addModifiers ( PUBLIC ) . addJavadoc ( WARNING_TIPS ) . addMethod ( loadIntoMethodOfTollgateBuilder . build ( ) ) . addSuperinterface ( ClassName . get ( type_ITollgateGroup ) ) . build ( ) ) . build ( ) . writeTo ( mFiler ) ; logger . info ( ">>> Interceptor group write over. <<<" ) ; } }
Parse tollgate.

@param elements elements of tollgate.