code: private static String getExtensionsUnsavedResources(Collection<AddOn> addOns, Set<Extension> extensions) {
          List<String> unsavedResources = new ArrayList<>();
          for (AddOn addOn : addOns) {
              for (Extension extension : addOn.getLoadedExtensions()) {
                  if (!extension.isEnabled()) {
                      continue;
                  }
  
                  List<String> resources = extension.getUnsavedResources();
                  if (resources != null) {
                      unsavedResources.addAll(resources);
                  }
              }
          }
          for (Extension extension : extensions) {
              if (!extension.isEnabled()) {
                  continue;
              }
  
              List<String> resources = extension.getUnsavedResources();
              if (resources != null) {
                  unsavedResources.addAll(resources);
              }
          }
          return wrapEntriesInLiTags(unsavedResources);
      }
docs: Returns all unsaved resources of the given {@code addOns} and {@code extensions} wrapped in {@code <li>} elements or an
  empty {@code String} if there are no unsaved resources.
  
  @param addOns the add-ons that will be queried for unsaved resources
  @param extensions the extensions that will be queried for unsaved resources
  @return a {@code String} containing all unsaved resources or empty {@code String} if none
  @since 2.4.0
  @see Extension#getUnsavedResources()