@Override public String getInstalledPluginNameByPath(Project project, @NotNull VirtualFile pluginPath) { String nameFromPluginXml = super.getInstalledPluginNameByPath(project, pluginPath); if (nameFromPluginXml != null) { return nameFromPluginXml; } VirtualFile pluginJson = pluginPath.findChild("plugin.json"); if (pluginJson != null) { String pluginAndVersion = pluginPath.getName(); // pluginName-version TIntArrayList separatorIndexes = new TIntArrayList(); int start = -1; while (true) { start = pluginAndVersion.indexOf('-', start + 1); if (start == -1) break; separatorIndexes.add(start); } if (separatorIndexes.size() == 1) { return pluginAndVersion.substring(0, separatorIndexes.get(0)); } if (!separatorIndexes.isEmpty()) { String json; try { json = VfsUtil.loadText(pluginJson); } catch (IOException e) { return null; } for (int i = 0; i < separatorIndexes.size(); i++) { int idx = separatorIndexes.get(i); String name = pluginAndVersion.substring(0, idx); String version = pluginAndVersion.substring(idx + 1); if (hasValue(PLUGIN_NAME_JSON_PATTERN, json, name) && hasValue(PLUGIN_VERSION_JSON_PATTERN, json, version)) { return name; } } } } return null; }
/** * It's possible that we need to expand quick doc control's width in order to provide better * visual representation (see http://youtrack.jetbrains.com/issue/IDEA-101425). This method * calculates that width expand. * * @param buttonWidth icon button's width * @param updatedText text which will be should at the quick doc control * @return width increase to apply to the target quick doc control (zero if no additional width * increase is required) */ private static int calculateWidthIncrease(int buttonWidth, String updatedText) { int maxLineWidth = 0; TIntArrayList lineWidths = new TIntArrayList(); for (String lineText : StringUtil.split(updatedText, "<br/>")) { String html = HintUtil.prepareHintText(lineText, HintUtil.getInformationHint()); int width = new JLabel(html).getPreferredSize().width; maxLineWidth = Math.max(maxLineWidth, width); lineWidths.add(width); } if (!lineWidths.isEmpty()) { int firstLineAvailableTrailingWidth = maxLineWidth - lineWidths.get(0); if (firstLineAvailableTrailingWidth >= buttonWidth) { return 0; } else { return buttonWidth - firstLineAvailableTrailingWidth; } } return 0; }
public static int getFreeRecord() { if (myFreeRecords.isEmpty()) return 0; return myFreeRecords.remove(myFreeRecords.size() - 1); }