public static @NotNull RawProductModules readProductModulesAndMergeIncluded(@NotNull InputStream inputStream, @NotNull String filePath,
                                                                              @NotNull ResourceFileResolver resolver) {
    try {
      RawProductModules rawProductModules = ProductModulesXmlSerializer.parseModuleXml(inputStream);
      if (rawProductModules.getIncludedFrom().isEmpty()) {
        return rawProductModules;
      }
      
      Set<RawIncludedRuntimeModule> allMainGroupModules = new LinkedHashSet<>(rawProductModules.getMainGroupModules());
      Set<RuntimeModuleId> allBundledPluginMainModules = new LinkedHashSet<>(rawProductModules.getBundledPluginMainModules());
      mergeIncludedFiles(rawProductModules, filePath, resolver, allMainGroupModules, allBundledPluginMainModules);
      return new RawProductModules(new ArrayList<>(allMainGroupModules), new ArrayList<>(allBundledPluginMainModules), 
                                   Collections.emptyList());
    }
    catch (XMLStreamException | IOException e) {
      throw new MalformedRepositoryException("Failed to load module group from " + filePath, e);
    }
  }
public static @NotNull RawProductModules readProductModulesAndMergeIncluded(@NotNull InputStream inputStream, @NotNull String filePath,
                                                                              @NotNull ResourceFileResolver resolver)