code: private void createConfigurationsForModuleType(ImmutableList.Builder<ModuleConfiguration> configurations, ASTType module, ASTType scanTarget, Set<MethodSignature> scanned, Map<String, Set<MethodSignature>> packagePrivateScanned) {
  
          configureModuleAnnotations(configurations, module, scanTarget, scanTarget.getAnnotations());
          configureModuleMethods(configurations, module, scanTarget, scanTarget.getMethods(), scanned, packagePrivateScanned);
  
          // Add scanned methods to allow for method overriding.
          for (ASTMethod astMethod : scanTarget.getMethods()) {
              MethodSignature signature = new MethodSignature(astMethod);
              if(astMethod.getAccessModifier() == ASTAccessModifier.PUBLIC || astMethod.getAccessModifier() == ASTAccessModifier.PROTECTED){
                  scanned.add(signature);
              }
              else if(astMethod.getAccessModifier() == ASTAccessModifier.PACKAGE_PRIVATE){
                  if(!packagePrivateScanned.containsKey(scanTarget.getPackageClass().getPackage())){
                      packagePrivateScanned.put(scanTarget.getPackageClass().getPackage(), new HashSet<MethodSignature>());
                  }
                  packagePrivateScanned.get(scanTarget.getPackageClass().getPackage()).add(signature);
              }
          }
  
          // if super type is null, we are at the top of the inheritance hierarchy and we can unwind.
          if(scanTarget.getSuperClass() != null) {
              // recurse our way up the tree so we add the top most providers first and clobber them on the way down
              createConfigurationsForModuleType(configurations, module, scanTarget.getSuperClass(), scanned, packagePrivateScanned);
          }
      }
docs: Recursive method that finds module methods and annotations on all parents of moduleAncestor and moduleAncestor, but creates configuration based on the module.
  This allows any class in the module hierarchy to contribute annotations or providers that can be overridden by subclasses.
  
  @param configurations the holder for annotation and method configurations
  @param module the module type we are configuring