diff --git a/src/plugins/qmldesigner/libs/designercore/CMakeLists.txt b/src/plugins/qmldesigner/libs/designercore/CMakeLists.txt index 1ebb8c48322..91612dad2f1 100644 --- a/src/plugins/qmldesigner/libs/designercore/CMakeLists.txt +++ b/src/plugins/qmldesigner/libs/designercore/CMakeLists.txt @@ -30,6 +30,7 @@ extend_qtc_library(QmlDesignerCore PUBLIC_INCLUDES designercoreutils SOURCES_PREFIX designercoreutils SOURCES + functional.h generatedcomponentutils.cpp generatedcomponentutils.h modelmerger.cpp diff --git a/src/plugins/qmldesigner/libs/designercore/designercoreutils/functional.h b/src/plugins/qmldesigner/libs/designercore/designercoreutils/functional.h new file mode 100644 index 00000000000..66a0485c2f4 --- /dev/null +++ b/src/plugins/qmldesigner/libs/designercore/designercoreutils/functional.h @@ -0,0 +1,32 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#include +#include + +namespace QmlDesigner { + +inline constexpr auto makeCompare = [](auto... projections) { + return [=](auto compare) { + return [=](const auto &first, const auto &second) { + return compare(std::forward_as_tuple(std::invoke(projections, first)...), + std::forward_as_tuple(std::invoke(projections, second)...)); + }; + }; +}; + +inline constexpr auto makeLess = [](auto... projections) { + return [=](const auto &first, const auto &second) { + return std::ranges::less(std::forward_as_tuple(std::invoke(projections, first)...), + std::forward_as_tuple(std::invoke(projections, second)...)); + }; +}; + +inline constexpr auto makeEqual = [](auto... projections) { + return [=](const auto &first, const auto &second) { + return std::ranges::equal_to(std::forward_as_tuple(std::invoke(projections, first)...), + std::forward_as_tuple(std::invoke(projections, second)...)); + }; +}; + +} // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorageupdater.cpp b/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorageupdater.cpp index 17072441777..c366f7c1a9f 100644 --- a/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorageupdater.cpp +++ b/src/plugins/qmldesigner/libs/designercore/projectstorage/projectstorageupdater.cpp @@ -13,6 +13,7 @@ #include "sourcepathstorage/sourcepathcache.h" #include "typeannotationreader.h" +#include #include #include #include @@ -1173,16 +1174,7 @@ void removeDuplicates(Storage::Synchronization::ExportedTypes &exportedTypes) { using Storage::Synchronization::ExportedType; - auto factory = [](auto... projections) { - return [=](auto compare) { - return [=](const auto &first, const auto &second) { - return compare(std::forward_as_tuple(std::invoke(projections, first)...), - std::forward_as_tuple(std::invoke(projections, second)...)); - }; - }; - }; - - auto compare = factory(&ExportedType::name, &ExportedType::version); + auto compare = makeCompare(&ExportedType::name, &ExportedType::version); auto less = compare(std::ranges::less{}); auto equal = compare(std::ranges::equal_to{});