From 7a7f88c3009ad824852322682cc8cfd3173c2e02 Mon Sep 17 00:00:00 2001
From: Bob Arnson <bob@firegiant.com>
Date: Wed, 30 Sep 2020 18:56:06 -0400
Subject:  Add error message for cases where inner text used to be used.

---
 src/WixToolset.Core/Compiler.cs                        |  6 +++++-
 src/WixToolset.Core/CompilerCore.cs                    |  9 +++++++++
 src/WixToolset.Core/Compiler_2.cs                      | 18 ++++++++++++++++++
 src/WixToolset.Core/Compiler_EmbeddedUI.cs             |  2 ++
 src/WixToolset.Core/Compiler_UI.cs                     |  8 ++++++++
 .../DialogsInInstallUISequence/PackageComponents.wxs   | 14 +++++---------
 6 files changed, 47 insertions(+), 10 deletions(-)

diff --git a/src/WixToolset.Core/Compiler.cs b/src/WixToolset.Core/Compiler.cs
index 286a598b..d9c60ef6 100644
--- a/src/WixToolset.Core/Compiler.cs
+++ b/src/WixToolset.Core/Compiler.cs
@@ -3382,6 +3382,8 @@ namespace WixToolset.Core
                 win64 = true;
             }
 
+            this.Core.VerifyNoInnerText(sourceLineNumbers, node);
+
             // if we have an in-lined Script CustomAction ensure no source or target attributes were provided
             if (inlineScript)
             {
@@ -5349,6 +5351,8 @@ namespace WixToolset.Core
                 }
             }
 
+            this.Core.VerifyNoInnerText(sourceLineNumbers, node);
+
             if (CompilerConstants.IntegerNotSet == id)
             {
                 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
@@ -7598,7 +7602,7 @@ namespace WixToolset.Core
         }
 
         /// <summary>
-        /// Parses a condition element.
+        /// Parses a Level element.
         /// </summary>
         /// <param name="node">Element to parse.</param>
         /// <param name="featureId">Id of the parent Feature element.</param>
diff --git a/src/WixToolset.Core/CompilerCore.cs b/src/WixToolset.Core/CompilerCore.cs
index 8e4f3d89..721eae6b 100644
--- a/src/WixToolset.Core/CompilerCore.cs
+++ b/src/WixToolset.Core/CompilerCore.cs
@@ -1086,6 +1086,15 @@ namespace WixToolset.Core
             return this.parseHelper.ScheduleActionSymbol(this.ActiveSection, sourceLineNumbers, access, sequence, actionName, condition, beforeAction, afterAction, overridable);
         }
 
+        internal void VerifyNoInnerText(SourceLineNumber sourceLineNumbers, XElement element)
+        {
+            var innerText = Common.GetInnerText(element);
+            if (!String.IsNullOrWhiteSpace(innerText))
+            {
+                this.messaging.Write(ErrorMessages.IllegalInnerText(sourceLineNumbers, element.Name.LocalName, innerText));
+            }
+        }
+
         private static string CreateValueList(ValueListKind kind, IEnumerable<string> values)
         {
             // Ideally, we could denote the list kind (and the list itself) directly in the
diff --git a/src/WixToolset.Core/Compiler_2.cs b/src/WixToolset.Core/Compiler_2.cs
index 204a3788..fbad873e 100644
--- a/src/WixToolset.Core/Compiler_2.cs
+++ b/src/WixToolset.Core/Compiler_2.cs
@@ -1211,6 +1211,8 @@ namespace WixToolset.Core
                 }
             }
 
+            this.Core.VerifyNoInnerText(sourceLineNumbers, node);
+
             if (null == sddl)
             {
                 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Sddl"));
@@ -1499,6 +1501,8 @@ namespace WixToolset.Core
                 this.Core.Write(ErrorMessages.CannotAuthorSpecialProperties(sourceLineNumbers, id.Id));
             }
 
+            this.Core.VerifyNoInnerText(sourceLineNumbers, node);
+
             if ("ErrorDialog" == id.Id)
             {
                 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Dialog, value);
@@ -2043,6 +2047,8 @@ namespace WixToolset.Core
                 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value"));
             }
 
+            this.Core.VerifyNoInnerText(sourceLineNumbers, node);
+
             this.Core.ParseForExtensionElements(node);
 
             return (null == value) ? multiStringValue : String.Concat(value, "[~]", multiStringValue);
@@ -2608,6 +2614,8 @@ namespace WixToolset.Core
                     }
                 }
 
+                this.Core.VerifyNoInnerText(childSourceLineNumbers, node);
+
                 if (customAction && "Custom" == actionName)
                 {
                     this.Core.Write(ErrorMessages.ExpectedAttribute(childSourceLineNumbers, child.Name.LocalName, "Action"));
@@ -3071,6 +3079,8 @@ namespace WixToolset.Core
                 }
             }
 
+            this.Core.VerifyNoInnerText(sourceLineNumbers, node);
+
             if (privilege == null)
             {
                 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Name"));
@@ -3432,6 +3442,8 @@ namespace WixToolset.Core
                 }
             }
 
+            this.Core.VerifyNoInnerText(sourceLineNumbers, node);
+
             if (argument == null)
             {
                 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Value"));
@@ -3769,6 +3781,8 @@ namespace WixToolset.Core
                 }
             }
 
+            this.Core.VerifyNoInnerText(sourceLineNumbers, node);
+
             if (null == id)
             {
                 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
@@ -3876,6 +3890,8 @@ namespace WixToolset.Core
                 }
             }
 
+            this.Core.VerifyNoInnerText(sourceLineNumbers, node);
+
             if (null == id)
             {
                 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
@@ -4353,6 +4369,8 @@ namespace WixToolset.Core
                 }
             }
 
+            this.Core.VerifyNoInnerText(sourceLineNumbers, node);
+
             if (String.IsNullOrEmpty(key))
             {
                 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Key"));
diff --git a/src/WixToolset.Core/Compiler_EmbeddedUI.cs b/src/WixToolset.Core/Compiler_EmbeddedUI.cs
index 4353e3cd..d71bb09a 100644
--- a/src/WixToolset.Core/Compiler_EmbeddedUI.cs
+++ b/src/WixToolset.Core/Compiler_EmbeddedUI.cs
@@ -80,6 +80,8 @@ namespace WixToolset.Core
                 }
             }
 
+            this.Core.VerifyNoInnerText(sourceLineNumbers, node);
+
             if (null == id)
             {
                 id = this.Core.CreateIdentifier("mec", source, type.ToString());
diff --git a/src/WixToolset.Core/Compiler_UI.cs b/src/WixToolset.Core/Compiler_UI.cs
index 9353d966..cb1d34ac 100644
--- a/src/WixToolset.Core/Compiler_UI.cs
+++ b/src/WixToolset.Core/Compiler_UI.cs
@@ -700,6 +700,8 @@ namespace WixToolset.Core
                 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Action"));
             }
 
+            this.Core.VerifyNoInnerText(sourceLineNumbers, node);
+
             this.Core.ParseForExtensionElements(node);
 
             if (!this.Core.EncounteredError)
@@ -746,6 +748,8 @@ namespace WixToolset.Core
                 }
             }
 
+            this.Core.VerifyNoInnerText(sourceLineNumbers, node);
+
             if (null == id)
             {
                 id = this.Core.CreateIdentifier("txt", text);
@@ -1422,6 +1426,8 @@ namespace WixToolset.Core
                             }
                         }
 
+                        this.Core.VerifyNoInnerText(sourceLineNumbers, node);
+
                         if (!String.IsNullOrEmpty(text) && null != sourceFile)
                         {
                             this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttribute(childSourceLineNumbers, child.Name.LocalName, "SourceFile", "Value"));
@@ -1689,6 +1695,8 @@ namespace WixToolset.Core
                 }
             }
 
+            this.Core.VerifyNoInnerText(sourceLineNumbers, node);
+
             if (null == control)
             {
                 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Control"));
diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/DialogsInInstallUISequence/PackageComponents.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/DialogsInInstallUISequence/PackageComponents.wxs
index 10c8b2c3..ec6e62df 100644
--- a/src/test/WixToolsetTest.CoreIntegration/TestData/DialogsInInstallUISequence/PackageComponents.wxs
+++ b/src/test/WixToolsetTest.CoreIntegration/TestData/DialogsInInstallUISequence/PackageComponents.wxs
@@ -1,21 +1,17 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
     <Fragment>
         <UI Id="CustomDialog">
             <Dialog Id="FirstDialog" Width="100" Height="100">
                 <Control Id="Title" Type="Text" X="0" Y="0" Width="90" Height="13" TabSkip="no" Text="FirstDialogTitle" />
-                <Control Id="Header" Type="Text" X="0" Y="13" Width="90" Height="13" TabSkip="no" Text="FirstDialogHeader"
-                         HideCondition="Installed" DisableCondition="Installed" />
+                <Control Id="Header" Type="Text" X="0" Y="13" Width="90" Height="13" TabSkip="no" Text="FirstDialogHeader" HideCondition="Installed" DisableCondition="Installed" />
             </Dialog>
             <Dialog Id="SecondDialog" Width="100" Height="100">
                 <Control Id="Title" Type="Text" X="0" Y="0" Width="90" Height="13" TabSkip="no" Text="SecondDialogTitle" />
-                <Control Id="OptionalCheckBox" Type="CheckBox" X="0" Y="13" Width="100" Height="40" Hidden="yes" Property="WIXUI_EXITDIALOGOPTIONALCHECKBOX" CheckBoxValue="1" Text="[WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT]"
-                         ToolTip="Optional checkbox" Help="Check this box for fun"
-                         ShowCondition="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT AND NOT Installed" />
+                <Control Id="OptionalCheckBox" Type="CheckBox" X="0" Y="13" Width="100" Height="40" Hidden="yes" Property="WIXUI_EXITDIALOGOPTIONALCHECKBOX" CheckBoxValue="1" Text="[WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT]" ToolTip="Optional checkbox" Help="Check this box for fun" ShowCondition="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT AND NOT Installed" />
             </Dialog>
 
             <InstallUISequence>
-                <Show Dialog="SecondDialog" Before="FirstDialog" Overridable="yes">NOT Installed</Show>
+                <Show Dialog="SecondDialog" Before="FirstDialog" Overridable="yes" Condition="NOT Installed" />
             </InstallUISequence>
         </UI>
     </Fragment>
@@ -24,7 +20,7 @@
             <DialogRef Id="FirstDialog" />
             <DialogRef Id="SecondDialog" />
 
-            <Publish Dialog="FirstDialog" Control="Next" Event="NewDialog" Value="SecondDialog">Installed AND PATCH</Publish>
+            <Publish Dialog="FirstDialog" Control="Next" Event="NewDialog" Value="SecondDialog" Condition="Installed AND PATCH" />
 
             <InstallUISequence>
                 <Show Dialog="FirstDialog" Before="SecondDialog" Condition="Installed AND PATCH" />
-- 
cgit v1.2.3-55-g6feb