IDEA-CR-60663 support placeholders in product-descriptor

GitOrigin-RevId: b14320d4c5f46b10e5bc3081920838175ae7e58b
This commit is contained in:
Gregory.Shrago
2020-05-13 14:41:04 +00:00
committed by intellij-monorepo-bot
parent 52380ad173
commit f9c36ed11f
6 changed files with 44 additions and 14 deletions
@@ -190,7 +190,8 @@ inspections.plugin.xml.do.not.use.template.text=Do not use template text ''{0}''
inspections.plugin.xml.must.not.contain.template.text=Must not contain template text ''{0}''
inspections.plugin.xml.value.exceeds.max.length=Value exceeds maximum length {0}
inspections.plugin.xml.value.must.have.minimum.length=Value must have minimum length of {0}
inspections.plugin.xml.product.descriptor.invalid.date=Date must be in YYYYMMDD format
inspections.plugin.xml.product.descriptor.invalid.date=Date must be a YYYYMMDD integer, or a placeholder (e.g. __DATE__)
inspections.plugin.xml.product.descriptor.invalid.version=Version must be an integer, or a placeholder (e.g. __VERSION__)
inspections.plugin.xml.no.plugin.icon.svg.file=<html>Plugin should provide ''{0}'' (<a href="https://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/plugin_icon_file.html">Documentation</a>)</html>
inspections.plugin.xml.component.interface.class.redundant=Redundant tag 'interfaceClass'
inspections.plugin.xml.service.interface.class.redundant=Redundant attribute 'serviceInterface'
@@ -21,7 +21,7 @@ public interface ProductDescriptor extends DomElement {
@NotNull
@Required
GenericAttributeValue<Integer> getReleaseVersion();
GenericAttributeValue<String> getReleaseVersion();
@Nullable
GenericAttributeValue<Boolean> getOptional();
@@ -805,17 +805,31 @@ public final class PluginXmlDomInspection extends DevKitPluginXmlInspectionBase
checkMaxLength(productDescriptor.getCode(), 15, holder);
String releaseDate = productDescriptor.getReleaseDate().getValue();
if (releaseDate == null) return;
if (releaseDate != null && !isPlaceHolder(releaseDate)) {
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd", Locale.US);
dateFormat.setLenient(false);
dateFormat.parse(releaseDate);
}
catch (ParseException e) {
holder.createProblem(productDescriptor.getReleaseDate(),
DevKitBundle.message("inspections.plugin.xml.product.descriptor.invalid.date"));
}
}
String version = productDescriptor.getReleaseVersion().getValue();
if (version != null && !isPlaceHolder(version)) {
try {
Integer.parseInt(version);
}
catch (NumberFormatException e) {
holder.createProblem(productDescriptor.getReleaseVersion(),
DevKitBundle.message("inspections.plugin.xml.product.descriptor.invalid.version"));
}
}
}
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd", Locale.US);
dateFormat.setLenient(false);
dateFormat.parse(releaseDate);
}
catch (ParseException e) {
holder.createProblem(productDescriptor.getReleaseDate(),
DevKitBundle.message("inspections.plugin.xml.product.descriptor.invalid.date"));
}
private static boolean isPlaceHolder(@Nullable String value) {
return value != null && value.length() > 4 && value.startsWith("__") && value.endsWith("__");
}
private static void annotateAddToGroup(AddToGroup addToGroup, DomElementAnnotationHolder holder) {
@@ -4,7 +4,7 @@
<<error descr="Value must not be empty">version</error>/>
<product-descriptor code="<error descr="Value exceeds maximum length 15">0123456789012345</error>"
release-date="<error descr="Date must be in YYYYMMDD format">99991399</error>"
release-version="<error descr="Cannot convert empty string to target class 'java.lang.Integer'"></error>"
release-date="<error descr="Date must be a YYYYMMDD integer, or a placeholder (e.g. __DATE__)">99991399</error>"
release-version=<error descr="Value must not be empty"><error descr="Version must be an integer, or a placeholder (e.g. __VERSION__)">""</error></error>
optional="<error descr="Cannot resolve symbol 'yes'">yes</error>"/>
</idea-plugin>
@@ -0,0 +1,11 @@
<idea-plugin>
<id>test</id>
<vendor>JetBrains</vendor>
<version>1.0</version>
<name>some name</name>
<product-descriptor code="PDD"
release-date="__DATE__"
release-version="__VERSION__"
optional="false"/>
</idea-plugin>
@@ -728,6 +728,10 @@ public class MyErrorHandler extends ErrorReportSubmitter {}
doHighlightingTest("productDescriptor.xml")
}
void testProductDescriptorWithPlaceholders() {
doHighlightingTest("productDescriptorWithPlaceholders.xml")
}
void testProductDescriptorInvalid() {
doHighlightingTest("productDescriptorInvalid.xml")
}