@Override public int compareTo(Language o) { return getName().compareTo(o.getName()); } }
private LanguageRegistry() { List<Language> languagesList = new ArrayList<>(); // Use current class' classloader instead of the threads context classloader, see https://github.com/pmd/pmd/issues/1377 ServiceLoader<Language> languageLoader = ServiceLoader.load(Language.class, getClass().getClassLoader()); Iterator<Language> iterator = languageLoader.iterator(); while (iterator.hasNext()) { try { Language language = iterator.next(); languagesList.add(language); } catch (UnsupportedClassVersionError e) { // Some languages require java8 and are therefore only available // if java8 or later is used as runtime. System.err.println("Ignoring language for PMD: " + e.toString()); } } // sort languages by terse name. Avoiding differences in the order of languages // across JVM versions / OS. Collections.sort(languagesList, new Comparator<Language>() { @Override public int compare(Language o1, Language o2) { return o1.getTerseName().compareToIgnoreCase(o2.getTerseName()); } }); // using a linked hash map to maintain insertion order languages = new LinkedHashMap<>(); for (Language language : languagesList) { languages.put(language.getName(), language); } }
List<Map<String, Object>> generateRuleReferenceSection(Map<Language, List<RuleSet>> sortedRulesets) { List<Map<String, Object>> newFolderItems = new ArrayList<>(); for (Map.Entry<Language, List<RuleSet>> entry : sortedRulesets.entrySet()) { Map<String, Object> newFolderItem = new LinkedHashMap<>(); newFolderItem.put("title", null); newFolderItem.put("output", "web, pdf"); Map<String, Object> subfolder = new LinkedHashMap<>(); newFolderItem.put("subfolders", Arrays.asList(subfolder)); subfolder.put("title", entry.getKey().getName() + " Rules"); subfolder.put("output", "web, pdf"); List<Map<String, Object>> subfolderitems = new ArrayList<>(); subfolder.put("subfolderitems", subfolderitems); Map<String, Object> ruleIndexSubfolderItem = new LinkedHashMap<>(); ruleIndexSubfolderItem.put("title", "Index"); ruleIndexSubfolderItem.put("output", "web, pdf"); ruleIndexSubfolderItem.put("url", "/pmd_rules_" + entry.getKey().getTerseName() + ".html"); subfolderitems.add(ruleIndexSubfolderItem); for (RuleSet ruleset : entry.getValue()) { Map<String, Object> subfolderitem = new LinkedHashMap<>(); subfolderitem.put("title", ruleset.getName()); subfolderitem.put("output", "web, pdf"); subfolderitem.put("url", "/pmd_rules_" + entry.getKey().getTerseName() + "_" + RuleSetUtils.getRuleSetFilename(ruleset) + ".html"); subfolderitems.add(subfolderitem); } newFolderItems.add(newFolderItem); } return newFolderItems; }
lines.add("title: " + entry.getKey().getName() + " Rules"); lines.add("tags: [rule_references, " + languageTersename + "]"); lines.add("summary: Index of all built-in rules available for " + entry.getKey().getName()); lines.add("language_name: " + entry.getKey().getName()); lines.add("permalink: " + LANGUAGE_INDEX_PERMALINK_PATTERN.replace("${language.tersename}", languageTersename)); lines.add("folder: pmd/rules");
Language language = entry.getKey(); String languageTersename = language.getTerseName(); String languageName = language.getName(); for (RuleSet ruleset : entry.getValue()) { String rulesetFilename = RuleSetUtils.getRuleSetFilename(ruleset); + rule.getLanguage().getName() + " " + rule.getMinimumLanguageVersion().getVersion()); lines.add("");
System.out.println("Using " + language.getName() + " " + languageVersion.getVersion());
@Override public int compareTo(Language o) { return getName().compareTo(o.getName()); } }
private LanguageRegistry() { List<Language> languagesList = new ArrayList<>(); // Use current class' classloader instead of the threads context classloader, see https://github.com/pmd/pmd/issues/1377 ServiceLoader<Language> languageLoader = ServiceLoader.load(Language.class, getClass().getClassLoader()); Iterator<Language> iterator = languageLoader.iterator(); while (iterator.hasNext()) { try { Language language = iterator.next(); languagesList.add(language); } catch (UnsupportedClassVersionError e) { // Some languages require java8 and are therefore only available // if java8 or later is used as runtime. System.err.println("Ignoring language for PMD: " + e.toString()); } } // sort languages by terse name. Avoiding differences in the order of languages // across JVM versions / OS. Collections.sort(languagesList, new Comparator<Language>() { @Override public int compare(Language o1, Language o2) { return o1.getTerseName().compareToIgnoreCase(o2.getTerseName()); } }); // using a linked hash map to maintain insertion order languages = new LinkedHashMap<>(); for (Language language : languagesList) { languages.put(language.getName(), language); } }
System.out.println("Using " + language.getName() + " " + languageVersion.getVersion());