@joebigelow / wix-1 / commits / 95d2fa40

Correctly set the underlying data types when intermediate value loaded

Rob Mensching committed May 12, 2019 at 15:42 UTC 95d2fa40d86b9aa120c27703b653a90ee89058f8
1 file changed +42 -10
src/WixToolset.Data/IntermediateFieldValue.cs
+42 -10
@@ -1,4 +1,4 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
1 +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3 namespace WixToolset.Data
4 {
@@ -55,18 +55,45 @@ namespace WixToolset.Data
55
56 var value = data;
57
58 - if (data is string)
58 + switch (value)
59 {
60 - }
61 - else if (data is long)
62 - {
63 - if (type == IntermediateFieldType.Number)
60 + case int intData:
61 + switch (type)
62 {
65 - value = Convert.ToInt32(data);
63 + case IntermediateFieldType.Bool:
64 + value = intData != 0;
65 + break;
66 +
67 + case IntermediateFieldType.LargeNumber:
68 + value = Convert.ToInt64(data);
69 + break;
70 +
71 + case IntermediateFieldType.Path:
72 + case IntermediateFieldType.String:
73 + value = intData.ToString();
74 + break;
75 }
67 - }
68 - else if (data is JsonObject jsonData)
69 - {
76 + break;
77 +
78 + case long longData:
79 + switch (type)
80 + {
81 + case IntermediateFieldType.Bool:
82 + value = longData != 0;
83 + break;
84 +
85 + case IntermediateFieldType.Number:
86 + value = Convert.ToInt32(longData);
87 + break;
88 +
89 + case IntermediateFieldType.Path:
90 + case IntermediateFieldType.String:
91 + value = longData.ToString();
92 + break;
93 + }
94 + break;
95 +
96 + case JsonObject jsonData:
97 jsonData.TryGetValue("embeddedIndex", out var embeddedIndex);
98
99 value = new IntermediateFieldPathValue
@@ -75,6 +102,11 @@ namespace WixToolset.Data
102 EmbeddedFileIndex = (embeddedIndex == null) ? null : (int?)Convert.ToInt32(embeddedIndex),
103 Path = jsonData.GetValueOrDefault<string>("path"),
104 };
105 + break;
106 +
107 + // Nothing to do for this case, so leave it out.
108 + // case string stringData:
109 + // break;
110 }
111
112 var previousValueJson = jsonObject.GetValueOrDefault<JsonObject>("prev");