docs: 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. <<<");
          }
      }