aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitrii Akshintsev <dmitrii.akshintsev@qt.io>2024-01-17 12:00:07 +0100
committerDmitrii Akshintsev <dmitrii.akshintsev@qt.io>2024-01-25 14:36:27 +0000
commited47be3a4fc7fc179eb89e9fcbbb61c94083623c (patch)
treef1082240459b227c97d868a164f5dabbf3f6a36a
parent08d0a569c99b83d742f071aa04c83a0835fe3ea9 (diff)
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 <ulf.hermann@qt.io>
-rw-r--r--src/qmldom/qqmldomtop.cpp52
-rw-r--r--src/qmldom/qqmldomtop_p.h9
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<DomType> 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<DomType> fileType,
const ErrorHandler &h)
{
@@ -1284,16 +1284,15 @@ void DomEnvironment::loadFile(const FileToLoad &file, Callback loadCallback,
shared_ptr<ExternalItemInfoBase> 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<QmlDirectory>(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<Path> 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<DomUniverse>(doCopy(self));
}
- void loadFile(const FileToLoad &file, Callback callback, LoadOptions loadOptions,
+ void loadFile(const FileToLoad &file, const Callback &callback, LoadOptions loadOptions,
std::optional<DomType> fileType = std::optional<DomType>());
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<DomType> fileType = std::optional<DomType>(),
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,