diff options
author | Ron Martin <cpuwzd@comcast.net> | 2023-01-22 21:25:06 -0500 |
---|---|---|
committer | Rob Mensching <rob@firegiant.com> | 2023-02-23 13:01:37 -0700 |
commit | 6784a3e77d9780a43e583981c2e30379579a1915 (patch) | |
tree | 499c103bb95f062269c116dd4baeee14dd1fceb2 | |
parent | 7693f0e773154e963557ab4f2cd71e5250f8563d (diff) | |
download | wix-6784a3e77d9780a43e583981c2e30379579a1915.tar.gz wix-6784a3e77d9780a43e583981c2e30379579a1915.tar.bz2 wix-6784a3e77d9780a43e583981c2e30379579a1915.zip |
Fix Issue 7100
Clean up some issues with ConversionLab
Fix Issue 7100.
Clean up some issues with the use of ConversionLab.
5 files changed, 60 insertions, 20 deletions
diff --git a/src/wix/WixToolset.Converters/ConversionLab.cs b/src/wix/WixToolset.Converters/ConversionLab.cs index 903071f8..727ff1b1 100644 --- a/src/wix/WixToolset.Converters/ConversionLab.cs +++ b/src/wix/WixToolset.Converters/ConversionLab.cs | |||
@@ -40,21 +40,58 @@ namespace WixToolset.Converters | |||
40 | } | 40 | } |
41 | } | 41 | } |
42 | 42 | ||
43 | public void RemoveTargetElement() | 43 | public void InsertElementBeforeTargetElement(XElement newElement) |
44 | { | ||
45 | var index = this.index - 1; | ||
46 | |||
47 | if (0 <= index | ||
48 | && this.siblingNodes[index] is XText leadingText | ||
49 | && String.IsNullOrWhiteSpace(leadingText.Value)) | ||
50 | { | ||
51 | this.siblingNodes.Insert(index, newElement); | ||
52 | this.siblingNodes.Insert(index, new XText(leadingText.Value)); | ||
53 | this.index += 2; | ||
54 | } | ||
55 | } | ||
56 | |||
57 | private bool IsUniqueElement(XElement newElement) | ||
58 | { | ||
59 | foreach (XNode node in this.siblingNodes) | ||
60 | { | ||
61 | if (node is XElement element) | ||
62 | { | ||
63 | if (element.Name == newElement.Name) | ||
64 | { | ||
65 | return false; | ||
66 | } | ||
67 | } | ||
68 | } | ||
69 | |||
70 | return true; | ||
71 | } | ||
72 | |||
73 | public void InsertUniqueElementBeforeTargetElement(XElement newElement) | ||
44 | { | 74 | { |
45 | if (this.index + 1 < this.siblingNodes.Count | 75 | if (this.IsUniqueElement(newElement)) |
46 | && this.siblingNodes[this.index + 1] is XText trailingText | ||
47 | && String.IsNullOrWhiteSpace(trailingText.Value)) | ||
48 | { | 76 | { |
49 | this.siblingNodes.RemoveAt(this.index + 1); | 77 | this.InsertElementBeforeTargetElement(newElement); |
50 | } | 78 | } |
79 | } | ||
80 | |||
81 | public void RemoveTargetElement() | ||
82 | { | ||
51 | this.siblingNodes.RemoveAt(this.index); | 83 | this.siblingNodes.RemoveAt(this.index); |
52 | if (0 < this.index | 84 | |
53 | && this.siblingNodes[this.index - 1] is XText leadingText | 85 | var index = this.index - 1; |
86 | |||
87 | if (0 <= index | ||
88 | && this.siblingNodes[index] is XText leadingText | ||
54 | && String.IsNullOrWhiteSpace(leadingText.Value)) | 89 | && String.IsNullOrWhiteSpace(leadingText.Value)) |
55 | { | 90 | { |
56 | this.siblingNodes.RemoveAt(this.index - 1); | 91 | this.siblingNodes.RemoveAt(index); |
57 | } | 92 | } |
93 | |||
94 | this.RemoveOrphanTextNodes(); | ||
58 | } | 95 | } |
59 | 96 | ||
60 | public void ReplaceTargetElement(XElement replacement) | 97 | public void ReplaceTargetElement(XElement replacement) |
diff --git a/src/wix/WixToolset.Converters/WixConverter.cs b/src/wix/WixToolset.Converters/WixConverter.cs index 7fc6314a..dc4a0bfa 100644 --- a/src/wix/WixToolset.Converters/WixConverter.cs +++ b/src/wix/WixToolset.Converters/WixConverter.cs | |||
@@ -563,9 +563,7 @@ namespace WixToolset.Converters | |||
563 | else if (node is XElement element) | 563 | else if (node is XElement element) |
564 | { | 564 | { |
565 | this.ConvertElement(element); | 565 | this.ConvertElement(element); |
566 | |||
567 | var before = element.Nodes().ToList(); | 566 | var before = element.Nodes().ToList(); |
568 | |||
569 | this.ConvertNodes(before, level + 1); | 567 | this.ConvertNodes(before, level + 1); |
570 | 568 | ||
571 | // If any nodes were added during the processing of the children, | 569 | // If any nodes were added during the processing of the children, |
@@ -1066,7 +1064,7 @@ namespace WixToolset.Converters | |||
1066 | { | 1064 | { |
1067 | xCondition.Remove(); | 1065 | xCondition.Remove(); |
1068 | element.Add(new XAttribute("Condition", text)); | 1066 | element.Add(new XAttribute("Condition", text)); |
1069 | lab.RemoveOrphanTextNodes(); | 1067 | lab. RemoveOrphanTextNodes(); |
1070 | lab.AddCommentsAsSiblings(comments); | 1068 | lab.AddCommentsAsSiblings(comments); |
1071 | } | 1069 | } |
1072 | } | 1070 | } |
@@ -1280,6 +1278,7 @@ namespace WixToolset.Converters | |||
1280 | using (var lab = new ConversionLab(element)) | 1278 | using (var lab = new ConversionLab(element)) |
1281 | { | 1279 | { |
1282 | element.Add(new XAttribute("Condition", text)); | 1280 | element.Add(new XAttribute("Condition", text)); |
1281 | lab.RemoveOrphanTextNodes(); | ||
1283 | lab.AddCommentsAsSiblings(comments); | 1282 | lab.AddCommentsAsSiblings(comments); |
1284 | } | 1283 | } |
1285 | } | 1284 | } |
@@ -1610,13 +1609,15 @@ namespace WixToolset.Converters | |||
1610 | if (!String.IsNullOrEmpty(newElementName) | 1609 | if (!String.IsNullOrEmpty(newElementName) |
1611 | && this.OnInformation(ConverterTestType.ReferencesReplaced, element, "UI, custom action, and property reference {0} has been replaced with strongly-typed element.", id)) | 1610 | && this.OnInformation(ConverterTestType.ReferencesReplaced, element, "UI, custom action, and property reference {0} has been replaced with strongly-typed element.", id)) |
1612 | { | 1611 | { |
1613 | this.XRoot.SetAttributeValue(XNamespace.Xmlns + newNamespaceName, newNamespace.NamespaceName); | 1612 | using (var lab = new ConversionLab(element)) |
1614 | |||
1615 | element.AddBeforeSelf(new XElement(newNamespace + newElementName)); | ||
1616 | |||
1617 | if (replace) | ||
1618 | { | 1613 | { |
1619 | element.Remove(); | 1614 | this.XRoot.SetAttributeValue(XNamespace.Xmlns + newNamespaceName, newNamespace.NamespaceName); |
1615 | lab.InsertUniqueElementBeforeTargetElement(new XElement(newNamespace + newElementName)); | ||
1616 | |||
1617 | if (replace) | ||
1618 | { | ||
1619 | lab.RemoveTargetElement(); | ||
1620 | } | ||
1620 | } | 1621 | } |
1621 | } | 1622 | } |
1622 | } | 1623 | } |
@@ -2241,7 +2242,7 @@ namespace WixToolset.Converters | |||
2241 | element.Name = ns.GetName(element.Name.LocalName); | 2242 | element.Name = ns.GetName(element.Name.LocalName); |
2242 | } | 2243 | } |
2243 | 2244 | ||
2244 | // Remove all the attributes and add them back to with their namespace updated (as necessary). | 2245 | // Remove all the attributes and add them back with their namespace updated (as necessary). |
2245 | IEnumerable<XAttribute> attributes = element.Attributes().ToList(); | 2246 | IEnumerable<XAttribute> attributes = element.Attributes().ToList(); |
2246 | element.RemoveAttributes(); | 2247 | element.RemoveAttributes(); |
2247 | 2248 | ||
diff --git a/src/wix/test/WixToolsetTest.Converters/ConditionFixture.cs b/src/wix/test/WixToolsetTest.Converters/ConditionFixture.cs index 24dee1c6..84e1b4c3 100644 --- a/src/wix/test/WixToolsetTest.Converters/ConditionFixture.cs +++ b/src/wix/test/WixToolsetTest.Converters/ConditionFixture.cs | |||
@@ -187,6 +187,7 @@ namespace WixToolsetTest.Converters | |||
187 | var actualLines = UnformattedDocumentLines(document); | 187 | var actualLines = UnformattedDocumentLines(document); |
188 | WixAssert.CompareLineByLine(expected, actualLines); | 188 | WixAssert.CompareLineByLine(expected, actualLines); |
189 | } | 189 | } |
190 | |||
190 | [Fact] | 191 | [Fact] |
191 | public void FixPublishConditionWithComment() | 192 | public void FixPublishConditionWithComment() |
192 | { | 193 | { |
diff --git a/src/wix/test/WixToolsetTest.Converters/PrereqPackageFixture.cs b/src/wix/test/WixToolsetTest.Converters/PrereqPackageFixture.cs index 1f095e67..5d637f65 100644 --- a/src/wix/test/WixToolsetTest.Converters/PrereqPackageFixture.cs +++ b/src/wix/test/WixToolsetTest.Converters/PrereqPackageFixture.cs | |||
@@ -29,7 +29,8 @@ namespace WixToolsetTest.Converters | |||
29 | var expected = new[] | 29 | var expected = new[] |
30 | { | 30 | { |
31 | "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\" xmlns:bal=\"http://wixtoolset.org/schemas/v4/wxs/bal\">", | 31 | "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\" xmlns:bal=\"http://wixtoolset.org/schemas/v4/wxs/bal\">", |
32 | " <Fragment><PackageGroup Id=\"NetFx452Web\">", | 32 | " <Fragment>", |
33 | " <PackageGroup Id=\"NetFx452Web\">", | ||
33 | " <ExePackage Id=\"NetFx452Web\" bal:PrereqPackage=\"yes\" bal:PrereqLicenseUrl=\"$(var.NetFx452EulaLink)\" />", | 34 | " <ExePackage Id=\"NetFx452Web\" bal:PrereqPackage=\"yes\" bal:PrereqLicenseUrl=\"$(var.NetFx452EulaLink)\" />", |
34 | " </PackageGroup>", | 35 | " </PackageGroup>", |
35 | " </Fragment>", | 36 | " </Fragment>", |
diff --git a/src/wix/test/WixToolsetTest.Converters/VSExtensionFixture.cs b/src/wix/test/WixToolsetTest.Converters/VSExtensionFixture.cs index 8f60cdf8..0cf8ae4b 100644 --- a/src/wix/test/WixToolsetTest.Converters/VSExtensionFixture.cs +++ b/src/wix/test/WixToolsetTest.Converters/VSExtensionFixture.cs | |||
@@ -28,7 +28,7 @@ namespace WixToolsetTest.Converters | |||
28 | "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\" xmlns:vs=\"http://wixtoolset.org/schemas/v4/wxs/vs\">", | 28 | "<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\" xmlns:vs=\"http://wixtoolset.org/schemas/v4/wxs/vs\">", |
29 | " <Fragment>", | 29 | " <Fragment>", |
30 | " <vs:FindVisualStudio />", | 30 | " <vs:FindVisualStudio />", |
31 | " <vs:FindVisualStudio /><PropertyRef Id=\"VS2022_BOOTSTRAPPER_PACKAGE_FOLDER\" />", | 31 | " <PropertyRef Id=\"VS2022_BOOTSTRAPPER_PACKAGE_FOLDER\" />", |
32 | " <CustomActionRef Id=\"VS2017Setup\" />", | 32 | " <CustomActionRef Id=\"VS2017Setup\" />", |
33 | " </Fragment>", | 33 | " </Fragment>", |
34 | "</Wix>" | 34 | "</Wix>" |