docs: static InstalledIdentity load(final InstalledImage image, final ProductConfig productConfig, final List<File> moduleRoots, final List<File> bundleRoots) throws IOException {
  
          // build the identity information
          final String productVersion = productConfig.resolveVersion();
          final String productName = productConfig.resolveName();
          final Identity identity = new AbstractLazyIdentity() {
              @Override
              public String getName() {
                  return productName;
              }
  
              @Override
              public String getVersion() {
                  return productVersion;
              }
  
              @Override
              public InstalledImage getInstalledImage() {
                  return image;
              }
          };
  
          final Properties properties = PatchUtils.loadProperties(identity.getDirectoryStructure().getInstallationInfo());
          final List<String> allPatches = PatchUtils.readRefs(properties, Constants.ALL_PATCHES);
  
          // Step 1 - gather the installed layers data
          final InstalledConfiguration conf = createInstalledConfig(image);
          // Step 2 - process the actual module and bundle roots
          final ProcessedLayers processedLayers = process(conf, moduleRoots, bundleRoots);
          final InstalledConfiguration config = processedLayers.getConf();
  
          // Step 3 - create the actual config objects
          // Process layers
          final InstalledIdentityImpl installedIdentity = new InstalledIdentityImpl(identity, allPatches, image);
          for (final LayerPathConfig layer : processedLayers.getLayers().values()) {
              final String name = layer.name;
              installedIdentity.putLayer(name, createPatchableTarget(name, layer, config.getLayerMetadataDir(name), image));
          }
          // Process add-ons
          for (final LayerPathConfig addOn : processedLayers.getAddOns().values()) {
              final String name = addOn.name;
              installedIdentity.putAddOn(name, createPatchableTarget(name, addOn, config.getAddOnMetadataDir(name), image));
          }
          return installedIdentity;
      }