public static ComboBoxModel createNamespaceUriModel(Project project) {
    final List<String> data = project.getUserData(URI_MODEL);
    if (data != null) {
      return new DefaultComboBoxModel(data.toArray());
    }

    final List<String> urls = new ArrayList<>(Arrays.asList(ExternalResourceManager.getInstance().getResourceUrls(null, true)));
    Collections.sort(urls);

    final JspSupportProxy jspSupport = JspSupportProxy.getInstance();
    if (jspSupport != null) {
      final List<String> tlds = new ArrayList<>();
      final Module[] modules = ModuleManager.getInstance(project).getModules();
      for (final Module module : modules) {
        final String[] tldUris = ReadAction.compute(() -> jspSupport.getPossibleTldUris(module));
        for (String uri : tldUris) {
          if (!tlds.contains(uri)) {
            tlds.add(uri);
          }
        }
      }
      Collections.sort(tlds);

      // TLD URIs are intentionally kept above the other URIs to make it easier to find them
      urls.addAll(0, tlds);
    }

    project.putUserData(URI_MODEL, urls);
    return new DefaultComboBoxModel(urls.toArray());
  }
public static ComboBoxModel createNamespaceUriModel(Project project)