diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h b/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h index be3a1c29554..86b8e1ee681 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h +++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h @@ -28,6 +28,7 @@ #include "projectstorageexceptions.h" #include "projectstorageids.h" #include "projectstoragetypes.h" +#include "sourcepathcachetypes.h" #include #include @@ -152,7 +153,7 @@ public: auto fetchAllSourceContexts() const { - return selectAllSourceContextsStatement.template valuesWithTransaction( + return selectAllSourceContextsStatement.template valuesWithTransaction( 128); } @@ -167,11 +168,10 @@ public: return sourceId; } - Sources::SourceNameAndSourceContextId fetchSourceNameAndSourceContextId(SourceId sourceId) const + auto fetchSourceNameAndSourceContextId(SourceId sourceId) const { auto value = selectSourceNameAndSourceContextIdFromSourcesBySourceIdStatement - .template valueWithTransaction( - &sourceId); + .template valueWithTransaction(&sourceId); if (!value.sourceContextId) throw SourceIdDoesNotExists(); @@ -192,7 +192,7 @@ public: auto fetchAllSources() const { - return selectAllSourcesStatement.template valuesWithTransaction(1024); + return selectAllSourcesStatement.template valuesWithTransaction(1024); } SourceId fetchSourceIdUnguarded(SourceContextId sourceContextId, Utils::SmallStringView sourceName) diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h b/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h index a3a5cc20a19..ef3ce3c769e 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h +++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstoragetypes.h @@ -26,141 +26,9 @@ #pragma once #include "projectstorageids.h" -#include "storagecacheentry.h" #include -#include #include -#include -#include -namespace QmlDesigner { - -class SourceNameView -{ -public: - friend bool operator==(const SourceNameView &first, const SourceNameView &second) noexcept - { - return first.sourceContextId == second.sourceContextId - && first.sourceName == second.sourceName; - } - - friend bool operator<(SourceNameView first, SourceNameView second) noexcept - { - return std::tie(first.sourceContextId, first.sourceName) - < std::tie(second.sourceContextId, second.sourceName); - } - -public: - Utils::SmallStringView sourceName; - SourceContextId sourceContextId; -}; - -class SourceNameEntry -{ -public: - SourceNameEntry(Utils::SmallStringView sourceName, int sourceContextId) - : sourceName(sourceName) - , sourceContextId(sourceContextId) - {} - - SourceNameEntry(Utils::SmallStringView sourceName, SourceContextId sourceContextId) - : sourceName(sourceName) - , sourceContextId(sourceContextId) - {} - - SourceNameEntry(SourceNameView view) - : sourceName(view.sourceName) - , sourceContextId(view.sourceContextId) - {} - - friend bool operator==(const SourceNameEntry &first, const SourceNameEntry &second) noexcept - { - return first.sourceContextId == second.sourceContextId - && first.sourceName == second.sourceName; - } - - friend bool operator!=(const SourceNameEntry &first, const SourceNameEntry &second) noexcept - { - return !(first == second); - } - - friend bool operator==(const SourceNameEntry &first, const SourceNameView &second) noexcept - { - return first.sourceContextId == second.sourceContextId - && first.sourceName == second.sourceName; - } - - friend bool operator!=(const SourceNameEntry &first, const SourceNameView &second) noexcept - { - return !(first == second); - } - - operator SourceNameView() const noexcept { return {sourceName, sourceContextId}; } - - operator Utils::SmallString() &&noexcept { return std::move(sourceName); } - -public: - Utils::SmallString sourceName; - SourceContextId sourceContextId; -}; - -namespace Sources { -class SourceContext - : public StorageCacheEntry -{ - using Base = StorageCacheEntry; - -public: - using Base::Base; - - friend bool operator==(const SourceContext &first, const SourceContext &second) - { - return first.id == second.id && first.value == second.value; - } -}; - -using SourceContexts = std::vector; - -class Source : public StorageCacheEntry -{ - using Base = StorageCacheEntry; - -public: - using Base::Base; - Source(Utils::SmallStringView sourceName, SourceContextId sourceContextId, SourceId sourceId) - : Base{{sourceName, sourceContextId}, sourceId} - {} - - Source(Utils::SmallStringView sourceName, int sourceContextId, int sourceId) - : Base{{sourceName, SourceContextId{sourceContextId}}, SourceId{sourceId}} - {} - - friend bool operator==(const Source &first, const Source &second) - { - return first.id == second.id && first.value == second.value; - } -}; - -using Sources = std::vector; - -class SourceNameAndSourceContextId -{ -public: - constexpr SourceNameAndSourceContextId() = default; - SourceNameAndSourceContextId(Utils::SmallStringView sourceName, int sourceContextId) - : sourceName(sourceName) - , sourceContextId(sourceContextId) - {} - SourceNameAndSourceContextId(Utils::SmallStringView sourceName, SourceContextId sourceContextId) - : sourceName{sourceName} - , sourceContextId{sourceContextId} - {} - - Utils::SmallString sourceName; - SourceContextId sourceContextId; -}; -} // namespace ClangBackEnd - -} // namespace QmlDesigner +namespace QmlDesigner::Storage {} // namespace QmlDesigner::Storage diff --git a/src/plugins/qmldesigner/designercore/projectstorage/sourcepathcache.h b/src/plugins/qmldesigner/designercore/projectstorage/sourcepathcache.h index 42ded75dcd3..3226ab0a7d9 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/sourcepathcache.h +++ b/src/plugins/qmldesigner/designercore/projectstorage/sourcepathcache.h @@ -27,8 +27,8 @@ #include "projectstorageexceptions.h" #include "projectstorageids.h" -#include "projectstoragetypes.h" #include "sourcepath.h" +#include "sourcepathcachetypes.h" #include "sourcepathview.h" #include "storagecache.h" @@ -134,7 +134,7 @@ private: class SourceStorageAdapter { public: - auto fetchId(SourceNameView sourceNameView) + auto fetchId(Cache::SourceNameView sourceNameView) { return storage.fetchSourceId(sourceNameView.sourceContextId, sourceNameView.sourceName); } @@ -143,7 +143,7 @@ private: { auto entry = storage.fetchSourceNameAndSourceContextId(id); - return SourceNameEntry{std::move(entry.sourceName), entry.sourceContextId}; + return Cache::SourceNameEntry{std::move(entry.sourceName), entry.sourceContextId}; } auto fetchAll() { return storage.fetchAllSources(); } @@ -156,7 +156,7 @@ private: return Utils::reverseCompare(first, second) < 0; } - static bool sourceLess(SourceNameView first, SourceNameView second) noexcept + static bool sourceLess(Cache::SourceNameView first, Cache::SourceNameView second) noexcept { return first < second; } @@ -167,9 +167,14 @@ private: SourceContextStorageAdapter, Mutex, sourceContextLess, - Sources::SourceContext>; - using SourceNameCache - = StorageCache; + Cache::SourceContext>; + using SourceNameCache = StorageCache; private: SourceContextStorageAdapter m_sourceContextStorageAdapter; diff --git a/src/plugins/qmldesigner/designercore/projectstorage/sourcepathcachetypes.h b/src/plugins/qmldesigner/designercore/projectstorage/sourcepathcachetypes.h new file mode 100644 index 00000000000..b0c5491036e --- /dev/null +++ b/src/plugins/qmldesigner/designercore/projectstorage/sourcepathcachetypes.h @@ -0,0 +1,161 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#pragma once + +#include "projectstorageids.h" +#include "storagecacheentry.h" + +#include + +#include + +namespace QmlDesigner::Cache { + +class SourceNameView +{ +public: + friend bool operator==(const SourceNameView &first, const SourceNameView &second) noexcept + { + return first.sourceContextId == second.sourceContextId + && first.sourceName == second.sourceName; + } + + friend bool operator<(SourceNameView first, SourceNameView second) noexcept + { + return std::tie(first.sourceContextId, first.sourceName) + < std::tie(second.sourceContextId, second.sourceName); + } + +public: + Utils::SmallStringView sourceName; + SourceContextId sourceContextId; +}; + +class SourceNameEntry +{ +public: + SourceNameEntry(Utils::SmallStringView sourceName, int sourceContextId) + : sourceName(sourceName) + , sourceContextId(sourceContextId) + {} + + SourceNameEntry(Utils::SmallStringView sourceName, SourceContextId sourceContextId) + : sourceName(sourceName) + , sourceContextId(sourceContextId) + {} + + SourceNameEntry(SourceNameView view) + : sourceName(view.sourceName) + , sourceContextId(view.sourceContextId) + {} + + friend bool operator==(const SourceNameEntry &first, const SourceNameEntry &second) noexcept + { + return first.sourceContextId == second.sourceContextId + && first.sourceName == second.sourceName; + } + + friend bool operator!=(const SourceNameEntry &first, const SourceNameEntry &second) noexcept + { + return !(first == second); + } + + friend bool operator==(const SourceNameEntry &first, const SourceNameView &second) noexcept + { + return first.sourceContextId == second.sourceContextId + && first.sourceName == second.sourceName; + } + + friend bool operator!=(const SourceNameEntry &first, const SourceNameView &second) noexcept + { + return !(first == second); + } + + operator SourceNameView() const noexcept { return {sourceName, sourceContextId}; } + + operator Utils::SmallString() &&noexcept { return std::move(sourceName); } + +public: + Utils::SmallString sourceName; + SourceContextId sourceContextId; +}; + +class SourceContext + : public StorageCacheEntry +{ + using Base = StorageCacheEntry; + +public: + using Base::Base; + + friend bool operator==(const SourceContext &first, const SourceContext &second) + { + return first.id == second.id && first.value == second.value; + } +}; + +using SourceContexts = std::vector; + +class Source : public StorageCacheEntry +{ + using Base = StorageCacheEntry; + +public: + using Base::Base; + Source(Utils::SmallStringView sourceName, SourceContextId sourceContextId, SourceId sourceId) + : Base{{sourceName, sourceContextId}, sourceId} + {} + + Source(Utils::SmallStringView sourceName, int sourceContextId, int sourceId) + : Base{{sourceName, SourceContextId{sourceContextId}}, SourceId{sourceId}} + {} + + friend bool operator==(const Source &first, const Source &second) + { + return first.id == second.id && first.value == second.value; + } +}; + +using Sources = std::vector; + +class SourceNameAndSourceContextId +{ +public: + constexpr SourceNameAndSourceContextId() = default; + SourceNameAndSourceContextId(Utils::SmallStringView sourceName, int sourceContextId) + : sourceName(sourceName) + , sourceContextId(sourceContextId) + {} + SourceNameAndSourceContextId(Utils::SmallStringView sourceName, SourceContextId sourceContextId) + : sourceName{sourceName} + , sourceContextId{sourceContextId} + {} + + Utils::SmallString sourceName; + SourceContextId sourceContextId; +}; + +} // namespace QmlDesigner::Cache diff --git a/src/plugins/qmldesigner/qmldesignerunittestfiles.pri b/src/plugins/qmldesigner/qmldesignerunittestfiles.pri index e25408a7877..d6987c0e6a0 100644 --- a/src/plugins/qmldesigner/qmldesignerunittestfiles.pri +++ b/src/plugins/qmldesigner/qmldesignerunittestfiles.pri @@ -82,4 +82,5 @@ HEADERS += \ $$PWD/designercore/include/projectstorageids.h \ $$PWD/designercore/projectstorage/projectstoragetypes.h \ $$PWD/designercore/projectstorage/projectstoragesqlitefunctionregistry.h \ - $$PWD/designercore/projectstorage/sourcepathcache.h + $$PWD/designercore/projectstorage/sourcepathcache.h \ + $$PWD/designercore/projectstorage/sourcepathcachetypes.h diff --git a/tests/unit/unittest/gtest-creator-printing.cpp b/tests/unit/unittest/gtest-creator-printing.cpp index 962b11efdd0..f3d34332233 100644 --- a/tests/unit/unittest/gtest-creator-printing.cpp +++ b/tests/unit/unittest/gtest-creator-printing.cpp @@ -58,6 +58,7 @@ #include #include #include +#include #include #include #include @@ -1571,13 +1572,13 @@ std::ostream &operator<<(std::ostream &out, const VariantProperty &property) return out << "(" << property.parentModelNode() << ", " << property.name() << ", " << property.value() << ")"; } -namespace Sources { +namespace Cache { std::ostream &operator<<(std::ostream &out, const SourceContext &sourceContext) { return out << "(" << sourceContext.id << ", " << sourceContext.value << ")"; } -} // namespace Sources +} // namespace Cache namespace Internal { std::ostream &operator<<(std::ostream &out, const ImageCacheStorageImageEntry &entry) diff --git a/tests/unit/unittest/gtest-creator-printing.h b/tests/unit/unittest/gtest-creator-printing.h index 6fb408b78b9..a558e7ed275 100644 --- a/tests/unit/unittest/gtest-creator-printing.h +++ b/tests/unit/unittest/gtest-creator-printing.h @@ -386,11 +386,11 @@ std::ostream &operator<<(std::ostream &out, const BasicId(42))); - ON_CALL(selectAllSourcesStatement, valuesReturnSourcesSources(_)) + ON_CALL(selectAllSourcesStatement, valuesReturnCacheSources(_)) .WillByDefault(Return(std::vector{{"file.h", SourceContextId{1}, SourceId{1}}, {"file.cpp", SourceContextId{2}, SourceId{4}}})); ON_CALL(selectSourceContextPathFromSourceContextsBySourceContextIdStatement, valueReturnPathString(5)) .WillByDefault(Return(Utils::optional("/path/to"))); ON_CALL(selectSourceNameAndSourceContextIdFromSourcesBySourceIdStatement, - valueReturnSourcesSourceNameAndSourceContextId(42)) - .WillByDefault(Return(QmlDesigner::Sources::SourceNameAndSourceContextId{"file.cpp", 5})); + valueReturnCacheSourceNameAndSourceContextId(42)) + .WillByDefault(Return(QmlDesigner::Cache::SourceNameAndSourceContextId{"file.cpp", 5})); ON_CALL(selectSourceContextIdFromSourcesBySourceIdStatement, valueReturnInt32(TypedEq(42))) .WillByDefault(Return(Utils::optional(5))); diff --git a/tests/unit/unittest/projectstoragemock.h b/tests/unit/unittest/projectstoragemock.h index e54ae043866..10d749b077c 100644 --- a/tests/unit/unittest/projectstoragemock.h +++ b/tests/unit/unittest/projectstoragemock.h @@ -30,6 +30,7 @@ #include "sqlitedatabasemock.h" #include +#include #include class ProjectStorageMock @@ -52,9 +53,9 @@ public: MOCK_METHOD1(fetchSourceContextPath, Utils::PathString(QmlDesigner::SourceContextId sourceContextId)); MOCK_METHOD1(fetchSourceNameAndSourceContextId, - QmlDesigner::Sources::SourceNameAndSourceContextId(QmlDesigner::SourceId sourceId)); - MOCK_METHOD0(fetchAllSourceContexts, std::vector()); - MOCK_METHOD0(fetchAllSources, std::vector()); + QmlDesigner::Cache::SourceNameAndSourceContextId(QmlDesigner::SourceId sourceId)); + MOCK_METHOD0(fetchAllSourceContexts, std::vector()); + MOCK_METHOD0(fetchAllSources, std::vector()); SqliteDatabaseMock &database() { return databaseMock; } diff --git a/tests/unit/unittest/sourcepathcache-test.cpp b/tests/unit/unittest/sourcepathcache-test.cpp index f00a1f58a78..8755f694986 100644 --- a/tests/unit/unittest/sourcepathcache-test.cpp +++ b/tests/unit/unittest/sourcepathcache-test.cpp @@ -39,7 +39,7 @@ using Cache = QmlDesigner::SourcePathCache>; using NFP = QmlDesigner::SourcePath; using QmlDesigner::SourcePathView; using QmlDesigner::SourcePathViews; -using QmlDesigner::Sources::SourceNameAndSourceContextId; +using QmlDesigner::Cache::SourceNameAndSourceContextId; class SourcePathCache : public testing::Test { @@ -61,13 +61,13 @@ protected: ON_CALL(storageMock, fetchSourceNameAndSourceContextId(SourceId{42})) .WillByDefault(Return(SourceNameAndSourceContextId("file.cpp", SourceContextId{5}))); ON_CALL(storageMockFilled, fetchAllSources()) - .WillByDefault(Return(std::vector({ + .WillByDefault(Return(std::vector({ {"file.cpp", SourceContextId{6}, SourceId{72}}, {"file2.cpp", SourceContextId{5}, SourceId{63}}, {"file.cpp", SourceContextId{5}, SourceId{42}}, }))); ON_CALL(storageMockFilled, fetchAllSourceContexts()) - .WillByDefault(Return(std::vector( + .WillByDefault(Return(std::vector( {{"/path2/to", SourceContextId{6}}, {"/path/to", SourceContextId{5}}}))); ON_CALL(storageMockFilled, fetchSourceContextId(Eq("/path/to"))) .WillByDefault(Return(SourceContextId{5})); diff --git a/tests/unit/unittest/sqlitereadstatementmock.h b/tests/unit/unittest/sqlitereadstatementmock.h index c072eecf7da..5144555553e 100644 --- a/tests/unit/unittest/sqlitereadstatementmock.h +++ b/tests/unit/unittest/sqlitereadstatementmock.h @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -173,15 +174,15 @@ public: (long long, Utils::SmallStringView), ()); - MOCK_METHOD(std::vector, - valuesReturnSourcesSourceContexts, + MOCK_METHOD(std::vector, + valuesReturnCacheSourceContexts, (std::size_t), ()); - MOCK_METHOD(std::vector, valuesReturnSourcesSources, (std::size_t), ()); + MOCK_METHOD(std::vector, valuesReturnCacheSources, (std::size_t), ()); - MOCK_METHOD(QmlDesigner::Sources::SourceNameAndSourceContextId, - valueReturnSourcesSourceNameAndSourceContextId, + MOCK_METHOD(QmlDesigner::Cache::SourceNameAndSourceContextId, + valueReturnCacheSourceNameAndSourceContextId, (int) ); MOCK_METHOD(QmlDesigner::SourceContextId, valueReturnsSourceContextId, (Utils::SmallStringView), ()); @@ -235,8 +236,8 @@ public: else if constexpr (std::is_same_v>) return valueReturnsPropertyDeclaration(queryValues...); - else if constexpr (std::is_same_v) - return valueReturnSourcesSourceNameAndSourceContextId(queryValues...); + else if constexpr (std::is_same_v) + return valueReturnCacheSourceNameAndSourceContextId(queryValues...); else if constexpr (std::is_same_v) return valueReturnsSourceContextId(queryValues...); else if constexpr (std::is_same_v) @@ -299,10 +300,10 @@ public: return valuesReturnSourceEntries(reserveSize, queryValues...); else if constexpr (std::is_same_v) return valuesReturnSourceTimeStamps(reserveSize, queryValues...); - else if constexpr (std::is_same_v) - return valuesReturnSourcesSourceContexts(reserveSize); - else if constexpr (std::is_same_v) - return valuesReturnSourcesSources(reserveSize); + else if constexpr (std::is_same_v) + return valuesReturnCacheSourceContexts(reserveSize); + else if constexpr (std::is_same_v) + return valuesReturnCacheSources(reserveSize); else static_assert(!std::is_same_v, "SqliteReadStatementMock::values does not handle result type!"); diff --git a/tests/unit/unittest/storagecache-test.cpp b/tests/unit/unittest/storagecache-test.cpp index 2be79de2a83..1b515a7412a 100644 --- a/tests/unit/unittest/storagecache-test.cpp +++ b/tests/unit/unittest/storagecache-test.cpp @@ -64,7 +64,7 @@ using CacheWithMockLocking = QmlDesigner::StorageCache, less, - QmlDesigner::Sources::SourceContext>; + QmlDesigner::Cache::SourceContext>; using CacheWithoutLocking = QmlDesigner::StorageCache, less, - QmlDesigner::Sources::SourceContext>; + QmlDesigner::Cache::SourceContext>; template class StorageCache : public testing::Test