@joebigelow / wix / commits / 7462108b

Add tuple.IsNull(), remove fields when set to default and other small fixes

Rob Mensching committed May 24, 2019 at 08:47 UTC 7462108b714d07161126dcedda5312daef54ae13
7 files changed +78 -81
src/WixToolset.Data/IntermediateField.cs
+11 -30
@@ -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 {
@@ -9,10 +9,7 @@ namespace WixToolset.Data
9 [DebuggerDisplay("Name={Name,nq} Type={Type} Value={Value?.AsString()}")]
10 public class IntermediateField
11 {
12 - public IntermediateField(IntermediateFieldDefinition definition)
13 - {
14 - this.Definition = definition;
15 - }
12 + public IntermediateField(IntermediateFieldDefinition definition) => this.Definition = definition;
13
14 public IntermediateFieldDefinition Definition { get; }
15
@@ -26,46 +23,30 @@ namespace WixToolset.Data
23
24 internal IntermediateFieldValue Value { get; set; }
25
29 - public static explicit operator bool(IntermediateField field)
30 - {
31 - return field.AsBool();
32 - }
26 + public static explicit operator bool(IntermediateField field) => field.AsBool();
27
34 - public static explicit operator bool? (IntermediateField field)
35 - {
36 - return field.AsNullableBool();
37 - }
28 + public static explicit operator bool? (IntermediateField field) => field.AsNullableBool();
29
39 - public static explicit operator int(IntermediateField field)
40 - {
41 - return field.AsNumber();
42 - }
30 + public static explicit operator int(IntermediateField field) => field.AsNumber();
31
44 - public static explicit operator int? (IntermediateField field)
45 - {
46 - return field.AsNullableNumber();
47 - }
32 + public static explicit operator int? (IntermediateField field) => field.AsNullableNumber();
33
49 - public static explicit operator string(IntermediateField field)
50 - {
51 - return field.AsString();
52 - }
34 + public static explicit operator string(IntermediateField field) => field.AsString();
35
36 internal static IntermediateField Deserialize(IntermediateFieldDefinition definition, Uri baseUri, JsonObject jsonObject)
37 {
56 - var field = new IntermediateField(definition);
38 + IntermediateField field = null;
39
40 if (jsonObject != null)
41 {
42 + field = new IntermediateField(definition);
43 +
44 field.Value = IntermediateFieldValue.Deserialize(jsonObject, baseUri, definition.Type);
45 }
46
47 return field;
48 }
49
66 - internal JsonObject Serialize()
67 - {
68 - return this.Value?.Serialize();
69 - }
50 + internal JsonObject Serialize() => this.Value?.Serialize();
51 }
52 }
src/WixToolset.Data/IntermediateFieldExtensions.cs
+2
@@ -9,6 +9,8 @@ namespace WixToolset.Data
9 [ThreadStatic]
10 internal static string valueContext;
11
12 + public static bool IsNull(this IntermediateField field) => field?.Value?.Data == null;
13 +
14 public static bool AsBool(this IntermediateField field)
15 {
16 if (field == null || field.Value == null || field.Value.Data == null)
src/WixToolset.Data/IntermediateFieldValue.cs
+6 -24
@@ -15,35 +15,17 @@ namespace WixToolset.Data
15
16 public IntermediateFieldValue PreviousValue { get; internal set; }
17
18 - public static explicit operator bool(IntermediateFieldValue value)
19 - {
20 - return value.AsBool();
21 - }
18 + public static explicit operator bool(IntermediateFieldValue value) => value.AsBool();
19
23 - public static explicit operator bool? (IntermediateFieldValue value)
24 - {
25 - return value.AsNullableBool();
26 - }
20 + public static explicit operator bool? (IntermediateFieldValue value) => value.AsNullableBool();
21
28 - public static explicit operator int(IntermediateFieldValue value)
29 - {
30 - return value.AsNumber();
31 - }
22 + public static explicit operator int(IntermediateFieldValue value) => value.AsNumber();
23
33 - public static explicit operator int? (IntermediateFieldValue value)
34 - {
35 - return value.AsNullableNumber();
36 - }
24 + public static explicit operator int? (IntermediateFieldValue value) => value.AsNullableNumber();
25
38 - public static explicit operator IntermediateFieldPathValue(IntermediateFieldValue value)
39 - {
40 - return value.AsPath();
41 - }
26 + public static explicit operator IntermediateFieldPathValue(IntermediateFieldValue value) => value.AsPath();
27
43 - public static explicit operator string(IntermediateFieldValue value)
44 - {
45 - return value.AsString();
46 - }
28 + public static explicit operator string(IntermediateFieldValue value) => value.AsString();
29
30 internal static IntermediateFieldValue Deserialize(JsonObject jsonObject, Uri baseUri, IntermediateFieldType type)
31 {
src/WixToolset.Data/IntermediateTuple.cs
+2 -2
@@ -46,9 +46,9 @@ namespace WixToolset.Data
46 creator.TryGetTupleDefinitionByName(definitionName, out var definition); // TODO: this isn't sufficient.
47 var tuple = definition.CreateTuple(sourceLineNumbers, id);
48
49 - for (var i = 0; i < fieldsJson.Count; ++i)
49 + for (var i = 0; i < fieldsJson.Count && i < tuple.Fields.Length; ++i)
50 {
51 - if (tuple.Fields.Length > i && fieldsJson[i] is JsonObject fieldJson)
51 + if (fieldsJson[i] is JsonObject fieldJson)
52 {
53 tuple.Fields[i] = IntermediateField.Deserialize(tuple.Definition.FieldDefinitions[i], baseUri, fieldJson);
54 }
src/WixToolset.Data/IntermediateTupleExtensions.cs
+53 -21
@@ -1,36 +1,26 @@
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 {
5 public static class IntermediateTupleExtensions
6 {
7 - public static bool AsBool(this IntermediateTuple tuple, int index)
8 - {
9 - return tuple?.Fields[index].AsBool() ?? false;
10 - }
7 + public static bool AsBool(this IntermediateTuple tuple, int index) => tuple?.Fields[index].AsBool() ?? false;
8
12 - public static bool? AsNullableBool(this IntermediateTuple tuple, int index)
13 - {
14 - return tuple?.Fields[index].AsNullableBool();
15 - }
9 + public static bool? AsNullableBool(this IntermediateTuple tuple, int index) => tuple?.Fields[index].AsNullableBool();
10
17 - public static int AsNumber(this IntermediateTuple tuple, int index)
18 - {
19 - return tuple?.Fields[index].AsNumber() ?? 0;
20 - }
11 + public static int AsNumber(this IntermediateTuple tuple, int index) => tuple?.Fields[index].AsNumber() ?? 0;
12
22 - public static int? AsNullableNumber(this IntermediateTuple tuple, int index)
23 - {
24 - return tuple?.Fields[index].AsNullableNumber();
25 - }
13 + public static int? AsNullableNumber(this IntermediateTuple tuple, int index) => tuple?.Fields[index].AsNullableNumber();
14
27 - public static string AsString(this IntermediateTuple tuple, int index)
28 - {
29 - return tuple?.Fields[index].AsString();
30 - }
15 + public static string AsString(this IntermediateTuple tuple, int index) => tuple?.Fields[index].AsString();
16
17 public static IntermediateField Set(this IntermediateTuple tuple, int index, bool value)
18 {
19 + if (value == default && NoFieldMetadata(tuple, index))
20 + {
21 + return tuple.Fields[index] = null;
22 + }
23 +
24 var definition = tuple.Definition.FieldDefinitions[index];
25
26 var field = tuple.Fields[index].Set(definition, value);
@@ -40,6 +30,11 @@ namespace WixToolset.Data
30
31 public static IntermediateField Set(this IntermediateTuple tuple, int index, bool? value)
32 {
33 + if (value == default && NoFieldMetadata(tuple, index))
34 + {
35 + return tuple.Fields[index] = null;
36 + }
37 +
38 var definition = tuple.Definition.FieldDefinitions[index];
39
40 var field = tuple.Fields[index].Set(definition, value);
@@ -49,6 +44,11 @@ namespace WixToolset.Data
44
45 public static IntermediateField Set(this IntermediateTuple tuple, int index, long value)
46 {
47 + if (value == default && NoFieldMetadata(tuple, index))
48 + {
49 + return tuple.Fields[index] = null;
50 + }
51 +
52 var definition = tuple.Definition.FieldDefinitions[index];
53
54 var field = tuple.Fields[index].Set(definition, value);
@@ -58,6 +58,11 @@ namespace WixToolset.Data
58
59 public static IntermediateField Set(this IntermediateTuple tuple, int index, long? value)
60 {
61 + if (value == default && NoFieldMetadata(tuple, index))
62 + {
63 + return tuple.Fields[index] = null;
64 + }
65 +
66 var definition = tuple.Definition.FieldDefinitions[index];
67
68 var field = tuple.Fields[index].Set(definition, value);
@@ -67,6 +72,11 @@ namespace WixToolset.Data
72
73 public static IntermediateField Set(this IntermediateTuple tuple, int index, int value)
74 {
75 + if (value == default && NoFieldMetadata(tuple, index))
76 + {
77 + return tuple.Fields[index] = null;
78 + }
79 +
80 var definition = tuple.Definition.FieldDefinitions[index];
81
82 var field = tuple.Fields[index].Set(definition, value);
@@ -76,6 +86,11 @@ namespace WixToolset.Data
86
87 public static IntermediateField Set(this IntermediateTuple tuple, int index, int? value)
88 {
89 + if (value == default && NoFieldMetadata(tuple, index))
90 + {
91 + return tuple.Fields[index] = null;
92 + }
93 +
94 var definition = tuple.Definition.FieldDefinitions[index];
95
96 var field = tuple.Fields[index].Set(definition, value);
@@ -85,6 +100,11 @@ namespace WixToolset.Data
100
101 public static IntermediateField Set(this IntermediateTuple tuple, int index, IntermediateFieldPathValue value)
102 {
103 + if (value == default && NoFieldMetadata(tuple, index))
104 + {
105 + return tuple.Fields[index] = null;
106 + }
107 +
108 var definition = tuple.Definition.FieldDefinitions[index];
109
110 var field = tuple.Fields[index].Set(definition, value);
@@ -94,11 +114,23 @@ namespace WixToolset.Data
114
115 public static IntermediateField Set(this IntermediateTuple tuple, int index, string value)
116 {
117 + if (value == default && NoFieldMetadata(tuple, index))
118 + {
119 + return tuple.Fields[index] = null;
120 + }
121 +
122 var definition = tuple.Definition.FieldDefinitions[index];
123
124 var field = tuple.Fields[index].Set(definition, value);
125
126 return tuple.Fields[index] = field;
127 }
128 +
129 + private static bool NoFieldMetadata(IntermediateTuple tuple, int index)
130 + {
131 + var field = tuple?.Fields[index];
132 +
133 + return field?.Context == null && field?.PreviousValue == null;
134 + }
135 }
136 }
src/WixToolset.Data/Tuples/RemoveRegistryTuple.cs
+1 -1
@@ -51,7 +51,7 @@ namespace WixToolset.Data.Tuples
51
52 public RegistryRootType Root
53 {
54 - get => (RegistryRootType)this.Fields[(int)RemoveRegistryTupleFields.Root]?.AsNumber();
54 + get => (RegistryRootType)this.Fields[(int)RemoveRegistryTupleFields.Root].AsNumber();
55 set => this.Set((int)RemoveRegistryTupleFields.Root, (int)value);
56 }
57
src/WixToolset.Data/Tuples/WixBundleTuple.cs
+3 -3
@@ -32,7 +32,7 @@ namespace WixToolset.Data
32 new IntermediateFieldDefinition(nameof(WixBundleTupleFields.UpgradeCode), IntermediateFieldType.String),
33 new IntermediateFieldDefinition(nameof(WixBundleTupleFields.BundleId), IntermediateFieldType.String),
34 new IntermediateFieldDefinition(nameof(WixBundleTupleFields.ProviderKey), IntermediateFieldType.String),
35 - new IntermediateFieldDefinition(nameof(WixBundleTupleFields.PerMachine), IntermediateFieldType.Number),
35 + new IntermediateFieldDefinition(nameof(WixBundleTupleFields.PerMachine), IntermediateFieldType.Bool),
36 },
37 typeof(WixBundleTuple));
38 }
@@ -211,9 +211,9 @@ namespace WixToolset.Data.Tuples
211 set => this.Set((int)WixBundleTupleFields.ProviderKey, value);
212 }
213
214 - public int PerMachine
214 + public bool PerMachine
215 {
216 - get => (int)this.Fields[(int)WixBundleTupleFields.PerMachine];
216 + get => (bool)this.Fields[(int)WixBundleTupleFields.PerMachine];
217 set => this.Set((int)WixBundleTupleFields.PerMachine, value);
218 }
219 }