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. <<<" ) ; } }
Parse tollgate .