From ed47be3a4fc7fc179eb89e9fcbbb61c94083623c Mon Sep 17 00:00:00 2001 From: Dmitrii Akshintsev Date: Wed, 17 Jan 2024 12:00:07 +0100 Subject: DOM refactoring. Make DomEnv more generic. Add getCallbackFor helper Cosmetic change + adding const correctness Change-Id: I36032a2c879a52fc417b0f2e605c3f1b2de450d5 Task-number: QTBUG-119550 Reviewed-by: Ulf Hermann --- src/qmldom/qqmldomtop.cpp | 52 ++++++++++++++++++++++++++++------------------- src/qmldom/qqmldomtop_p.h | 9 +++++--- 2 files changed, 37 insertions(+), 24 deletions(-) diff --git a/src/qmldom/qqmldomtop.cpp b/src/qmldom/qqmldomtop.cpp index 03cb164df6..424b0925f3 100644 --- a/src/qmldom/qqmldomtop.cpp +++ b/src/qmldom/qqmldomtop.cpp @@ -231,7 +231,7 @@ static DomType fileTypeForPath(const DomItem &self, const QString &canonicalFile return DomType::Empty; } -void DomUniverse::loadFile(const FileToLoad &file, Callback callback, LoadOptions, +void DomUniverse::loadFile(const FileToLoad &file, const Callback &callback, LoadOptions, std::optional fileType) { DomItem univ(shared_from_this()); @@ -1254,8 +1254,8 @@ void DomEnvironment::loadFile(const FileToLoad &file, const Callback &callback, } // TODO(QTBUG-119550) refactor this -void DomEnvironment::loadFile(const FileToLoad &file, Callback loadCallback, - Callback directDepsCallback, Callback endCallback, +void DomEnvironment::loadFile(const FileToLoad &file, const Callback &loadCallback, + const Callback &directDepsCallback, const Callback &endCallback, LoadOptions loadOptions, std::optional fileType, const ErrorHandler &h) { @@ -1284,16 +1284,15 @@ void DomEnvironment::loadFile(const FileToLoad &file, Callback loadCallback, shared_ptr oldValue, newValue; const DomType fType = (bool(fileType) ? (*fileType) : fileTypeForPath(self, file.canonicalPath())); + const auto callback = + getCallbackFor(fType, self, loadCallback, directDepsCallback, endCallback); switch (fType) { case DomType::QmlDirectory: { const auto &fetchResult = fetchFileFromEnvs(file); oldValue = fetchResult.first; newValue = fetchResult.second; if (!newValue) { - universe()->loadFile( - file, - callbackForQmlDirectory(self, loadCallback, directDepsCallback, endCallback), - loadOptions, fType); + universe()->loadFile(file, callback, loadOptions, fType); return; } } break; @@ -1302,9 +1301,7 @@ void DomEnvironment::loadFile(const FileToLoad &file, Callback loadCallback, oldValue = fetchResult.first; newValue = fetchResult.second; if (!newValue) { - universe()->loadFile( - file, callbackForQmlFile(self, loadCallback, directDepsCallback, endCallback), - loadOptions, fType); + universe()->loadFile(file, callback, loadOptions, fType); return; } } break; @@ -1313,10 +1310,7 @@ void DomEnvironment::loadFile(const FileToLoad &file, Callback loadCallback, oldValue = fetchResult.first; newValue = fetchResult.second; if (!newValue) { - universe()->loadFile( - file, - callbackForQmltypesFile(self, loadCallback, directDepsCallback, endCallback), - loadOptions, fType); + universe()->loadFile(file, callback, loadOptions, fType); return; } } break; @@ -1325,17 +1319,12 @@ void DomEnvironment::loadFile(const FileToLoad &file, Callback loadCallback, oldValue = fetchResult.first; newValue = fetchResult.second; if (!newValue) { - universe()->loadFile( - file, - callbackForQmldirFile(self, loadCallback, directDepsCallback, endCallback), - loadOptions, fType); + universe()->loadFile(file, callback, loadOptions, fType); return; } } break; case DomType::JsFile: { - universe()->loadFile(file, - callbackForJSFile(self, loadCallback, directDepsCallback, endCallback), - loadOptions, fType); + universe()->loadFile(file, callback, loadOptions, fType); return; } break; default: { @@ -1902,6 +1891,27 @@ QList DomEnvironment::loadInfoPaths() const return lInfos.keys(); } +DomItem::Callback DomEnvironment::getCallbackFor(DomType fileType, const DomItem &self, + const Callback &loadCallback, + const Callback &directDepsCallback, + const Callback &endCallback) +{ + switch (fileType) { + case DomType::QmlDirectory: + return callbackForQmlDirectory(self, loadCallback, directDepsCallback, endCallback); + case DomType::QmlFile: + return callbackForQmlFile(self, loadCallback, directDepsCallback, endCallback); + case DomType::QmltypesFile: + return callbackForQmltypesFile(self, loadCallback, directDepsCallback, endCallback); + case DomType::QmldirFile: + return callbackForQmldirFile(self, loadCallback, directDepsCallback, endCallback); + case DomType::JsFile: + return callbackForJSFile(self, loadCallback, directDepsCallback, endCallback); + default: + return DomTop::Callback(); + } +} + DomItem::Callback DomEnvironment::callbackForQmlDirectory(const DomItem &self, Callback loadCallback, Callback allDirectDepsCallback, Callback endCallback) diff --git a/src/qmldom/qqmldomtop_p.h b/src/qmldom/qqmldomtop_p.h index 823f59e6da..3e0401182c 100644 --- a/src/qmldom/qqmldomtop_p.h +++ b/src/qmldom/qqmldomtop_p.h @@ -197,7 +197,7 @@ public: return std::static_pointer_cast(doCopy(self)); } - void loadFile(const FileToLoad &file, Callback callback, LoadOptions loadOptions, + void loadFile(const FileToLoad &file, const Callback &callback, LoadOptions loadOptions, std::optional fileType = std::optional()); void removePath(const QString &dir); @@ -840,8 +840,9 @@ public: private: friend class RefCacheEntry; - void loadFile(const FileToLoad &file, Callback loadCallback, Callback directDepsCallback, - Callback endCallback, LoadOptions loadOptions, + void loadFile(const FileToLoad &file, const Callback &loadCallback, + const Callback &directDepsCallback, const Callback &endCallback, + LoadOptions loadOptions, std::optional fileType = std::optional(), const ErrorHandler &h = nullptr); @@ -975,6 +976,8 @@ private: return qMakePair(nullptr, nullptr); } + Callback getCallbackFor(DomType fileType, const DomItem &self, const Callback &loadCallback, + const Callback &directDepsCallback, const Callback &endCallback); Callback callbackForQmlDirectory(const DomItem &self, Callback loadCallback, Callback directDepsCallback, Callback endCallback); Callback callbackForQmlFile(const DomItem &self, Callback loadCallback, Callback directDepsCallback, -- cgit v1.2.3