void (IdeaPlugin ideaPlugin, DomElementAnnotationHolder holder, @NotNull Module module) { //noinspection deprecation highlightAttributeNotUsedAnymore(ideaPlugin.getIdeaPluginVersion(), holder); //noinspection deprecation if (DomUtil.hasXml(ideaPlugin.getUseIdeaClassloader())) { //noinspection deprecation highlightDeprecated(ideaPlugin.getUseIdeaClassloader(), DevKitBundle.message("inspections.plugin.xml.deprecated"), holder, true, true); } checkMaxLength(ideaPlugin.getUrl(), 255, holder); checkMaxLength(ideaPlugin.getId(), 255, holder); checkTemplateText(ideaPlugin.getName(), "Plugin display name here", holder); checkTemplateTextContainsWord(ideaPlugin.getName(), holder, "plugin", "IntelliJ", "JetBrains"); checkMaxLength(ideaPlugin.getName(), 255, holder); checkMaxLength(ideaPlugin.getDescription(), 65535, holder); checkHasRealText(ideaPlugin.getDescription(), holder); checkTemplateTextContains(ideaPlugin.getDescription(), "Enter short description for your plugin here.", holder); checkTemplateTextContains(ideaPlugin.getDescription(), "most HTML tags may be used", holder); checkMaxLength(ideaPlugin.getChangeNotes(), 65535, holder); checkTemplateTextContains(ideaPlugin.getChangeNotes(), "Add change notes here", holder); checkTemplateTextContains(ideaPlugin.getChangeNotes(), "most HTML tags may be used", holder); if (!ideaPlugin.hasRealPluginId()) return; MultiMap<String, Dependency> dependencies = MultiMap.create(); ideaPlugin.getDepends().forEach(dependency -> { if (DomUtil.hasXml(dependency.getConfigFile())) { dependencies.putValue(dependency.getConfigFile().getStringValue(), dependency); } }); for (Map.Entry<String, Collection<Dependency>> entry : dependencies.entrySet()) { if (entry.getValue().size() > 1) { for (Dependency dependency : entry.getValue()) { if (dependency.getXmlTag() instanceof IncludedXmlTag) continue; highlightRedundant(dependency, DevKitBundle.message("inspections.plugin.xml.duplicated.dependency", entry.getKey()), ProblemHighlightType.ERROR, holder); } } } boolean isNotIdeaProject = !PsiUtil.isIdeaProject(module.getProject()); if (isNotIdeaProject && !DomUtil.hasXml(ideaPlugin.getVersion()) && PluginModuleType.isOfType(module)) { holder.createProblem(ideaPlugin, DevKitBundle.message("inspections.plugin.xml.version.must.be.specified"), new AddMissingMainTag(DevKitBundle.message("inspections.plugin.xml.add.version.tag"), ideaPlugin.getVersion(), "")); } checkMaxLength(ideaPlugin.getVersion(), 64, holder); if (isNotIdeaProject && !DomUtil.hasXml(ideaPlugin.getVendor())) { holder.createProblem(ideaPlugin, DevKitBundle.message("inspections.plugin.xml.vendor.must.be.specified"), new AddMissingMainTag(DevKitBundle.message("inspections.plugin.xml.add.vendor.tag"), ideaPlugin.getVendor(), "")); } if (DomUtil.hasXml(ideaPlugin.getPackage()) && !isIdeaProjectOrJetBrains(ideaPlugin)) { highlightJetbrainsOnly(ideaPlugin.getPackage(), holder); } }