aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarsten Heimrich <karsten.heimrich@qt.io>2023-02-27 12:19:52 +0100
committerKarsten Heimrich <karsten.heimrich@qt.io>2023-03-15 13:17:26 +0000
commitfc254e97e39a758b7b0e1162c9476ab5108b4928 (patch)
tree653db0466e91c2cfb1a57b13529b98827396ad13
parented9c1c6934ef6bf03b301e6b7d7dd6728d9ba911 (diff)
Fix multiple enumeration runs
Change-Id: Ibd95db8609a074ef3679bd6394acdfca55e8c6c0 Reviewed-by: Miguel Costa <miguel.costa@qt.io>
-rw-r--r--QtMSBuild/Tasks/DumpItems.cs5
-rw-r--r--QtMSBuild/Tasks/QtRunWork.cs4
-rw-r--r--QtVsTools.Core/CommandLineParser.cs10
-rw-r--r--QtVsTools.Core/Common/EnumExt.cs3
-rw-r--r--QtVsTools.Core/MsBuildProject.cs41
-rw-r--r--QtVsTools.Package/QtMsBuild/QtProjectBuild.cs2
-rw-r--r--QtVsTools.Wizards/ProjectWizard/ProjectTemplateWizard.cs9
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) {