From 336042ac4577c6bd3e28eb901147b9906ffa080c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20C=C3=A9bron?= Date: Mon, 9 Dec 2019 12:30:17 +0100 Subject: [PATCH] [devkit] plugin.xml: verify capitalization GitOrigin-RevId: 3eedf536a0c975ab3aa825262a27b5005707998f --- .../PluginXmlCapitalizationInspection.java | 36 ++++++++++++++----- .../MyBundle.properties | 3 ++ .../pluginXmlCapitalization_Action.xml | 13 +++++++ 3 files changed, 43 insertions(+), 9 deletions(-) diff --git a/plugins/devkit/devkit-core/src/inspections/PluginXmlCapitalizationInspection.java b/plugins/devkit/devkit-core/src/inspections/PluginXmlCapitalizationInspection.java index d585d4feed9e..c7ad5e117f13 100644 --- a/plugins/devkit/devkit-core/src/inspections/PluginXmlCapitalizationInspection.java +++ b/plugins/devkit/devkit-core/src/inspections/PluginXmlCapitalizationInspection.java @@ -28,10 +28,7 @@ import com.intellij.xml.util.XmlUtil; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.idea.devkit.dom.Action; -import org.jetbrains.idea.devkit.dom.ActionOrGroup; -import org.jetbrains.idea.devkit.dom.Extension; -import org.jetbrains.idea.devkit.dom.IdeaPlugin; +import org.jetbrains.idea.devkit.dom.*; import java.util.List; import java.util.Set; @@ -48,11 +45,24 @@ public class PluginXmlCapitalizationInspection extends BasicDomElementsInspectio if (element instanceof ActionOrGroup) { checkActionOrGroup((ActionOrGroup)element, holder); } + else if (element instanceof OverrideText) { + checkOverrideText((OverrideText)element, holder); + } else if (element instanceof Extension) { checkExtension((Extension)element, holder); } } + private static void checkOverrideText(OverrideText overrideText, DomElementAnnotationHolder holder) { + if (checkCapitalization(holder, overrideText.getText(), Nls.Capitalization.Title)) return; + + Action action = overrideText.getParentOfType(Action.class, true); + assert action != null; + final String resourceKey = "action." + action.getId().getStringValue() + "." + overrideText.getPlace().getStringValue() + ".text"; + checkPropertyCapitalization(holder, overrideText, Nls.Capitalization.Title, + resourceKey, true); + } + private static void checkActionOrGroup(ActionOrGroup actionOrGroup, DomElementAnnotationHolder holder) { checkActionOrGroupCapitalization(holder, actionOrGroup, ActionOrGroupText.TEXT); checkActionOrGroupCapitalization(holder, actionOrGroup, ActionOrGroupText.DESCRIPTION); @@ -90,7 +100,16 @@ public class PluginXmlCapitalizationInspection extends BasicDomElementsInspectio final Nls.Capitalization capitalization = actionOrGroupText.myCapitalization; if (checkCapitalization(holder, genericDomValue, capitalization)) return; - final IdeaPlugin ideaPlugin = DomUtil.getParentOfType(actionOrGroup, IdeaPlugin.class, true); + checkPropertyCapitalization(holder, actionOrGroup, capitalization, + "action." + actionOrGroup.getId().getStringValue() + actionOrGroupText.mySuffix, + actionOrGroupText.myRequired.apply(actionOrGroup)); + } + + private static void checkPropertyCapitalization(DomElementAnnotationHolder holder, + DomElement domElement, + Nls.Capitalization capitalization, + String resourceKey, boolean required) { + final IdeaPlugin ideaPlugin = DomUtil.getParentOfType(domElement, IdeaPlugin.class, true); if (ideaPlugin == null) return; final XmlElement resourceBundleTag = ideaPlugin.getResourceBundle().getXmlElement(); @@ -103,15 +122,14 @@ public class PluginXmlCapitalizationInspection extends BasicDomElementsInspectio final PropertiesFileImpl bundleFile = ObjectUtils.tryCast(bundleReference.resolve(), PropertiesFileImpl.class); if (bundleFile == null) return; - final String resourceKey = "action." + actionOrGroup.getId().getStringValue() + actionOrGroupText.mySuffix; final Property property = ObjectUtils.tryCast(bundleFile.findPropertyByKey(resourceKey), Property.class); if (property == null) { - if (actionOrGroupText.myRequired.apply(actionOrGroup)) { - holder.createProblem(actionOrGroup, "Missing resource bundle key '" + resourceKey + "'"); + if (required) { + holder.createProblem(domElement, "Missing resource bundle key '" + resourceKey + "'"); } } else { - highlightCapitalization(holder, actionOrGroup, property.getValue(), capitalization, property); + highlightCapitalization(holder, domElement, property.getValue(), capitalization, property); } } diff --git a/plugins/devkit/devkit-java-tests/testData/inspections/pluginXmlCapitalization/MyBundle.properties b/plugins/devkit/devkit-java-tests/testData/inspections/pluginXmlCapitalization/MyBundle.properties index d22de128371f..c3740a397f85 100644 --- a/plugins/devkit/devkit-java-tests/testData/inspections/pluginXmlCapitalization/MyBundle.properties +++ b/plugins/devkit/devkit-java-tests/testData/inspections/pluginXmlCapitalization/MyBundle.properties @@ -8,3 +8,6 @@ action.BundleActionWrongCasing.description=lower case description action.BundleGroupWrongCasing.text=group lower case text action.BundleGroupWrongCasing.description=group lower case description + +action.OverrideBundleAction.ViaBundle.text=Action Text Override Via Bundle +action.OverrideBundleAction.ViaBundleWrongCase.text=Action Text Override Via Bundle lower case \ No newline at end of file diff --git a/plugins/devkit/devkit-java-tests/testData/inspections/pluginXmlCapitalization/pluginXmlCapitalization_Action.xml b/plugins/devkit/devkit-java-tests/testData/inspections/pluginXmlCapitalization/pluginXmlCapitalization_Action.xml index 532fac00b543..adf724fff5f3 100644 --- a/plugins/devkit/devkit-java-tests/testData/inspections/pluginXmlCapitalization/pluginXmlCapitalization_Action.xml +++ b/plugins/devkit/devkit-java-tests/testData/inspections/pluginXmlCapitalization/pluginXmlCapitalization_Action.xml @@ -33,5 +33,18 @@ <group id="BundleGroupWrongCasing"/> + + + + + + lower case"/> + + + + + <override-text place="ViaBundleWrongCase"/> + <override-text place="ViaBundleMissingKey"/> + \ No newline at end of file