aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Converters
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2020-08-04 19:08:10 -0600
committerSean Hall <r.sean.hall@gmail.com>2020-08-09 10:39:59 -0600
commit84a26c3bf9d7a88a7dcbbca4d65b004307600ba2 (patch)
tree064151cdb51794e1ce97e47a6e8ddd4bb63ec59d /src/WixToolset.Converters
parent50be148eff5ab3081498c9bb91772abc19741e40 (diff)
downloadwix-84a26c3bf9d7a88a7dcbbca4d65b004307600ba2.tar.gz
wix-84a26c3bf9d7a88a7dcbbca4d65b004307600ba2.tar.bz2
wix-84a26c3bf9d7a88a7dcbbca4d65b004307600ba2.zip
WIXFEAT:4763 Change "string" variable type to literal and add "formatted".
Diffstat (limited to 'src/WixToolset.Converters')
-rw-r--r--src/WixToolset.Converters/WixConverter.cs54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/WixToolset.Converters/WixConverter.cs b/src/WixToolset.Converters/WixConverter.cs
index c9ebdfd3..e4903bcb 100644
--- a/src/WixToolset.Converters/WixConverter.cs
+++ b/src/WixToolset.Converters/WixConverter.cs
@@ -73,6 +73,7 @@ namespace WixToolset.Converters
73 private static readonly XName ShortcutPropertyElementName = WixNamespace + "ShortcutProperty"; 73 private static readonly XName ShortcutPropertyElementName = WixNamespace + "ShortcutProperty";
74 private static readonly XName TextElementName = WixNamespace + "Text"; 74 private static readonly XName TextElementName = WixNamespace + "Text";
75 private static readonly XName UITextElementName = WixNamespace + "UIText"; 75 private static readonly XName UITextElementName = WixNamespace + "UIText";
76 private static readonly XName VariableElementName = WixNamespace + "Variable";
76 private static readonly XName UtilCloseApplicationElementName = WixUtilNamespace + "CloseApplication"; 77 private static readonly XName UtilCloseApplicationElementName = WixUtilNamespace + "CloseApplication";
77 private static readonly XName UtilPermissionExElementName = WixUtilNamespace + "PermissionEx"; 78 private static readonly XName UtilPermissionExElementName = WixUtilNamespace + "PermissionEx";
78 private static readonly XName UtilXmlConfigElementName = WixUtilNamespace + "XmlConfig"; 79 private static readonly XName UtilXmlConfigElementName = WixUtilNamespace + "XmlConfig";
@@ -162,6 +163,7 @@ namespace WixToolset.Converters
162 { WixConverter.ShortcutPropertyElementName, this.ConvertShortcutPropertyElement }, 163 { WixConverter.ShortcutPropertyElementName, this.ConvertShortcutPropertyElement },
163 { WixConverter.TextElementName, this.ConvertTextElement }, 164 { WixConverter.TextElementName, this.ConvertTextElement },
164 { WixConverter.UITextElementName, this.ConvertUITextElement }, 165 { WixConverter.UITextElementName, this.ConvertUITextElement },
166 { WixConverter.VariableElementName, this.ConvertVariableElement },
165 { WixConverter.UtilCloseApplicationElementName, this.ConvertUtilCloseApplicationElementName }, 167 { WixConverter.UtilCloseApplicationElementName, this.ConvertUtilCloseApplicationElementName },
166 { WixConverter.UtilPermissionExElementName, this.ConvertUtilPermissionExElement }, 168 { WixConverter.UtilPermissionExElementName, this.ConvertUtilPermissionExElement },
167 { WixConverter.UtilXmlConfigElementName, this.ConvertUtilXmlConfigElement }, 169 { WixConverter.UtilXmlConfigElementName, this.ConvertUtilXmlConfigElement },
@@ -814,6 +816,28 @@ namespace WixToolset.Converters
814 } 816 }
815 } 817 }
816 818
819 private void ConvertVariableElement(XElement xVariable)
820 {
821 var xType = xVariable.Attribute("Type");
822 var xValue = xVariable.Attribute("Value");
823 if (this.SourceVersion < 4)
824 {
825 if (xType == null)
826 {
827 if (WasImplicitlyStringTyped(xValue?.Value) &&
828 this.OnError(ConverterTestType.AssignVariableTypeFormatted, xVariable, "The \"string\" variable type now denotes a literal string. Use \"formatted\" to keep the previous behavior."))
829 {
830 xVariable.Add(new XAttribute("Type", "formatted"));
831 }
832 }
833 else if (xType.Value == "string" &&
834 this.OnError(ConverterTestType.AssignVariableTypeFormatted, xVariable, "The \"string\" variable type now denotes a literal string. Use \"formatted\" to keep the previous behavior."))
835 {
836 xType.Value = "formatted";
837 }
838 }
839 }
840
817 private void ConvertPropertyElement(XElement xProperty) 841 private void ConvertPropertyElement(XElement xProperty)
818 { 842 {
819 var xId = xProperty.Attribute("Id"); 843 var xId = xProperty.Attribute("Id");
@@ -1105,6 +1129,31 @@ namespace WixToolset.Converters
1105 } 1129 }
1106 } 1130 }
1107 1131
1132 private static bool WasImplicitlyStringTyped(string value)
1133 {
1134 if (value == null)
1135 {
1136 return false;
1137 }
1138 else if (value.StartsWith("v", StringComparison.OrdinalIgnoreCase))
1139 {
1140 if (Int32.TryParse(value.Substring(1), NumberStyles.None, CultureInfo.InvariantCulture.NumberFormat, out var _))
1141 {
1142 return false;
1143 }
1144 else if (Version.TryParse(value.Substring(1), out var _))
1145 {
1146 return false;
1147 }
1148 }
1149 else if (Int64.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture.NumberFormat, out var _))
1150 {
1151 return false;
1152 }
1153
1154 return true;
1155 }
1156
1108 /// <summary> 1157 /// <summary>
1109 /// Converter test types. These are used to condition error messages down to warnings. 1158 /// Converter test types. These are used to condition error messages down to warnings.
1110 /// </summary> 1159 /// </summary>
@@ -1229,6 +1278,11 @@ namespace WixToolset.Converters
1229 /// DpiAwareness is new and is defaulted to 'perMonitorV2' which is a change in behavior. 1278 /// DpiAwareness is new and is defaulted to 'perMonitorV2' which is a change in behavior.
1230 /// </summary> 1279 /// </summary>
1231 AssignBootstrapperApplicationDpiAwareness, 1280 AssignBootstrapperApplicationDpiAwareness,
1281
1282 /// <summary>
1283 /// The string variable type was previously treated as formatted.
1284 /// </summary>
1285 AssignVariableTypeFormatted,
1232 } 1286 }
1233 } 1287 }
1234} 1288}