docs: public static void findClasspathOrder(final ClassLoader classLoader, final ClasspathOrder classpathOrder,
              final ScanSpec scanSpec, final LogNode log) {
          // type ClasspathManager
          final Object manager = ReflectionUtils.getFieldVal(classLoader, "manager", false);
          addClasspathEntries(manager, classLoader, classpathOrder, scanSpec, log);
  
          // type FragmentClasspath[]
          final Object fragments = ReflectionUtils.getFieldVal(manager, "fragments", false);
          if (fragments != null) {
              for (int f = 0, fragLength = Array.getLength(fragments); f < fragLength; f++) {
                  // type FragmentClasspath
                  final Object fragment = Array.get(fragments, f);
                  addClasspathEntries(fragment, classLoader, classpathOrder, scanSpec, log);
              }
          }
          // Only read system bundles once (all bundles should give the same results for this).
          if (!alreadyReadSystemBundles) {
              // type BundleLoader
              final Object delegate = ReflectionUtils.getFieldVal(classLoader, "delegate", false);
              // type EquinoxContainer
              final Object container = ReflectionUtils.getFieldVal(delegate, "container", false);
              // type Storage
              final Object storage = ReflectionUtils.getFieldVal(container, "storage", false);
              // type ModuleContainer
              final Object moduleContainer = ReflectionUtils.getFieldVal(storage, "moduleContainer", false);
              // type ModuleDatabase
              final Object moduleDatabase = ReflectionUtils.getFieldVal(moduleContainer, "moduleDatabase", false);
              // type HashMap<Integer, EquinoxModule>
              final Object modulesById = ReflectionUtils.getFieldVal(moduleDatabase, "modulesById", false);
              // type EquinoxSystemModule (module 0 is always the system module)
              final Object module0 = ReflectionUtils.invokeMethod(modulesById, "get", Object.class, 0L, false);
              // type Bundle
              final Object bundle = ReflectionUtils.invokeMethod(module0, "getBundle", false);
              // type BundleContext
              final Object bundleContext = ReflectionUtils.invokeMethod(bundle, "getBundleContext", false);
              // type Bundle[]
              final Object bundles = ReflectionUtils.invokeMethod(bundleContext, "getBundles", false);
              if (bundles != null) {
                  for (int i = 0, n = Array.getLength(bundles); i < n; i++) {
                      // type EquinoxBundle
                      final Object equinoxBundle = Array.get(bundles, i);
                      // type EquinoxModule
                      final Object module = ReflectionUtils.getFieldVal(equinoxBundle, "module", false);
                      // type String
                      String location = (String) ReflectionUtils.getFieldVal(module, "location", false);
                      if (location != null) {
                          final int fileIdx = location.indexOf("file:");
                          if (fileIdx >= 0) {
                              location = location.substring(fileIdx);
                              classpathOrder.addClasspathEntry(location, classLoader, scanSpec, log);
                          }
                      }
                  }
              }
              alreadyReadSystemBundles = true;
          }
      }