ComboBoxModel (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()); }