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
}