diff --git a/plugins/devkit/devkit-core/resources/org/jetbrains/idea/devkit/DevKitBundle.properties b/plugins/devkit/devkit-core/resources/org/jetbrains/idea/devkit/DevKitBundle.properties index 2b5c1ab4a3fd..51c3e35c8ab3 100644 --- a/plugins/devkit/devkit-core/resources/org/jetbrains/idea/devkit/DevKitBundle.properties +++ b/plugins/devkit/devkit-core/resources/org/jetbrains/idea/devkit/DevKitBundle.properties @@ -160,7 +160,7 @@ inspections.plugin.xml.ep.both.name.and.qualifiedName= must not inspections.plugin.xml.ep.missing.name.and.qualifiedName= must specify either 'name' or 'qualifiedName' attribute inspections.plugin.xml.use.defaultExtensionNs=Use defaultExtensionNs instead inspections.plugin.xml.specify.defaultExtensionNs.explicitly=Specify defaultExtensionNs="{0}" explicitly -inspections.plugin.xml.until.since.build.invalid=Invalid build number ''{0}'' (Documentation) +inspections.plugin.xml.invalid.build.number=Invalid build number ''{0}'' (Documentation) inspections.plugin.xml.until.build.use.asterisk.instead.of.big.number=Don''t use ''{0}'' in ''until-build'', use ''*'' instead inspections.plugin.xml.until.build.misleading.plain.number=Plain numbers in ''until-build'' attribute may be misleading. ''{0}'' means the same as ''{0}.0'', so the plugin won''t be compatible with {0}.* builds. It''s better to specify ''{1}'' instead. inspections.plugin.xml.until.build.must.be.greater.than.since.build="until-build" must be greater than "since-build" diff --git a/plugins/devkit/devkit-core/src/dom/IdeaVersion.java b/plugins/devkit/devkit-core/src/dom/IdeaVersion.java index 291dfb49daf4..86230e1eb53c 100644 --- a/plugins/devkit/devkit-core/src/dom/IdeaVersion.java +++ b/plugins/devkit/devkit-core/src/dom/IdeaVersion.java @@ -15,22 +15,24 @@ */ package org.jetbrains.idea.devkit.dom; -import com.intellij.util.xml.DomElement; -import com.intellij.util.xml.GenericAttributeValue; -import com.intellij.util.xml.Required; -import com.intellij.util.xml.Stubbed; +import com.intellij.openapi.util.BuildNumber; +import com.intellij.util.xml.*; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.idea.devkit.DevKitBundle; public interface IdeaVersion extends DomElement { @NotNull @Required @Stubbed - GenericAttributeValue getSinceBuild(); + @Convert(BuildNumberConverter.class) + GenericAttributeValue getSinceBuild(); @NotNull @Stubbed - GenericAttributeValue getUntilBuild(); + @Convert(BuildNumberConverter.class) + GenericAttributeValue getUntilBuild(); /** @@ -47,4 +49,26 @@ public interface IdeaVersion extends DomElement { @NotNull @Deprecated GenericAttributeValue getMax(); + + + class BuildNumberConverter extends Converter { + + @Nullable + @Override + public BuildNumber fromString(@Nullable String s, ConvertContext context) { + return s == null ? null : BuildNumber.fromStringOrNull(s); + } + + @Nullable + @Override + public String toString(@Nullable BuildNumber number, ConvertContext context) { + return number == null ? null : number.asString(); + } + + @Nullable + @Override + public String getErrorMessage(@Nullable String s, ConvertContext context) { + return DevKitBundle.message("inspections.plugin.xml.invalid.build.number", s); + } + } } diff --git a/plugins/devkit/devkit-core/src/inspections/PluginXmlDomInspection.java b/plugins/devkit/devkit-core/src/inspections/PluginXmlDomInspection.java index 29ed53bc379e..563e18e3e0ed 100644 --- a/plugins/devkit/devkit-core/src/inspections/PluginXmlDomInspection.java +++ b/plugins/devkit/devkit-core/src/inspections/PluginXmlDomInspection.java @@ -476,15 +476,15 @@ public class PluginXmlDomInspection extends BasicDomElementsInspection sinceBuild = ideaVersion.getSinceBuild(); - GenericAttributeValue untilBuild = ideaVersion.getUntilBuild(); + GenericAttributeValue sinceBuild = ideaVersion.getSinceBuild(); + GenericAttributeValue untilBuild = ideaVersion.getUntilBuild(); if (!DomUtil.hasXml(sinceBuild) && !DomUtil.hasXml(untilBuild)) { return; } - BuildNumber sinceBuildNumber = parseBuildNumber(sinceBuild, holder); - BuildNumber untilBuildNumber = parseBuildNumber(untilBuild, holder); + BuildNumber sinceBuildNumber = sinceBuild.getValue(); + BuildNumber untilBuildNumber = untilBuild.getValue(); if (sinceBuildNumber == null || untilBuildNumber == null) return; int compare = Comparing.compare(sinceBuildNumber, untilBuildNumber); @@ -493,18 +493,6 @@ public class PluginXmlDomInspection extends BasicDomElementsInspection build, - DomElementAnnotationHolder holder) { - try { - return BuildNumber.fromString(build.getStringValue()); - } - catch (RuntimeException e) { - holder.createProblem(build, DevKitBundle.message("inspections.plugin.xml.until.since.build.invalid", build.getStringValue())); - return null; - } - } - private static void highlightUntilBuild(IdeaVersion ideaVersion, DomElementAnnotationHolder holder) { String untilBuild = ideaVersion.getUntilBuild().getStringValue(); if (untilBuild != null && isStarSupported(ideaVersion.getSinceBuild().getStringValue())) { diff --git a/plugins/devkit/devkit-core/src/inspections/missingApi/MissingRecentApiInspection.kt b/plugins/devkit/devkit-core/src/inspections/missingApi/MissingRecentApiInspection.kt index b08980fd3837..ed5221df4344 100644 --- a/plugins/devkit/devkit-core/src/inspections/missingApi/MissingRecentApiInspection.kt +++ b/plugins/devkit/devkit-core/src/inspections/missingApi/MissingRecentApiInspection.kt @@ -120,8 +120,8 @@ class MissingRecentApiInspection : LocalInspectionTool() { private fun getSinceUntilRange(pluginXml: XmlFile): SinceUntilRange? { val ideaPlugin = DescriptorUtil.getIdeaPlugin(pluginXml) ?: return null val ideaVersion = ideaPlugin.rootElement.ideaVersion - val sinceBuild = ideaVersion.sinceBuild.stringValue.orEmpty().let { BuildNumber.fromStringOrNull(it) } - val untilBuild = ideaVersion.untilBuild.stringValue.orEmpty().let { BuildNumber.fromStringOrNull(it) } + val sinceBuild = ideaVersion.sinceBuild.value + val untilBuild = ideaVersion.untilBuild.value return SinceUntilRange(sinceBuild, untilBuild) }