docs: public static void findClasspathOrder(final ClassLoader classLoader, final ClasspathOrder classpathOrder,
              final ScanSpec scanSpec, final LogNode log) {
          final Object module = ReflectionUtils.invokeMethod(classLoader, "getModule", false);
          final Object callerModuleLoader = ReflectionUtils.invokeMethod(module, "getCallerModuleLoader", false);
          final Set<Object> visitedModules = new HashSet<>();
          @SuppressWarnings("unchecked")
          final Map<Object, Object> moduleMap = (Map<Object, Object>) ReflectionUtils.getFieldVal(callerModuleLoader,
                  "moduleMap", false);
          for (final Entry<Object, Object> ent : moduleMap.entrySet()) {
              // type FutureModule
              final Object val = ent.getValue();
              // type Module
              final Object realModule = ReflectionUtils.invokeMethod(val, "getModule", false);
              handleRealModule(realModule, visitedModules, classLoader, classpathOrder, scanSpec, log);
          }
          // type Map<String, List<LocalLoader>>
          @SuppressWarnings("unchecked")
          final Map<String, List<?>> pathsMap = (Map<String, List<?>>) ReflectionUtils.invokeMethod(module,
                  "getPaths", false);
          for (final Entry<String, List<?>> ent : pathsMap.entrySet()) {
              for (final Object /* ModuleClassLoader$1 */ localLoader : ent.getValue()) {
                  // type ModuleClassLoader (outer class)
                  final Object moduleClassLoader = ReflectionUtils.getFieldVal(localLoader, "this$0", false);
                  // type Module
                  final Object realModule = ReflectionUtils.getFieldVal(moduleClassLoader, "module", false);
                  handleRealModule(realModule, visitedModules, classLoader, classpathOrder, scanSpec, log);
              }
          }
      }