diff options
author | Karsten Heimrich <karsten.heimrich@qt.io> | 2023-02-27 12:19:52 +0100 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@qt.io> | 2023-03-15 13:17:26 +0000 |
commit | fc254e97e39a758b7b0e1162c9476ab5108b4928 (patch) | |
tree | 653db0466e91c2cfb1a57b13529b98827396ad13 | |
parent | ed9c1c6934ef6bf03b301e6b7d7dd6728d9ba911 (diff) |
Fix multiple enumeration runs
Change-Id: Ibd95db8609a074ef3679bd6394acdfca55e8c6c0
Reviewed-by: Miguel Costa <miguel.costa@qt.io>
-rw-r--r-- | QtMSBuild/Tasks/DumpItems.cs | 5 | ||||
-rw-r--r-- | QtMSBuild/Tasks/QtRunWork.cs | 4 | ||||
-rw-r--r-- | QtVsTools.Core/CommandLineParser.cs | 10 | ||||
-rw-r--r-- | QtVsTools.Core/Common/EnumExt.cs | 3 | ||||
-rw-r--r-- | QtVsTools.Core/MsBuildProject.cs | 41 | ||||
-rw-r--r-- | QtVsTools.Package/QtMsBuild/QtProjectBuild.cs | 2 | ||||
-rw-r--r-- | QtVsTools.Wizards/ProjectWizard/ProjectTemplateWizard.cs | 9 |
7 files changed, 38 insertions, 36 deletions
diff --git a/QtMSBuild/Tasks/DumpItems.cs b/QtMSBuild/Tasks/DumpItems.cs index 69e98a88..e4672521 100644 --- a/QtMSBuild/Tasks/DumpItems.cs +++ b/QtMSBuild/Tasks/DumpItems.cs @@ -64,8 +64,9 @@ namespace QtVsTools.QtMsBuild.Tasks itemXml.AppendFormat("<{0} Include=\"{1}\"", ItemType, item.ItemSpec); var names = item.MetadataNames.Cast<string>() .Where(x => (DumpReserved || !reserved.Contains(x)) - && (!requestedNames.Any() || requestedNames.Contains(x))) - .OrderBy(x => x); + && (!requestedNames.Any() || requestedNames.Contains(x))) + .OrderBy(x => x) + .ToList(); if (names.Any()) { itemXml.Append(">\r\n"); foreach (string name in names) { diff --git a/QtMSBuild/Tasks/QtRunWork.cs b/QtMSBuild/Tasks/QtRunWork.cs index 478cc1ff..c8677798 100644 --- a/QtMSBuild/Tasks/QtRunWork.cs +++ b/QtMSBuild/Tasks/QtRunWork.cs @@ -214,8 +214,8 @@ namespace QtVsTools.QtMsBuild.Tasks // ...that have not yet been queued... .Where(x => postponedItems.Contains(x) // ...and whose dependending items have all terminated. - && workItems[x].DependsOn.All(y => terminated.Contains(y))); - + && workItems[x].DependsOn.All(y => terminated.Contains(y))) + .ToList(); if (QtDebug && readyDependents.Any()) { Log.LogMessage(MessageImportance.High, string.Format("## QtRunWork queueing\r\n## {0}", diff --git a/QtVsTools.Core/CommandLineParser.cs b/QtVsTools.Core/CommandLineParser.cs index 45cdddd8..1ac050ba 100644 --- a/QtVsTools.Core/CommandLineParser.cs +++ b/QtVsTools.Core/CommandLineParser.cs @@ -257,7 +257,7 @@ namespace QtVsTools.Core.CommandLine return Parse(args); } - public bool Parse(IEnumerable<string> args) + public bool Parse(List<string> args) { needsParsing = false; @@ -404,12 +404,8 @@ namespace QtVsTools.Core.CommandLine CheckParsed("IsSet"); if (optionNames.Contains(name)) return true; - var aliases = Aliases(name); - foreach (var optionName in optionNames) { - if (aliases.Contains(optionName)) - return true; - } - return false; + var aliases = Aliases(name).ToHashSet(); + return optionNames.Any(optionName => aliases.Contains(optionName)); } public string Value(string optionName) diff --git a/QtVsTools.Core/Common/EnumExt.cs b/QtVsTools.Core/Common/EnumExt.cs index bb136383..93974f35 100644 --- a/QtVsTools.Core/Common/EnumExt.cs +++ b/QtVsTools.Core/Common/EnumExt.cs @@ -96,7 +96,8 @@ namespace QtVsTools.Common { value = default(TEnum); IEnumerable<Enum> enumValues = Enum.GetValues(typeof(TEnum)).OfType<Enum>() - .Where((Enum valueEnum) => valueEnum.Cast<T>().Equals(valueT)); + .Where(valueEnum => valueEnum.Cast<T>().Equals(valueT)) + .ToList(); if (enumValues.Any()) value = (TEnum)Enum.ToObject(typeof(TEnum), enumValues.FirstOrDefault()); return enumValues.Any(); diff --git a/QtVsTools.Core/MsBuildProject.cs b/QtVsTools.Core/MsBuildProject.cs index 0f58b9aa..122e1b7f 100644 --- a/QtVsTools.Core/MsBuildProject.cs +++ b/QtVsTools.Core/MsBuildProject.cs @@ -274,7 +274,8 @@ namespace QtVsTools.Core var configs = this[Files.Project].xml .Elements(ns + "Project") .Elements(ns + "ItemGroup") - .Elements(ns + "ProjectConfiguration"); + .Elements(ns + "ProjectConfiguration") + .ToList(); // Get project global properties var globals = this[Files.Project].xml @@ -543,18 +544,21 @@ namespace QtVsTools.Core var compiler = this[Files.Project].xml .Elements(ns + "Project") .Elements(ns + "ItemDefinitionGroup") - .Elements(ns + "ClCompile"); + .Elements(ns + "ClCompile") + .ToList(); // Get linker properties var linker = this[Files.Project].xml .Elements(ns + "Project") .Elements(ns + "ItemDefinitionGroup") - .Elements(ns + "Link"); + .Elements(ns + "Link") + .ToList(); var resourceCompiler = this[Files.Project].xml .Elements(ns + "Project") .Elements(ns + "ItemDefinitionGroup") - .Elements(ns + "ResourceCompile"); + .Elements(ns + "ResourceCompile") + .ToList(); // Qt module names, to copy to QtModules property var moduleNames = new HashSet<string>(); @@ -722,12 +726,13 @@ namespace QtVsTools.Core item.Elements().ToList().ForEach(itemProp => { var propName = itemProp.Name.LocalName; - if ((itemName == "QtMoc" && oldPropsAny.Contains(propName)) - || (itemName == "QtRcc" && oldQtProps.Contains(propName)) - || (itemName == "QtUic" && oldQtProps.Contains(propName)) - || (itemName == "QtRepc" && oldPropsAny.Contains(propName)) - ) { + switch (itemName) { + case "QtMoc" when oldPropsAny.Contains(propName): + case "QtRcc" when oldQtProps.Contains(propName): + case "QtUic" when oldQtProps.Contains(propName): + case "QtRepc" when oldPropsAny.Contains(propName): itemProp.Remove(); + break; } }); }); @@ -874,7 +879,7 @@ namespace QtVsTools.Core string toolExec, string itemType, string workingDir, - IEnumerable<ItemCommandLineReplacement> extraReplacements) + IList<ItemCommandLineReplacement> extraReplacements) { var query = from customBuild in customBuilds let itemName = customBuild.Attribute("Include").Value @@ -943,14 +948,15 @@ namespace QtVsTools.Core return !error; } - IEnumerable<XElement> GetCustomBuilds(string toolExecName) + private List<XElement> GetCustomBuilds(string toolExecName) { return this[Files.Project].xml .Elements(ns + "Project") .Elements(ns + "ItemGroup") .Elements(ns + "CustomBuild") .Where(x => x.Elements(ns + "Command") - .Any(y => (y.Value.Contains(toolExecName)))); + .Any(y => y.Value.Contains(toolExecName))) + .ToList(); } void FinalizeProjectChanges(List<XElement> customBuilds, string itemTypeName) @@ -1066,7 +1072,8 @@ namespace QtVsTools.Core var configurations = this[Files.Project].xml .Elements(ns + "Project") .Elements(ns + "ItemGroup") - .Elements(ns + "ProjectConfiguration"); + .Elements(ns + "ProjectConfiguration") + .ToList(); var projItemsByPath = this[Files.Project].xml .Elements(ns + "Project") @@ -1310,10 +1317,10 @@ namespace QtVsTools.Core QtMoc.Property.DynamicSource, "false"); } - FinalizeProjectChanges(mocCustomBuilds.ToList(), QtMoc.ItemTypeName); - FinalizeProjectChanges(rccCustomBuilds.ToList(), QtRcc.ItemTypeName); - FinalizeProjectChanges(repcCustomBuilds.ToList(), QtRepc.ItemTypeName); - FinalizeProjectChanges(uicCustomBuilds.ToList(), QtUic.ItemTypeName); + FinalizeProjectChanges(mocCustomBuilds, QtMoc.ItemTypeName); + FinalizeProjectChanges(rccCustomBuilds, QtRcc.ItemTypeName); + FinalizeProjectChanges(repcCustomBuilds, QtRepc.ItemTypeName); + FinalizeProjectChanges(uicCustomBuilds, QtUic.ItemTypeName); this[Files.Project].isDirty = this[Files.Filters].isDirty = true; Commit(); diff --git a/QtVsTools.Package/QtMsBuild/QtProjectBuild.cs b/QtVsTools.Package/QtMsBuild/QtProjectBuild.cs index 70417060..683fd4c4 100644 --- a/QtVsTools.Package/QtMsBuild/QtProjectBuild.cs +++ b/QtVsTools.Package/QtMsBuild/QtProjectBuild.cs @@ -323,7 +323,7 @@ namespace QtVsTools.QtMsBuild } else { var checkResults = result.ResultsByTarget .Where(x => Targets.Contains(x.Key)) - .Select(x => x.Value); + .Select(x => x.Value).ToList(); ok = checkResults.Any() && checkResults.All(x => x.ResultCode == TargetResultCode.Success); if (ok) diff --git a/QtVsTools.Wizards/ProjectWizard/ProjectTemplateWizard.cs b/QtVsTools.Wizards/ProjectWizard/ProjectTemplateWizard.cs index 5ee76c89..de778f94 100644 --- a/QtVsTools.Wizards/ProjectWizard/ProjectTemplateWizard.cs +++ b/QtVsTools.Wizards/ProjectWizard/ProjectTemplateWizard.cs @@ -517,12 +517,9 @@ namespace QtVsTools.Wizards.ProjectWizard /////////////////////////////////////////////////////////////////////////////////////// // Build settings // - IEnumerable<ItemProperty> mocProperties - = ItemGlobals?[QtMoc.ItemTypeName]?.Properties ?? Enumerable.Empty<ItemProperty>(); - IEnumerable<ItemProperty> clProperties - = ItemGlobals?["ClCompile"]?.Properties ?? Enumerable.Empty<ItemProperty>(); - IEnumerable<ItemProperty> linkProperties - = ItemGlobals?["Link"]?.Properties ?? Enumerable.Empty<ItemProperty>(); + var mocProperties = ItemGlobals?[QtMoc.ItemTypeName]?.Properties ?? new ItemProperty[] { }; + var clProperties = ItemGlobals?["ClCompile"]?.Properties ?? new ItemProperty[] { }; + var linkProperties = ItemGlobals?["Link"]?.Properties ?? new ItemProperty[] { }; xml = new StringBuilder(); foreach (IWizardConfiguration c in Configurations) { |