aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qmldom/qqmldomattachedinfo.cpp42
-rw-r--r--src/qmldom/qqmldomattachedinfo_p.h46
-rw-r--r--src/qmldom/qqmldomcomments.cpp14
-rw-r--r--src/qmldom/qqmldomcomments_p.h14
-rw-r--r--src/qmldom/qqmldomcompare.cpp10
-rw-r--r--src/qmldom/qqmldomcompare_p.h18
-rw-r--r--src/qmldom/qqmldomelements.cpp126
-rw-r--r--src/qmldom/qqmldomelements_p.h140
-rw-r--r--src/qmldom/qqmldomexternalitems.cpp50
-rw-r--r--src/qmldom/qqmldomexternalitems_p.h62
-rw-r--r--src/qmldom/qqmldomfieldfilter.cpp4
-rw-r--r--src/qmldom/qqmldomfieldfilter_p.h4
-rw-r--r--src/qmldom/qqmldomitem.cpp438
-rw-r--r--src/qmldom/qqmldomitem_p.h778
-rw-r--r--src/qmldom/qqmldommock.cpp10
-rw-r--r--src/qmldom/qqmldommock_p.h10
-rw-r--r--src/qmldom/qqmldommoduleindex.cpp28
-rw-r--r--src/qmldom/qqmldommoduleindex_p.h22
-rw-r--r--src/qmldom/qqmldomoutwriter.cpp8
-rw-r--r--src/qmldom/qqmldomoutwriter_p.h8
-rw-r--r--src/qmldom/qqmldompath.cpp9
-rw-r--r--src/qmldom/qqmldompath_p.h26
-rw-r--r--src/qmldom/qqmldomscriptelements.cpp24
-rw-r--r--src/qmldom/qqmldomscriptelements_p.h40
-rw-r--r--src/qmldom/qqmldomtop.cpp238
-rw-r--r--src/qmldom/qqmldomtop_p.h164
-rw-r--r--src/qmlls/qqmlcodemodel.cpp4
-rw-r--r--src/qmlls/qqmlcompletionsupport.cpp14
-rw-r--r--src/qmlls/qqmllsutils.cpp20
-rw-r--r--tests/auto/qmldom/domitem/tst_qmldomitem.h26
-rw-r--r--tests/benchmarks/qml/qmldom/tst_qmldomconstruction.cpp2
31 files changed, 1186 insertions, 1213 deletions
diff --git a/src/qmldom/qqmldomattachedinfo.cpp b/src/qmldom/qqmldomattachedinfo.cpp
index 06927f4eb4..3b939597aa 100644
--- a/src/qmldom/qqmldomattachedinfo.cpp
+++ b/src/qmldom/qqmldomattachedinfo.cpp
@@ -26,7 +26,7 @@ Attributes:
\sa QQmlJs::Dom::AttachedInfo
*/
-bool FileLocations::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool FileLocations::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
#ifdef QmlDomAddCodeStr
@@ -46,7 +46,7 @@ bool FileLocations::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
cont = cont && self.dvItemField(visitor, Fields::regions, [this, &self, &loc2str]() {
return self.subMapItem(Map::fromMapRef<SourceLocation>(
self.pathFromOwner().field(Fields::regions), regions,
- [&loc2str](DomItem &map, const PathEls::PathComponent &key, SourceLocation &el) {
+ [&loc2str](const DomItem &map, const PathEls::PathComponent &key, const SourceLocation &el) {
return map.subLocationItem(key, el, loc2str(el));
}));
});
@@ -55,12 +55,12 @@ bool FileLocations::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return self.subMapItem(Map::fromMapRef<QList<SourceLocation>>(
self.pathFromOwner().field(Fields::preCommentLocations),
preCommentLocations,
- [&loc2str](DomItem &map, const PathEls::PathComponent &key,
- QList<SourceLocation> &el) {
+ [&loc2str](const DomItem &map, const PathEls::PathComponent &key,
+ const QList<SourceLocation> &el) {
return map.subListItem(List::fromQListRef<SourceLocation>(
map.pathFromOwner().appendComponent(key), el,
- [&loc2str](DomItem &list, const PathEls::PathComponent &idx,
- SourceLocation &el) {
+ [&loc2str](const DomItem &list, const PathEls::PathComponent &idx,
+ const SourceLocation &el) {
return list.subLocationItem(idx, el, loc2str(el));
}));
}));
@@ -70,12 +70,12 @@ bool FileLocations::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return self.subMapItem(Map::fromMapRef<QList<SourceLocation>>(
self.pathFromOwner().field(Fields::postCommentLocations),
postCommentLocations,
- [&loc2str](DomItem &map, const PathEls::PathComponent &key,
- QList<SourceLocation> &el) {
+ [&loc2str](const DomItem &map, const PathEls::PathComponent &key,
+ const QList<SourceLocation> &el) {
return map.subListItem(List::fromQListRef<SourceLocation>(
map.pathFromOwner().appendComponent(key), el,
- [&loc2str](DomItem &list, const PathEls::PathComponent &idx,
- SourceLocation &el) {
+ [&loc2str](const DomItem &list, const PathEls::PathComponent &idx,
+ const SourceLocation &el) {
return list.subLocationItem(idx, el, loc2str(el));
}));
}));
@@ -100,7 +100,7 @@ FileLocations::Tree FileLocations::ensure(FileLocations::Tree base, Path basePat
}
AttachedInfoLookupResult<FileLocations::Tree>
-FileLocations::findAttachedInfo(DomItem &item, AttachedInfo::FindOptions options)
+FileLocations::findAttachedInfo(const DomItem &item, AttachedInfo::FindOptions options)
{
return AttachedInfoT<FileLocations>::findAttachedInfo(item, Fields::fileLocationsTree, options);
}
@@ -109,7 +109,7 @@ FileLocations::findAttachedInfo(DomItem &item, AttachedInfo::FindOptions options
\internal
Returns the tree corresponding to a DomItem.
*/
-FileLocations::Tree FileLocations::treeOf(DomItem &item)
+FileLocations::Tree FileLocations::treeOf(const DomItem &item)
{
return AttachedInfoT<FileLocations>::treePtr(item, Fields::fileLocationsTree);
}
@@ -118,7 +118,7 @@ FileLocations::Tree FileLocations::treeOf(DomItem &item)
\internal
Returns the filelocation Info corresponding to a DomItem.
*/
-const FileLocations *FileLocations::fileLocationsOf(DomItem &item)
+const FileLocations *FileLocations::fileLocationsOf(const DomItem &item)
{
if (FileLocations::Tree t = treeOf(item))
return &(t->info());
@@ -168,7 +168,7 @@ Attributes:
\sa QQmlJs::Dom::AttachedInfo
*/
-bool AttachedInfo::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool AttachedInfo::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
if (Ptr p = parent())
@@ -180,11 +180,11 @@ bool AttachedInfo::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
cont = cont && self.dvItemField(visitor, Fields::subItems, [this, &self]() {
return self.subMapItem(Map(
Path::Field(Fields::subItems),
- [this](DomItem &map, QString key) {
+ [this](const DomItem &map, QString key) {
Path p = Path::fromString(key);
return map.copy(m_subItems.value(p), map.canonicalPath().key(key));
},
- [this](DomItem &) {
+ [this](const DomItem &) {
QSet<QString> res;
for (auto p : m_subItems.keys())
res.insert(p.toString());
@@ -257,7 +257,7 @@ AttachedInfo::Ptr AttachedInfo::find(AttachedInfo::Ptr self, Path p, AttachedInf
}
AttachedInfoLookupResult<AttachedInfo::Ptr>
-AttachedInfo::findAttachedInfo(DomItem &item, QStringView fieldName,
+AttachedInfo::findAttachedInfo(const DomItem &item, QStringView fieldName,
AttachedInfo::FindOptions options)
{
Path p;
@@ -295,7 +295,7 @@ AttachedInfo::findAttachedInfo(DomItem &item, QStringView fieldName,
return res;
}
-bool UpdatedScriptExpression::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool UpdatedScriptExpression::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && self.dvWrapField(visitor, Fields::expr, expr);
@@ -315,18 +315,18 @@ UpdatedScriptExpression::Tree UpdatedScriptExpression::ensure(UpdatedScriptExpre
}
AttachedInfoLookupResult<UpdatedScriptExpression::Tree>
-UpdatedScriptExpression::findAttachedInfo(DomItem &item, AttachedInfo::FindOptions options)
+UpdatedScriptExpression::findAttachedInfo(const DomItem &item, AttachedInfo::FindOptions options)
{
return AttachedInfoT<UpdatedScriptExpression>::findAttachedInfo(
item, Fields::updatedScriptExpressions, options);
}
-UpdatedScriptExpression::Tree UpdatedScriptExpression::treePtr(DomItem &item)
+UpdatedScriptExpression::Tree UpdatedScriptExpression::treePtr(const DomItem &item)
{
return AttachedInfoT<UpdatedScriptExpression>::treePtr(item, Fields::updatedScriptExpressions);
}
-const UpdatedScriptExpression *UpdatedScriptExpression::exprPtr(DomItem &item)
+const UpdatedScriptExpression *UpdatedScriptExpression::exprPtr(const DomItem &item)
{
if (UpdatedScriptExpression::Tree t = treePtr(item))
return &(t->info());
diff --git a/src/qmldom/qqmldomattachedinfo_p.h b/src/qmldom/qqmldomattachedinfo_p.h
index 2edf6fb368..a5f813e55b 100644
--- a/src/qmldom/qqmldomattachedinfo_p.h
+++ b/src/qmldom/qqmldomattachedinfo_p.h
@@ -66,10 +66,10 @@ public:
using Ptr = std::shared_ptr<AttachedInfo>;
DomType kind() const override { return kindValue; }
- Path canonicalPath(DomItem &self) const override { return self.m_ownerPath; }
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override;
+ Path canonicalPath(const DomItem &self) const override { return self.m_ownerPath; }
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
- AttachedInfo::Ptr makeCopy(DomItem &self) const
+ AttachedInfo::Ptr makeCopy(const DomItem &self) const
{
return std::static_pointer_cast<AttachedInfo>(doCopy(self));
}
@@ -84,14 +84,14 @@ public:
static Ptr ensure(Ptr self, Path path, PathType pType = PathType::Relative);
static Ptr find(Ptr self, Path p, PathType pType = PathType::Relative);
static AttachedInfoLookupResult<Ptr>
- findAttachedInfo(DomItem &item, QStringView treeFieldName,
+ findAttachedInfo(const DomItem &item, QStringView treeFieldName,
FindOptions options = AttachedInfo::FindOption::None);
- static Ptr treePtr(DomItem &item, QStringView fieldName)
+ static Ptr treePtr(const DomItem &item, QStringView fieldName)
{
return findAttachedInfo(item, fieldName, FindOption::None).foundTree;
}
- DomItem itemAtPath(DomItem &self, Path p, PathType pType = PathType::Relative) const
+ DomItem itemAtPath(const DomItem &self, Path p, PathType pType = PathType::Relative) const
{
if (Ptr resPtr = find(self.ownerAs<AttachedInfo>(), p, pType)) {
if (pType == PathType::Canonical)
@@ -105,7 +105,7 @@ public:
return DomItem();
}
- DomItem infoAtPath(DomItem &self, Path p, PathType pType = PathType::Relative) const
+ DomItem infoAtPath(const DomItem &self, Path p, PathType pType = PathType::Relative) const
{
return itemAtPath(self, p, pType).field(Fields::infoItem);
}
@@ -132,11 +132,7 @@ public:
}
virtual AttachedInfo::Ptr instantiate(AttachedInfo::Ptr parent, Path p = Path()) const = 0;
- virtual DomItem infoItem(DomItem &self) = 0;
- DomItem infoItem(DomItem &self) const
- {
- return const_cast<AttachedInfo *>(this)->infoItem(self);
- }
+ virtual DomItem infoItem(const DomItem &self) const = 0;
QMap<Path, Ptr> subItems() const {
return m_subItems;
}
@@ -183,13 +179,13 @@ public:
return std::static_pointer_cast<AttachedInfoT>(AttachedInfo::find(self, p, pType));
}
- static AttachedInfoLookupResult<Ptr> findAttachedInfo(DomItem &item, QStringView fieldName,
+ static AttachedInfoLookupResult<Ptr> findAttachedInfo(const DomItem &item, QStringView fieldName,
AttachedInfo::FindOptions options)
{
return AttachedInfo::findAttachedInfo(item, fieldName, options)
.template as<AttachedInfoT>();
}
- static Ptr treePtr(DomItem &item, QStringView fieldName)
+ static Ptr treePtr(const DomItem &item, QStringView fieldName)
{
return std::static_pointer_cast<AttachedInfoT>(AttachedInfo::treePtr(item, fieldName));
}
@@ -214,9 +210,9 @@ public:
AttachedInfo::Ptr instantiate(AttachedInfo::Ptr parent, Path p = Path()) const override {
return Ptr(new AttachedInfoT(std::static_pointer_cast<AttachedInfoT>(parent), p));
}
- DomItem infoItem(DomItem &self) override { return self.wrapField(Fields::infoItem, m_info); }
+ DomItem infoItem(const DomItem &self) const override { return self.wrapField(Fields::infoItem, m_info); }
- Ptr makeCopy(DomItem &self) const
+ Ptr makeCopy(const DomItem &self) const
{
return std::static_pointer_cast<AttachedInfoT>(doCopy(self));
}
@@ -226,7 +222,7 @@ public:
const Info &info() const { return m_info; }
Info &info() { return m_info; }
protected:
- std::shared_ptr<OwningItem> doCopy(DomItem &) const override
+ std::shared_ptr<OwningItem> doCopy(const DomItem &) const override
{
return Ptr(new AttachedInfoT(*this));
}
@@ -240,7 +236,7 @@ public:
using Tree = std::shared_ptr<AttachedInfoT<FileLocations>>;
constexpr static DomType kindValue = DomType::FileLocations;
DomType kind() const { return kindValue; }
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor);
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const;
void ensureCommentLocations(QList<QString> keys);
static Tree createTree(Path basePath);
@@ -254,10 +250,10 @@ public:
// returns the path looked up and the found tree when looking for the info attached to item
static AttachedInfoLookupResult<Tree>
- findAttachedInfo(DomItem &item,
+ findAttachedInfo(const DomItem &item,
AttachedInfo::FindOptions options = AttachedInfo::FindOption::Default);
- static FileLocations::Tree treeOf(DomItem &);
- static const FileLocations *fileLocationsOf(DomItem &);
+ static FileLocations::Tree treeOf(const DomItem &);
+ static const FileLocations *fileLocationsOf(const DomItem &);
static void updateFullLocation(Tree fLoc, SourceLocation loc);
static void addRegion(Tree fLoc, QString locName, SourceLocation loc);
@@ -276,19 +272,19 @@ public:
using Tree = std::shared_ptr<AttachedInfoT<UpdatedScriptExpression>>;
constexpr static DomType kindValue = DomType::UpdatedScriptExpression;
DomType kind() const { return kindValue; }
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor);
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const;
static Tree createTree(Path basePath);
static Tree ensure(Tree base, Path basePath, AttachedInfo::PathType pType);
// returns the path looked up and the found tree when looking for the info attached to item
static AttachedInfoLookupResult<Tree>
- findAttachedInfo(DomItem &item,
+ findAttachedInfo(const DomItem &item,
AttachedInfo::FindOptions options = AttachedInfo::FindOption::Default);
// convenience: find FileLocations::Tree attached to the given item
- static Tree treePtr(DomItem &);
+ static Tree treePtr(const DomItem &);
// convenience: find FileLocations* attached to the given item (if there is one)
- static const UpdatedScriptExpression *exprPtr(DomItem &);
+ static const UpdatedScriptExpression *exprPtr(const DomItem &);
static bool visitTree(Tree base, function_ref<bool(Path, Tree)> visitor,
Path basePath = Path());
diff --git a/src/qmldom/qqmldomcomments.cpp b/src/qmldom/qqmldomcomments.cpp
index 7a7405f4b1..e75a36510b 100644
--- a/src/qmldom/qqmldomcomments.cpp
+++ b/src/qmldom/qqmldomcomments.cpp
@@ -190,7 +190,7 @@ A comment has methods to write it out again (write) and expose it to the Dom
/*!
\brief Expose attributes to the Dom
*/
-bool Comment::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool Comment::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && self.dvValueField(visitor, Fields::rawComment, rawComment());
@@ -235,7 +235,7 @@ Every region has a name, and should be written out using the OutWriter.writeRegi
startRegion/ EndRegion). Region comments keeps a mapping containing them.
*/
-bool CommentedElement::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool CommentedElement::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && self.dvWrapField(visitor, Fields::preComments, preComments);
@@ -432,12 +432,12 @@ const QSet<int> AstRangesVisitor::kindsToSkip()
\brief Stores the comments associated with javascript AST::Node pointers
*/
-bool AstComments::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool AstComments::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = self.dvItemField(visitor, Fields::commentedElements, [this, &self]() {
return self.subMapItem(Map(
self.pathFromOwner().field(Fields::commentedElements),
- [this](DomItem &map, QString key) {
+ [this](const DomItem &map, QString key) {
bool ok;
// we expose the comments as map just for debugging purposes,
// as key we use the address hex value as key (keys must be strings)
@@ -448,7 +448,7 @@ bool AstComments::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return map.wrap(PathEls::Key(key), m_commentedElements[n]);
return DomItem();
},
- [this](DomItem &) {
+ [this](const DomItem &) {
QSet<QString> res;
for (AST::Node *n : m_commentedElements.keys()) {
QString name;
@@ -673,7 +673,7 @@ void AstComments::collectComments(std::shared_ptr<Engine> engine, AST::Node *n,
else
cEl.postComments.append(comment);
} else if (commentEl.element.index() == 1) {
- DomItem rComments = rootItem.item()
+ MutableDomItem rComments = rootItem.item()
.path(std::get<1>(commentEl.element).path)
.field(Fields::comments);
if (RegionComments *rCommentsPtr = rComments.mutableAs<RegionComments>()) {
@@ -728,7 +728,7 @@ QMultiMap<quint32, const QList<Comment> *> AstComments::allCommentsInNode(AST::N
return v.nodeComments;
}
-bool RegionComments::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool RegionComments::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
if (!regionComments.isEmpty())
diff --git a/src/qmldom/qqmldomcomments_p.h b/src/qmldom/qqmldomcomments_p.h
index e4f85fa3e3..e987644343 100644
--- a/src/qmldom/qqmldomcomments_p.h
+++ b/src/qmldom/qqmldomcomments_p.h
@@ -82,7 +82,7 @@ public:
{
}
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor);
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const;
int newlinesBefore() const { return m_newlinesBefore; }
void setNewlinesBefore(int n) { m_newlinesBefore = n; }
QStringView rawComment() const { return m_comment; }
@@ -107,7 +107,7 @@ public:
constexpr static DomType kindValue = DomType::CommentedElement;
DomType kind() const { return kindValue; }
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor);
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const;
void writePre(OutWriter &lw, QList<SourceLocation> *locations = nullptr) const;
void writePost(OutWriter &lw, QList<SourceLocation> *locations = nullptr) const;
QMultiMap<quint32, const QList<Comment> *> commentGroups(SourceLocation elLocation) const;
@@ -131,7 +131,7 @@ public:
constexpr static DomType kindValue = DomType::RegionComments;
DomType kind() const { return kindValue; }
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor);
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const;
friend bool operator==(const RegionComments &c1, const RegionComments &c2)
{
@@ -170,7 +170,7 @@ public:
class QMLDOM_EXPORT AstComments final : public OwningItem
{
protected:
- std::shared_ptr<OwningItem> doCopy(DomItem &) const override
+ std::shared_ptr<OwningItem> doCopy(const DomItem &) const override
{
return std::make_shared<AstComments>(*this);
}
@@ -178,13 +178,13 @@ protected:
public:
constexpr static DomType kindValue = DomType::AstComments;
DomType kind() const override { return kindValue; }
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor) override;
- std::shared_ptr<AstComments> makeCopy(DomItem &self) const
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override;
+ std::shared_ptr<AstComments> makeCopy(const DomItem &self) const
{
return std::static_pointer_cast<AstComments>(doCopy(self));
}
- Path canonicalPath(DomItem &self) const override { return self.m_ownerPath; }
+ Path canonicalPath(const DomItem &self) const override { return self.m_ownerPath; }
static void collectComments(MutableDomItem &item);
static void collectComments(std::shared_ptr<Engine> engine, AST::Node *n,
std::shared_ptr<AstComments> collectComments,
diff --git a/src/qmldom/qqmldomcompare.cpp b/src/qmldom/qqmldomcompare.cpp
index 1d0e6fdfbc..3793a1a853 100644
--- a/src/qmldom/qqmldomcompare.cpp
+++ b/src/qmldom/qqmldomcompare.cpp
@@ -8,8 +8,8 @@ QT_BEGIN_NAMESPACE
namespace QQmlJS {
namespace Dom {
-bool domCompare(DomItem &i1, DomItem &i2, function_ref<bool(Path, DomItem &, DomItem &)> change,
- function_ref<bool(DomItem &, const PathEls::PathComponent &, DomItem &)> filter,
+bool domCompare(const DomItem &i1, const DomItem &i2, function_ref<bool(Path, const DomItem &, const DomItem &)> change,
+ function_ref<bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)> filter,
Path basePath)
{
DomKind k1 = i1.domKind();
@@ -155,15 +155,15 @@ bool domCompare(DomItem &i1, DomItem &i2, function_ref<bool(Path, DomItem &, Dom
}
QStringList
-domCompareStrList(DomItem &i1, DomItem &i2,
- function_ref<bool(DomItem &, const PathEls::PathComponent &, DomItem &) const> filter,
+domCompareStrList(const DomItem &i1, const DomItem &i2,
+ function_ref<bool(const DomItem &, const PathEls::PathComponent &, const DomItem &) const> filter,
DomCompareStrList stopAtFirstDiff)
{
QStringList res;
bool hasDiff = false;
domCompare(
i1, i2,
- [&res, &hasDiff, stopAtFirstDiff](Path p, DomItem &j1, DomItem &j2) {
+ [&res, &hasDiff, stopAtFirstDiff](Path p, const DomItem &j1, const DomItem &j2) {
hasDiff = true;
if (!j1) {
res.append(QStringLiteral("- %1\n").arg(p.toString()));
diff --git a/src/qmldom/qqmldomcompare_p.h b/src/qmldom/qqmldomcompare_p.h
index fcb5246c6f..651486d7a9 100644
--- a/src/qmldom/qqmldomcompare_p.h
+++ b/src/qmldom/qqmldomcompare_p.h
@@ -26,20 +26,20 @@ namespace QQmlJS {
namespace Dom {
bool domCompare(
- DomItem &i1, DomItem &i2, function_ref<bool(Path, DomItem &, DomItem &)> change,
- function_ref<bool(DomItem &, const PathEls::PathComponent &, DomItem &)> filter = noFilter,
+ const DomItem &i1, const DomItem &i2, function_ref<bool(Path, const DomItem &, const DomItem &)> change,
+ function_ref<bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)> filter = noFilter,
Path p = Path());
enum DomCompareStrList { FirstDiff, AllDiffs };
QMLDOM_EXPORT QStringList domCompareStrList(
- DomItem &i1, DomItem &i2,
- function_ref<bool(DomItem &, const PathEls::PathComponent &, DomItem &) const> filter = noFilter,
+ const DomItem &i1, const DomItem &i2,
+ function_ref<bool(const DomItem &, const PathEls::PathComponent &, const DomItem &) const> filter = noFilter,
DomCompareStrList stopAtFirstDiff = DomCompareStrList::FirstDiff);
inline QStringList domCompareStrList(
- MutableDomItem &i1, DomItem &i2,
- function_ref<bool(DomItem &, const PathEls::PathComponent &, DomItem &) const> filter = noFilter,
+ MutableDomItem &i1, const DomItem &i2,
+ function_ref<bool(const DomItem &, const PathEls::PathComponent &, const DomItem &) const> filter = noFilter,
DomCompareStrList stopAtFirstDiff = DomCompareStrList::FirstDiff)
{
DomItem ii1 = i1.item();
@@ -47,8 +47,8 @@ inline QStringList domCompareStrList(
}
inline QStringList domCompareStrList(
- DomItem &i1, MutableDomItem &i2,
- function_ref<bool(DomItem &, const PathEls::PathComponent &, DomItem &) const> filter = noFilter,
+ const DomItem &i1, MutableDomItem &i2,
+ function_ref<bool(const DomItem &, const PathEls::PathComponent &, const DomItem &) const> filter = noFilter,
DomCompareStrList stopAtFirstDiff = DomCompareStrList::FirstDiff)
{
DomItem ii2 = i2.item();
@@ -57,7 +57,7 @@ inline QStringList domCompareStrList(
inline QStringList domCompareStrList(
MutableDomItem &i1, MutableDomItem &i2,
- function_ref<bool(DomItem &, const PathEls::PathComponent &, DomItem &) const> filter = noFilter,
+ function_ref<bool(const DomItem &, const PathEls::PathComponent &, const DomItem &) const> filter = noFilter,
DomCompareStrList stopAtFirstDiff = DomCompareStrList::FirstDiff)
{
DomItem ii1 = i1.item();
diff --git a/src/qmldom/qqmldomelements.cpp b/src/qmldom/qqmldomelements.cpp
index fe4fc19f8f..1dd5dba140 100644
--- a/src/qmldom/qqmldomelements.cpp
+++ b/src/qmldom/qqmldomelements.cpp
@@ -86,7 +86,7 @@ static ErrorGroups domParsingErrors()
return res;
}
-bool CommentableDomElement::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool CommentableDomElement::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && self.dvWrapField(visitor, Fields::comments, m_comments);
@@ -104,7 +104,7 @@ Component::Component(QString name) : CommentableDomElement(Path()), m_name(name)
Component::Component(Path pathFromOwner) : CommentableDomElement(pathFromOwner) { }
-bool Component::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool Component::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = CommentableDomElement::iterateDirectSubpaths(self, visitor);
cont = cont && self.dvValueField(visitor, Fields::name, name());
@@ -118,7 +118,7 @@ bool Component::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return cont;
}
-DomItem Component::field(DomItem &self, QStringView name)
+DomItem Component::field(const DomItem &self, QStringView name) const
{
switch (name.size()) {
case 4:
@@ -141,7 +141,7 @@ Path Component::addObject(const QmlObject &object, QmlObject **oPtr)
oPtr);
}
-bool QmlComponent::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool QmlComponent::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = Component::iterateDirectSubpaths(self, visitor);
cont = cont && self.dvWrapField(visitor, Fields::ids, m_ids);
@@ -157,7 +157,7 @@ void QmlComponent::updatePathFromOwner(Path newPath)
updatePathFromOwnerMultiMap(m_ids, newPath.field(Fields::annotations));
}
-void QmlComponent::writeOut(DomItem &self, OutWriter &lw) const
+void QmlComponent::writeOut(const DomItem &self, OutWriter &lw) const
{
if (name().contains(QLatin1Char('.'))) {
// inline component
@@ -171,7 +171,7 @@ void QmlComponent::writeOut(DomItem &self, OutWriter &lw) const
self.field(Fields::objects).index(0).writeOut(lw);
}
-QList<QString> QmlComponent::subComponentsNames(DomItem &self) const
+QList<QString> QmlComponent::subComponentsNames(const DomItem &self) const
{
DomItem components = self.owner().field(Fields::components);
QSet<QString> cNames = components.keys();
@@ -188,7 +188,7 @@ QList<QString> QmlComponent::subComponentsNames(DomItem &self) const
return subNames;
}
-QList<DomItem> QmlComponent::subComponents(DomItem &self) const
+QList<DomItem> QmlComponent::subComponents(const DomItem &self) const
{
DomItem components = self.owner().field(Fields::components);
QList<DomItem> res;
@@ -245,7 +245,7 @@ QString Version::stringValue() const
return QString::number(majorVersion) + QChar::fromLatin1('.') + QString::number(minorVersion);
}
-bool Version::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool Version::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && self.dvWrapField(visitor, Fields::majorVersion, majorVersion);
@@ -298,7 +298,7 @@ Import Import::fromFileString(QString importStr, QString importId, ErrorHandler)
return Import(QmlUri::fromDirectoryString(importStr), Version(), importId);
}
-bool Import::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool Import::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && self.dvValueField(visitor, Fields::uri, uri.toString());
@@ -311,7 +311,7 @@ bool Import::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return cont;
}
-void Import::writeOut(DomItem &, OutWriter &ow) const
+void Import::writeOut(const DomItem &, OutWriter &ow) const
{
if (implicit)
return;
@@ -329,7 +329,7 @@ void Import::writeOut(DomItem &, OutWriter &ow) const
Id::Id(QString idName, Path referredObject) : name(idName), referredObjectPath(referredObject) { }
-bool Id::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool Id::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && self.dvValueField(visitor, Fields::name, name);
@@ -353,7 +353,7 @@ Path Id::addAnnotation(Path selfPathFromOwner, const QmlObject &annotation, QmlO
QmlObject::QmlObject(Path pathFromOwner) : CommentableDomElement(pathFromOwner) { }
-bool QmlObject::iterateBaseDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool QmlObject::iterateBaseDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = CommentableDomElement::iterateDirectSubpaths(self, visitor);
if (!idStr().isEmpty())
@@ -371,11 +371,11 @@ bool QmlObject::iterateBaseDirectSubpaths(DomItem &self, DirectVisitor visitor)
cont = cont && self.dvItemField(visitor, Fields::propertyInfos, [this, &self]() {
return self.subMapItem(Map(
pathFromOwner().field(Fields::propertyInfos),
- [&self](DomItem &map, QString k) {
+ [&self](const DomItem &map, QString k) {
auto pInfo = self.propertyInfoWithName(k);
return map.wrap(PathEls::Key(k), pInfo);
},
- [&self](DomItem &) { return self.propertyInfoNames(); },
+ [&self](const DomItem &) { return self.propertyInfoNames(); },
QLatin1String("PropertyInfo")));
});
return cont;
@@ -393,7 +393,7 @@ QList<QString> QmlObject::fields() const
return myFields;
}
-bool QmlObject::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool QmlObject::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = iterateBaseDirectSubpaths(self, visitor);
cont = cont && self.dvValueLazyField(visitor, Fields::defaultPropertyName, [this, &self]() {
@@ -402,7 +402,7 @@ bool QmlObject::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return cont;
}
-DomItem QmlObject::field(DomItem &self, QStringView name)
+DomItem QmlObject::field(const DomItem &self, QStringView name) const
{
switch (name.size()) {
case 4:
@@ -464,11 +464,11 @@ DomItem QmlObject::field(DomItem &self, QStringView name)
if (name == Fields::propertyInfos)
return self.subMapItem(Map(
pathFromOwner().field(Fields::propertyInfos),
- [self](DomItem &map, QString k) mutable {
+ [self](const DomItem &map, QString k) mutable {
auto pInfo = self.propertyInfoWithName(k);
return map.wrap(PathEls::Key(k), pInfo);
},
- [self](DomItem &) mutable { return self.propertyInfoNames(); },
+ [self](const DomItem &) mutable { return self.propertyInfoNames(); },
QLatin1String("PropertyInfo")));
break;
case 19:
@@ -506,14 +506,14 @@ QString QmlObject::localDefaultPropertyName() const
return QString();
}
-QString QmlObject::defaultPropertyName(DomItem &self) const
+QString QmlObject::defaultPropertyName(const DomItem &self) const
{
QString dProp = localDefaultPropertyName();
if (!dProp.isEmpty())
return dProp;
QString res = QStringLiteral(u"data");
self.visitPrototypeChain(
- [&res](DomItem &obj) {
+ [&res](const DomItem &obj) {
if (const QmlObject *objPtr = obj.as<QmlObject>()) {
QString dProp = objPtr->localDefaultPropertyName();
if (!dProp.isEmpty()) {
@@ -527,10 +527,10 @@ QString QmlObject::defaultPropertyName(DomItem &self) const
return res;
}
-bool QmlObject::iterateSubOwners(DomItem &self, function_ref<bool(DomItem &)> visitor) const
+bool QmlObject::iterateSubOwners(const DomItem &self, function_ref<bool(const DomItem &)> visitor) const
{
- bool cont = self.field(Fields::bindings).visitKeys([visitor](QString, DomItem &bs) {
- return bs.visitIndexes([visitor](DomItem &b) {
+ bool cont = self.field(Fields::bindings).visitKeys([visitor](QString, const DomItem &bs) {
+ return bs.visitIndexes([visitor](const DomItem &b) {
DomItem v = b.field(Fields::value);
if (std::shared_ptr<ScriptExpression> vPtr = v.ownerAs<ScriptExpression>()) {
if (!visitor(v))
@@ -540,7 +540,7 @@ bool QmlObject::iterateSubOwners(DomItem &self, function_ref<bool(DomItem &)> vi
return true;
});
});
- cont = cont && self.field(Fields::children).visitIndexes([visitor](DomItem &qmlObj) {
+ cont = cont && self.field(Fields::children).visitIndexes([visitor](const DomItem &qmlObj) {
if (const QmlObject *qmlObjPtr = qmlObj.as<QmlObject>()) {
return qmlObjPtr->iterateSubOwners(qmlObj, visitor);
}
@@ -576,14 +576,14 @@ static QStringList dotExpressionToList(std::shared_ptr<ScriptExpression> expr)
return res;
}
-LocallyResolvedAlias QmlObject::resolveAlias(DomItem &self,
+LocallyResolvedAlias QmlObject::resolveAlias(const DomItem &self,
std::shared_ptr<ScriptExpression> accessSequence) const
{
QStringList accessSequenceList = dotExpressionToList(accessSequence);
return resolveAlias(self, accessSequenceList);
}
-LocallyResolvedAlias QmlObject::resolveAlias(DomItem &self, const QStringList &accessSequence) const
+LocallyResolvedAlias QmlObject::resolveAlias(const DomItem &self, const QStringList &accessSequence) const
{
LocallyResolvedAlias res;
QSet<QString> visitedAlias;
@@ -699,7 +699,7 @@ MutableDomItem QmlObject::addMethod(MutableDomItem &self, MethodInfo functionDef
return self.owner().path(p);
}
-void QmlObject::writeOut(DomItem &self, OutWriter &ow, QString onTarget) const
+void QmlObject::writeOut(const DomItem &self, OutWriter &ow, QString onTarget) const
{
const quint32 posOfNewElements = std::numeric_limits<quint32>::max();
bool isRootObject = pathFromOwner().length() == 5
@@ -748,7 +748,7 @@ void QmlObject::writeOut(DomItem &self, OutWriter &ow, QString onTarget) const
FileLocations::Tree componentLoc;
if (isRootObject && objLoc.foundTree)
componentLoc = objLoc.foundTree->parent()->parent();
- auto addMMap = [&attribs, &startLoc](DomItem &base, FileLocations::Tree baseLoc) {
+ auto addMMap = [&attribs, &startLoc](const DomItem &base, FileLocations::Tree baseLoc) {
if (!base)
return;
for (auto els : base.values()) {
@@ -765,7 +765,7 @@ void QmlObject::writeOut(DomItem &self, OutWriter &ow, QString onTarget) const
DomItem base = this->field(self, fieldName);
addMMap(base, FileLocations::find(objLoc.foundTree, base.pathFromOwner().last()));
};
- auto addSingleLevel = [&attribs, &startLoc](DomItem &base, FileLocations::Tree baseLoc) {
+ auto addSingleLevel = [&attribs, &startLoc](const DomItem &base, FileLocations::Tree baseLoc) {
if (!base)
return;
for (auto el : base.values()) {
@@ -785,7 +785,7 @@ void QmlObject::writeOut(DomItem &self, OutWriter &ow, QString onTarget) const
FileLocations::find(objLoc.foundTree, children.pathFromOwner().last()));
if (isRootObject) {
DomItem subCs = component.field(Fields::subComponents);
- for (DomItem &c : subCs.values()) {
+ for (const DomItem &c : subCs.values()) {
AttachedInfoLookupResult<FileLocations::Tree> subLoc =
FileLocations::findAttachedInfo(c);
Q_ASSERT(subLoc.foundTree);
@@ -877,7 +877,7 @@ void QmlObject::writeOut(DomItem &self, OutWriter &ow, QString onTarget) const
DomItem b;
bool uniqueDeclarationWithThisName = pDefs.size() == 1;
if (uniqueDeclarationWithThisName && !pDefPtr->isRequired)
- bindings.key(pDef.name()).visitIndexes([&b, pDefPtr](DomItem &el) {
+ bindings.key(pDef.name()).visitIndexes([&b, pDefPtr](const DomItem &el) {
const Binding *elPtr = el.as<Binding>();
if (elPtr && elPtr->bindingType() == BindingType::Normal) {
switch (elPtr->valueKind()) {
@@ -1072,7 +1072,7 @@ Binding &Binding::operator=(const Binding &o)
return *this;
}
-bool Binding::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool Binding::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && self.dvValueField(visitor, Fields::name, m_name);
@@ -1095,7 +1095,7 @@ bool Binding::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return cont;
}
-DomItem Binding::valueItem(DomItem &self) const
+DomItem Binding::valueItem(const DomItem &self) const
{
if (!m_value)
return DomItem();
@@ -1165,7 +1165,7 @@ void Binding::updatePathFromOwner(Path newPath)
updatePathFromOwnerQList(m_annotations, newPath.field(Fields::annotations));
}
-void Binding::writeOut(DomItem &self, OutWriter &lw) const
+void Binding::writeOut(const DomItem &self, OutWriter &lw) const
{
lw.ensureNewline();
if (m_bindingType == BindingType::Normal) {
@@ -1185,7 +1185,7 @@ void Binding::writeOut(DomItem &self, OutWriter &lw) const
}
}
-void Binding::writeOutValue(DomItem &self, OutWriter &lw) const
+void Binding::writeOutValue(const DomItem &self, OutWriter &lw) const
{
DomItem v = valueItem(self);
switch (valueKind()) {
@@ -1207,7 +1207,7 @@ void Binding::writeOutValue(DomItem &self, OutWriter &lw) const
}
}
-bool QmltypesComponent::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool QmltypesComponent::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = Component::iterateDirectSubpaths(self, visitor);
cont = cont && self.dvWrapField(visitor, Fields::exports, m_exports);
@@ -1246,7 +1246,7 @@ Export Export::fromString(Path source, QStringView exp, Path typePath, ErrorHand
return res;
}
-bool AttributeInfo::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool AttributeInfo::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && self.dvValueField(visitor, Fields::name, name);
@@ -1272,7 +1272,7 @@ void AttributeInfo::updatePathFromOwner(Path newPath)
updatePathFromOwnerQList(annotations, newPath.field(Fields::annotations));
}
-bool EnumDecl::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool EnumDecl::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = CommentableDomElement::iterateDirectSubpaths(self, visitor);
cont = cont && self.dvValueField(visitor, Fields::name, name());
@@ -1298,7 +1298,7 @@ Path EnumDecl::addAnnotation(const QmlObject &annotation, QmlObject **aPtr)
annotation, aPtr);
}
-void EnumDecl::writeOut(DomItem &self, OutWriter &ow) const
+void EnumDecl::writeOut(const DomItem &self, OutWriter &ow) const
{
ow.writeRegion(u"enum", u"enum")
.space()
@@ -1314,7 +1314,7 @@ void EnumDecl::writeOut(DomItem &self, OutWriter &ow) const
ow.ensureNewline().writeRegion(u"rbrace", u"}");
}
-QList<Path> ImportScope::allSources(DomItem &self) const
+QList<Path> ImportScope::allSources(const DomItem &self) const
{
DomItem top = self.top();
DomItem env = top.environment();
@@ -1366,14 +1366,14 @@ QList<Path> ImportScope::allSources(DomItem &self) const
return res;
}
-bool ImportScope::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool ImportScope::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && self.dvReferencesField(visitor, Fields::importSources, m_importSourcePaths);
cont = cont && self.dvItemField(visitor, Fields::allSources, [this, &self]() -> DomItem {
return self.subListItem(List::fromQList<Path>(
self.pathFromOwner().field(Fields::allSources), allSources(self),
- [](DomItem &list, const PathEls::PathComponent &p, const Path &el) {
+ [](const DomItem &list, const PathEls::PathComponent &p, const Path &el) {
return list.subDataItem(p, el.toString());
}));
});
@@ -1381,20 +1381,20 @@ bool ImportScope::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
cont = cont && self.dvItemField(visitor, Fields::imported, [this, &self]() -> DomItem {
return self.subMapItem(Map(
self.pathFromOwner().field(Fields::imported),
- [this, &self](DomItem &map, QString key) {
+ [this, &self](const DomItem &map, QString key) {
return map.subListItem(List::fromQList<DomItem>(
map.pathFromOwner().key(key), importedItemsWithName(self, key),
- [](DomItem &, const PathEls::PathComponent &, DomItem &el) {
+ [](const DomItem &, const PathEls::PathComponent &, const DomItem &el) {
return el;
}));
},
- [this, &self](DomItem &) { return this->importedNames(self); },
+ [this, &self](const DomItem &) { return this->importedNames(self); },
QLatin1String("List<Export>")));
});
return cont;
}
-bool PropertyInfo::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool PropertyInfo::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && self.dvValueField(visitor, Fields::propertyDefs, propertyDefs);
@@ -1460,7 +1460,7 @@ BindingValue &BindingValue::operator=(const BindingValue &o)
return *this;
}
-DomItem BindingValue::value(DomItem &binding)
+DomItem BindingValue::value(const DomItem &binding) const
{
switch (kind) {
case BindingValueKind::Empty:
@@ -1472,7 +1472,7 @@ DomItem BindingValue::value(DomItem &binding)
case BindingValueKind::Array:
return binding.subListItem(List::fromQListRef<QmlObject>(
binding.pathFromOwner().field(u"value"), array,
- [binding](DomItem &self, const PathEls::PathComponent &, QmlObject &obj) {
+ [binding](const DomItem &self, const PathEls::PathComponent &, const QmlObject &obj) {
return self.copy(&obj);
}));
}
@@ -1549,7 +1549,7 @@ ScriptExpression::ScriptExpression(const ScriptExpression &e) : OwningItem(e)
m_astComments = e.m_astComments;
}
-std::shared_ptr<ScriptExpression> ScriptExpression::copyWithUpdatedCode(DomItem &self,
+std::shared_ptr<ScriptExpression> ScriptExpression::copyWithUpdatedCode(const DomItem &self,
QString code) const
{
std::shared_ptr<ScriptExpression> copy = makeCopy(self);
@@ -1560,7 +1560,7 @@ std::shared_ptr<ScriptExpression> ScriptExpression::copyWithUpdatedCode(DomItem
return copy;
}
-bool ScriptExpression::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool ScriptExpression::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = OwningItem::iterateDirectSubpaths(self, visitor);
cont = cont && self.dvValueField(visitor, Fields::code, code());
@@ -1695,7 +1695,7 @@ QString ScriptExpression::astRelocatableDump() const
});
}
-void ScriptExpression::writeOut(DomItem &self, OutWriter &lw) const
+void ScriptExpression::writeOut(const DomItem &self, OutWriter &lw) const
{
OutWriter *ow = &lw;
@@ -1721,7 +1721,7 @@ void ScriptExpression::writeOut(DomItem &self, OutWriter &lw) const
lw.lineWriter.endSourceLocation(*codeLoc);
}
-SourceLocation ScriptExpression::globalLocation(DomItem &self) const
+SourceLocation ScriptExpression::globalLocation(const DomItem &self) const
{
if (const FileLocations *fLocPtr = FileLocations::fileLocationsOf(self)) {
return fLocPtr->regions.value(QString(), fLocPtr->fullRegion);
@@ -1734,7 +1734,7 @@ bool PropertyDefinition::isParametricType() const
return typeName.contains(QChar(u'<'));
}
-void PropertyDefinition::writeOut(DomItem &, OutWriter &lw) const
+void PropertyDefinition::writeOut(const DomItem &, OutWriter &lw) const
{
lw.ensureNewline();
if (isDefaultMember)
@@ -1750,7 +1750,7 @@ void PropertyDefinition::writeOut(DomItem &, OutWriter &lw) const
lw.writeRegion(u"name", name);
}
-bool MethodInfo::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool MethodInfo::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = AttributeInfo::iterateDirectSubpaths(self, visitor);
cont = cont && self.dvWrapField(visitor, Fields::parameters, parameters);
@@ -1773,7 +1773,7 @@ bool MethodInfo::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return cont;
}
-QString MethodInfo::preCode(DomItem &self) const
+QString MethodInfo::preCode(const DomItem &self) const
{
QString res;
LineWriter lw([&res](QStringView s) { res.append(s); }, QLatin1String("*preCode*"));
@@ -1800,12 +1800,12 @@ QString MethodInfo::preCode(DomItem &self) const
return res;
}
-QString MethodInfo::postCode(DomItem &) const
+QString MethodInfo::postCode(const DomItem &) const
{
return QLatin1String("\n}\n");
}
-void MethodInfo::writeOut(DomItem &self, OutWriter &ow) const
+void MethodInfo::writeOut(const DomItem &self, OutWriter &ow) const
{
switch (methodType) {
case MethodType::Signal: {
@@ -1860,7 +1860,7 @@ void MethodInfo::writeOut(DomItem &self, OutWriter &ow) const
}
}
-bool MethodParameter::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool MethodParameter::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && self.dvValueField(visitor, Fields::name, name);
@@ -1884,7 +1884,7 @@ bool MethodParameter::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor
return cont;
}
-void MethodParameter::writeOut(DomItem &self, OutWriter &ow) const
+void MethodParameter::writeOut(const DomItem &self, OutWriter &ow) const
{
if (!name.isEmpty()) {
if (isRestElement)
@@ -1903,7 +1903,7 @@ void MethodParameter::writeOut(DomItem &self, OutWriter &ow) const
}
}
-void MethodParameter::writeOutSignal(DomItem &self, OutWriter &ow) const
+void MethodParameter::writeOutSignal(const DomItem &self, OutWriter &ow) const
{
self.writeOutPre(ow);
if (!typeName.isEmpty())
@@ -1912,7 +1912,7 @@ void MethodParameter::writeOutSignal(DomItem &self, OutWriter &ow) const
self.writeOutPost(ow);
}
-void Pragma::writeOut(DomItem &, OutWriter &ow) const
+void Pragma::writeOut(const DomItem &, OutWriter &ow) const
{
ow.ensureNewline();
ow.writeRegion(u"pragma").space().writeRegion(u"name", name);
@@ -1932,7 +1932,7 @@ void Pragma::writeOut(DomItem &, OutWriter &ow) const
ow.ensureNewline();
}
-bool EnumItem::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool EnumItem::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && self.dvValueField(visitor, Fields::name, name());
@@ -1941,7 +1941,7 @@ bool EnumItem::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return cont;
}
-void EnumItem::writeOut(DomItem &self, OutWriter &ow) const
+void EnumItem::writeOut(const DomItem &self, OutWriter &ow) const
{
ow.ensureNewline();
ow.writeRegion(u"name", name());
diff --git a/src/qmldom/qqmldomelements_p.h b/src/qmldom/qqmldomelements_p.h
index 67ba7edb56..0e0a5ffc81 100644
--- a/src/qmldom/qqmldomelements_p.h
+++ b/src/qmldom/qqmldomelements_p.h
@@ -145,7 +145,7 @@ public:
{
}
CommentableDomElement &operator=(const CommentableDomElement &o) = default;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override;
RegionComments &comments() { return m_comments; }
const RegionComments &comments() const { return m_comments; }
@@ -163,7 +163,7 @@ public:
Version(qint32 majorVersion = Undefined, qint32 minorVersion = Undefined);
static Version fromString(QStringView v);
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor);
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const;
bool isLatest() const;
bool isValid() const;
@@ -272,7 +272,7 @@ public:
{
}
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor);
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const;
Path importedPath() const
{
if (uri.isDirectory()) {
@@ -296,7 +296,7 @@ public:
}
friend bool operator!=(const Import &i1, const Import &i2) { return !(i1 == i2); }
- void writeOut(DomItem &self, OutWriter &ow) const;
+ void writeOut(const DomItem &self, OutWriter &ow) const;
static QRegularExpression importRe();
@@ -312,7 +312,7 @@ class QMLDOM_EXPORT ModuleAutoExport
public:
constexpr static DomType kindValue = DomType::ModuleAutoExport;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && self.dvWrapField(visitor, Fields::import, import);
@@ -343,7 +343,7 @@ public:
{
}
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = self.dvValueField(visitor, Fields::name, name);
cont = cont && self.dvValueField(visitor, Fields::values, values);
@@ -351,7 +351,7 @@ public:
return cont;
}
- void writeOut(DomItem &self, OutWriter &ow) const;
+ void writeOut(const DomItem &self, OutWriter &ow) const;
QString name;
QStringList values;
@@ -365,7 +365,7 @@ public:
Id(QString idName = QString(), Path referredObject = Path());
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor);
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const;
void updatePathFromOwner(Path pathFromOwner);
Path addAnnotation(Path selfPathFromOwner, const QmlObject &ann, QmlObject **aPtr = nullptr);
@@ -416,16 +416,16 @@ public:
ScriptExpression(const ScriptExpression &e);
- std::shared_ptr<ScriptExpression> makeCopy(DomItem &self) const
+ std::shared_ptr<ScriptExpression> makeCopy(const DomItem &self) const
{
return std::static_pointer_cast<ScriptExpression>(doCopy(self));
}
- std::shared_ptr<ScriptExpression> copyWithUpdatedCode(DomItem &self, QString code) const;
+ std::shared_ptr<ScriptExpression> copyWithUpdatedCode(const DomItem &self, QString code) const;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
- Path canonicalPath(DomItem &self) const override { return self.m_ownerPath; }
+ Path canonicalPath(const DomItem &self) const override { return self.m_ownerPath; }
// parsed and created if not available
AST::Node *ast() const { return m_ast; }
// dump of the ast (without locations)
@@ -457,8 +457,8 @@ public:
return m_engine;
}
std::shared_ptr<AstComments> astComments() const { return m_astComments; }
- void writeOut(DomItem &self, OutWriter &lw) const override;
- SourceLocation globalLocation(DomItem &self) const;
+ void writeOut(const DomItem &self, OutWriter &lw) const override;
+ SourceLocation globalLocation(const DomItem &self) const;
SourceLocation localOffset() const { return m_localOffset; }
QStringView preCode() const { return m_preCode; }
QStringView postCode() const { return m_postCode; }
@@ -466,12 +466,12 @@ public:
ScriptElementVariant scriptElement() { return m_element; }
protected:
- std::shared_ptr<OwningItem> doCopy(DomItem &) const override
+ std::shared_ptr<OwningItem> doCopy(const DomItem &) const override
{
return std::make_shared<ScriptExpression>(*this);
}
- std::function<SourceLocation(SourceLocation)> locationToGlobalF(DomItem &self) const
+ std::function<SourceLocation(SourceLocation)> locationToGlobalF(const DomItem &self) const
{
SourceLocation loc = globalLocation(self);
return [loc, this](SourceLocation x) {
@@ -492,7 +492,7 @@ protected:
: x.startColumn)); // are line and column 1 based? then we should + 1
}
- std::function<SourceLocation(SourceLocation)> locationToLocalF(DomItem &) const
+ std::function<SourceLocation(SourceLocation)> locationToLocalF(const DomItem &) const
{
return [this](SourceLocation x) { return locationToLocal(x); };
}
@@ -532,8 +532,8 @@ public:
Binding &operator=(const Binding &);
Binding &operator=(Binding &&) = default;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor);
- DomItem valueItem(DomItem &self) const; // ### REVISIT: consider replacing return value with variant
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const;
+ DomItem valueItem(const DomItem &self) const; // ### REVISIT: consider replacing return value with variant
BindingValueKind valueKind() const;
QString name() const { return m_name; }
BindingType bindingType() const { return m_bindingType; }
@@ -550,8 +550,8 @@ public:
const RegionComments &comments() const { return m_comments; }
RegionComments &comments() { return m_comments; }
void updatePathFromOwner(Path newPath);
- void writeOut(DomItem &self, OutWriter &lw) const;
- void writeOutValue(DomItem &self, OutWriter &lw) const;
+ void writeOut(const DomItem &self, OutWriter &lw) const;
+ void writeOutValue(const DomItem &self, OutWriter &lw) const;
bool isSignalHandler() const
{
QString baseName = m_name.split(QLatin1Char('.')).last();
@@ -579,7 +579,7 @@ class QMLDOM_EXPORT AttributeInfo
public:
enum Access { Private, Protected, Public };
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor);
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const;
Path addAnnotation(Path selfPathFromOwner, const QmlObject &annotation,
QmlObject **aPtr = nullptr);
@@ -620,7 +620,7 @@ class QMLDOM_EXPORT PropertyDefinition : public AttributeInfo
public:
constexpr static DomType kindValue = DomType::PropertyDefinition;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = AttributeInfo::iterateDirectSubpaths(self, visitor);
cont = cont && self.dvValueField(visitor, Fields::isPointer, isPointer);
@@ -640,7 +640,7 @@ public:
bool isAlias() const { return typeName == u"alias"; }
bool isParametricType() const;
- void writeOut(DomItem &self, OutWriter &lw) const;
+ void writeOut(const DomItem &self, OutWriter &lw) const;
QString read;
QString write;
@@ -658,7 +658,7 @@ class QMLDOM_EXPORT PropertyInfo
public:
constexpr static DomType kindValue = DomType::PropertyInfo; // used to get the correct kind in ObjectWrapper
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor);
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const;
QList<DomItem> propertyDefs;
QList<DomItem> bindings;
@@ -669,10 +669,10 @@ class QMLDOM_EXPORT MethodParameter
public:
constexpr static DomType kindValue = DomType::MethodParameter;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor);
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const;
- void writeOut(DomItem &self, OutWriter &ow) const;
- void writeOutSignal(DomItem &self, OutWriter &ow) const;
+ void writeOut(const DomItem &self, OutWriter &ow) const;
+ void writeOutSignal(const DomItem &self, OutWriter &ow) const;
QString name;
QString typeName;
@@ -700,16 +700,16 @@ public:
constexpr static DomType kindValue = DomType::MethodInfo;
- Path typePath(DomItem &) const
+ Path typePath(const DomItem &) const
{
return (typeName.isEmpty() ? Path() : Paths::lookupTypePath(typeName));
}
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor);
- QString preCode(DomItem &) const; // ### REVISIT, might be simplified by using different toplevel production rules at usage site
- QString postCode(DomItem &) const;
- void writePre(DomItem &self, OutWriter &ow) const;
- void writeOut(DomItem &self, OutWriter &ow) const;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const;
+ QString preCode(const DomItem &) const; // ### REVISIT, might be simplified by using different toplevel production rules at usage site
+ QString postCode(const DomItem &) const;
+ void writePre(const DomItem &self, OutWriter &ow) const;
+ void writeOut(const DomItem &self, OutWriter &ow) const;
void setCode(QString code)
{
body = std::make_shared<ScriptExpression>(
@@ -736,13 +736,13 @@ public:
EnumItem(QString name = QString(), int value = 0) : m_name(name), m_value(value) { }
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor);
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const;
QString name() const { return m_name; }
double value() const { return m_value; }
RegionComments &comments() { return m_comments; }
const RegionComments &comments() const { return m_comments; }
- void writeOut(DomItem &self, OutWriter &lw) const;
+ void writeOut(const DomItem &self, OutWriter &lw) const;
private:
QString m_name;
@@ -762,7 +762,7 @@ public:
{
}
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
QString name() const { return m_name; }
void setName(QString name) { m_name = name; }
@@ -782,7 +782,7 @@ public:
const QList<QmlObject> &annotations() const & { return m_annotations; }
void setAnnotations(QList<QmlObject> annotations);
Path addAnnotation(const QmlObject &child, QmlObject **cPtr = nullptr);
- void writeOut(DomItem &self, OutWriter &lw) const override;
+ void writeOut(const DomItem &self, OutWriter &lw) const override;
private:
QString m_name;
@@ -800,19 +800,15 @@ public:
DomType kind() const override { return kindValue; }
QmlObject(Path pathFromOwner = Path());
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor) override;
- bool iterateBaseDirectSubpaths(DomItem &self, DirectVisitor);
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override;
+ bool iterateBaseDirectSubpaths(const DomItem &self, DirectVisitor) const;
QList<QString> fields() const;
- QList<QString> fields(DomItem &) const override { return fields(); }
- DomItem field(DomItem &self, QStringView name);
- DomItem field(DomItem &self, QStringView name) const override
- {
- return const_cast<QmlObject *>(this)->field(self, name);
- }
+ QList<QString> fields(const DomItem &) const override { return fields(); }
+ DomItem field(const DomItem &self, QStringView name) const override;
void updatePathFromOwner(Path newPath) override;
QString localDefaultPropertyName() const;
- QString defaultPropertyName(DomItem &self) const;
- virtual bool iterateSubOwners(DomItem &self, function_ref<bool(DomItem &owner)> visitor) const;
+ QString defaultPropertyName(const DomItem &self) const;
+ virtual bool iterateSubOwners(const DomItem &self, function_ref<bool(const DomItem &owner)> visitor) const;
QString idStr() const { return m_idStr; }
QString name() const { return m_name; }
@@ -893,12 +889,12 @@ public:
return appendUpdatableElementInQList(pathFromOwner().field(Fields::annotations),
m_annotations, annotation, aPtr);
}
- void writeOut(DomItem &self, OutWriter &ow, QString onTarget) const;
- void writeOut(DomItem &self, OutWriter &lw) const override { writeOut(self, lw, QString()); }
+ void writeOut(const DomItem &self, OutWriter &ow, QString onTarget) const;
+ void writeOut(const DomItem &self, OutWriter &lw) const override { writeOut(self, lw, QString()); }
- LocallyResolvedAlias resolveAlias(DomItem &self,
+ LocallyResolvedAlias resolveAlias(const DomItem &self,
std::shared_ptr<ScriptExpression> accessSequence) const;
- LocallyResolvedAlias resolveAlias(DomItem &self, const QStringList &accessSequence) const;
+ LocallyResolvedAlias resolveAlias(const DomItem &self, const QStringList &accessSequence) const;
std::optional<QQmlJSScope::Ptr> semanticScope() const { return m_scope; }
void setSemanticScope(const QQmlJSScope::Ptr &scope) { m_scope = scope; }
@@ -924,7 +920,7 @@ class Export
public:
constexpr static DomType kindValue = DomType::Export;
static Export fromString(Path source, QStringView exp, Path typePath, ErrorHandler h);
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && self.dvValueField(visitor, Fields::uri, uri);
@@ -956,13 +952,9 @@ public:
Component(const Component &o) = default;
Component &operator=(const Component &) = default;
- bool iterateDirectSubpaths(DomItem &, DirectVisitor) override;
+ bool iterateDirectSubpaths(const DomItem &, DirectVisitor) const override;
void updatePathFromOwner(Path newPath) override;
- DomItem field(DomItem &self, QStringView name) const override
- {
- return const_cast<Component *>(this)->field(self, name);
- }
- DomItem field(DomItem &self, QStringView name);
+ DomItem field(const DomItem &self, QStringView name) const override;
QString name() const { return m_name; }
const QMultiMap<QString, EnumDecl> &enumerations() const & { return m_enumerations; }
@@ -971,7 +963,7 @@ public:
bool isCreatable() const { return m_isCreatable; }
bool isComposite() const { return m_isComposite; }
QString attachedTypeName() const { return m_attachedTypeName; }
- Path attachedTypePath(DomItem &) const { return m_attachedTypePath; }
+ Path attachedTypePath(const DomItem &) const { return m_attachedTypePath; }
void setName(QString name) { m_name = name; }
void setEnumerations(QMultiMap<QString, EnumDecl> enumerations)
@@ -1012,7 +1004,7 @@ public:
DomType kind() const override { return kindValue; }
JsResource(Path pathFromOwner = Path()) : Component(pathFromOwner) { }
- bool iterateDirectSubpaths(DomItem &, DirectVisitor) override
+ bool iterateDirectSubpaths(const DomItem &, DirectVisitor) const override
{ // to do: complete
return true;
}
@@ -1026,7 +1018,7 @@ public:
DomType kind() const override { return kindValue; }
QmltypesComponent(Path pathFromOwner = Path()) : Component(pathFromOwner) { }
- bool iterateDirectSubpaths(DomItem &, DirectVisitor) override;
+ bool iterateDirectSubpaths(const DomItem &, DirectVisitor) const override;
const QList<Export> &exports() const & { return m_exports; }
QString fileName() const { return m_fileName; }
void setExports(QList<Export> exports) { m_exports = exports; }
@@ -1076,7 +1068,7 @@ public:
}
QmlComponent &operator=(const QmlComponent &) = default;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override;
const QMultiMap<QString, Id> &ids() const & { return m_ids; }
Path nextComponentPath() const { return m_nextComponentPath; }
@@ -1089,12 +1081,12 @@ public:
return insertUpdatableElementInMultiMap(pathFromOwner().field(Fields::ids), m_ids, id.name,
id, option, idPtr);
}
- void writeOut(DomItem &self, OutWriter &) const override;
- QList<QString> subComponentsNames(DomItem &self) const;
- QList<DomItem> subComponents(DomItem &self) const;
+ void writeOut(const DomItem &self, OutWriter &) const override;
+ QList<QString> subComponentsNames(const DomItem &self) const;
+ QList<DomItem> subComponents(const DomItem &self) const;
void setSemanticScope(const QQmlJSScope::Ptr &scope) { m_semanticScope = scope; }
- std::optional<QQmlJSScope::Ptr> semanticScope() { return m_semanticScope; }
+ std::optional<QQmlJSScope::Ptr> semanticScope() const { return m_semanticScope; }
private:
friend class QQmlDomAstCreator;
@@ -1127,9 +1119,9 @@ public:
const QMap<QString, ImportScope> &subImports() const & { return m_subImports; }
- QList<Path> allSources(DomItem &self) const;
+ QList<Path> allSources(const DomItem &self) const;
- QSet<QString> importedNames(DomItem &self) const
+ QSet<QString> importedNames(const DomItem &self) const
{
QSet<QString> res;
for (Path p : allSources(self)) {
@@ -1139,7 +1131,7 @@ public:
return res;
}
- QList<DomItem> importedItemsWithName(DomItem &self, QString name) const
+ QList<DomItem> importedItemsWithName(const DomItem &self, QString name) const
{
QList<DomItem> res;
for (Path p : allSources(self)) {
@@ -1157,10 +1149,10 @@ public:
return res;
}
- QList<Export> importedExportsWithName(DomItem &self, QString name) const
+ QList<Export> importedExportsWithName(const DomItem &self, QString name) const
{
QList<Export> res;
- for (DomItem &i : importedItemsWithName(self, name))
+ for (const DomItem &i : importedItemsWithName(self, name))
if (const Export *e = i.as<Export>())
res.append(*e);
else
@@ -1169,7 +1161,7 @@ public:
return res;
}
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor);
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const;
void addImport(QStringList p, Path targetExports)
{
@@ -1197,7 +1189,7 @@ public:
BindingValue(const BindingValue &o);
BindingValue &operator=(const BindingValue &o);
- DomItem value(DomItem &binding);
+ DomItem value(const DomItem &binding) const;
void updatePathFromOwner(Path newPath);
private:
diff --git a/src/qmldom/qqmldomexternalitems.cpp b/src/qmldom/qqmldomexternalitems.cpp
index 0015ea0aca..1a44ef5596 100644
--- a/src/qmldom/qqmldomexternalitems.cpp
+++ b/src/qmldom/qqmldomexternalitems.cpp
@@ -36,7 +36,7 @@ ExternalOwningItem::ExternalOwningItem(QString filePath, QDateTime lastDataUpdat
m_path(path)
{}
-QString ExternalOwningItem::canonicalFilePath(DomItem &) const
+QString ExternalOwningItem::canonicalFilePath(const DomItem &) const
{
return m_canonicalFilePath;
}
@@ -46,7 +46,7 @@ QString ExternalOwningItem::canonicalFilePath() const
return m_canonicalFilePath;
}
-Path ExternalOwningItem::canonicalPath(DomItem &) const
+Path ExternalOwningItem::canonicalPath(const DomItem &) const
{
return m_path;
}
@@ -214,7 +214,7 @@ void QmldirFile::setAutoExports(const QList<ModuleAutoExport> &autoExport)
m_autoExports = autoExport;
}
-void QmldirFile::ensureInModuleIndex(DomItem &self, QString uri)
+void QmldirFile::ensureInModuleIndex(const DomItem &self, QString uri) const
{
// ModuleIndex keeps the various sources of types from a given module uri import
// this method ensures that all major versions that are contained in this qmldir
@@ -230,7 +230,7 @@ void QmldirFile::ensureInModuleIndex(DomItem &self, QString uri)
}
}
-QCborValue pluginData(QQmlDirParser::Plugin &pl, QStringList cNames)
+QCborValue pluginData(const QQmlDirParser::Plugin &pl, QStringList cNames)
{
QCborArray names;
for (QString n : cNames)
@@ -240,7 +240,7 @@ QCborValue pluginData(QQmlDirParser::Plugin &pl, QStringList cNames)
{ QStringView(Fields::classNames), names } });
}
-bool QmldirFile::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool QmldirFile::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = ExternalOwningItem::iterateDirectSubpaths(self, visitor);
cont = cont && self.dvValueField(visitor, Fields::uri, uri().toString());
@@ -252,8 +252,8 @@ bool QmldirFile::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
QStringList cNames = classNames();
return self.subListItem(List::fromQListRef<QQmlDirParser::Plugin>(
self.pathFromOwner().field(Fields::plugins), m_plugins,
- [cNames](DomItem &list, const PathEls::PathComponent &p,
- QQmlDirParser::Plugin &plugin) {
+ [cNames](const DomItem &list, const PathEls::PathComponent &p,
+ const QQmlDirParser::Plugin &plugin) {
return list.subDataItem(p, pluginData(plugin, cNames));
}));
});
@@ -263,7 +263,7 @@ bool QmldirFile::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
const QMap<QString, QString> typeFileMap = qmlFiles();
return self.subMapItem(Map(
self.pathFromOwner().field(Fields::qmlFiles),
- [typeFileMap](DomItem &map, QString typeV) {
+ [typeFileMap](const DomItem &map, QString typeV) {
QString path = typeFileMap.value(typeV);
if (path.isEmpty())
return DomItem();
@@ -272,7 +272,7 @@ bool QmldirFile::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
PathEls::Key(typeV),
QList<Path>({ Paths::qmlFileObjectPath(path) }));
},
- [typeFileMap](DomItem &) {
+ [typeFileMap](const DomItem &) {
return QSet<QString>(typeFileMap.keyBegin(), typeFileMap.keyEnd());
},
QStringLiteral(u"QList<Reference>")));
@@ -293,7 +293,7 @@ QMap<QString, QString> QmldirFile::qmlFiles() const
return res;
}
-std::shared_ptr<OwningItem> QmlFile::doCopy(DomItem &) const
+std::shared_ptr<OwningItem> QmlFile::doCopy(const DomItem &) const
{
auto res = std::make_shared<QmlFile>(*this);
return res;
@@ -338,7 +338,7 @@ ErrorGroups QmlFile::myParsingErrors()
return res;
}
-bool QmlFile::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool QmlFile::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = ExternalOwningItem::iterateDirectSubpaths(self, visitor);
cont = cont && self.dvWrapField(visitor, Fields::components, m_components);
@@ -351,21 +351,21 @@ bool QmlFile::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return cont;
}
-DomItem QmlFile::field(DomItem &self, QStringView name)
+DomItem QmlFile::field(const DomItem &self, QStringView name) const
{
if (name == Fields::components)
return self.wrapField(Fields::components, m_components);
return DomBase::field(self, name);
}
-void QmlFile::addError(DomItem &self, ErrorMessage msg)
+void QmlFile::addError(const DomItem &self, ErrorMessage msg)
{
self.containingObject().addError(msg);
}
-void QmlFile::writeOut(DomItem &self, OutWriter &ow) const
+void QmlFile::writeOut(const DomItem &self, OutWriter &ow) const
{
- for (DomItem &p : self.field(Fields::pragmas).values()) {
+ for (const DomItem &p : self.field(Fields::pragmas).values()) {
p.writeOut(ow);
}
for (auto i : self.field(Fields::imports).values()) {
@@ -376,20 +376,20 @@ void QmlFile::writeOut(DomItem &self, OutWriter &ow) const
mainC.writeOut(ow);
}
-std::shared_ptr<OwningItem> GlobalScope::doCopy(DomItem &self) const
+std::shared_ptr<OwningItem> GlobalScope::doCopy(const DomItem &self) const
{
auto res = std::make_shared<GlobalScope>(
canonicalFilePath(self), lastDataUpdateAt(), revision());
return res;
}
-bool GlobalScope::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool GlobalScope::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = ExternalOwningItem::iterateDirectSubpaths(self, visitor);
return cont;
}
-void QmltypesFile::ensureInModuleIndex(DomItem &self)
+void QmltypesFile::ensureInModuleIndex(const DomItem &self) const
{
auto it = m_uris.begin();
auto end = m_uris.end();
@@ -407,7 +407,7 @@ void QmltypesFile::ensureInModuleIndex(DomItem &self)
}
}
-bool QmltypesFile::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool QmltypesFile::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = ExternalOwningItem::iterateDirectSubpaths(self, visitor);
cont = cont && self.dvWrapField(visitor, Fields::components, m_components);
@@ -415,13 +415,13 @@ bool QmltypesFile::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
cont = cont && self.dvItemField(visitor, Fields::uris, [this, &self]() {
return self.subMapItem(Map::fromMapRef<QSet<int>>(
self.pathFromOwner().field(Fields::uris), m_uris,
- [](DomItem &map, const PathEls::PathComponent &p, QSet<int> &el) {
+ [](const DomItem &map, const PathEls::PathComponent &p, const QSet<int> &el) {
QList<int> l(el.cbegin(), el.cend());
std::sort(l.begin(), l.end());
return map.subListItem(
List::fromQList<int>(map.pathFromOwner().appendComponent(p), l,
- [](DomItem &list, const PathEls::PathComponent &p,
- int &el) { return list.subDataItem(p, el); }));
+ [](const DomItem &list, const PathEls::PathComponent &p,
+ int el) { return list.subDataItem(p, el); }));
}));
});
cont = cont && self.dvWrapField(visitor, Fields::imports, m_imports);
@@ -438,7 +438,7 @@ QmlDirectory::QmlDirectory(QString filePath, QStringList dirList, QDateTime last
}
}
-bool QmlDirectory::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool QmlDirectory::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = ExternalOwningItem::iterateDirectSubpaths(self, visitor);
cont = cont && self.dvWrapField(visitor, Fields::exports, m_exports);
@@ -446,7 +446,7 @@ bool QmlDirectory::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
QDir baseDir(canonicalFilePath());
return self.subMapItem(Map(
self.pathFromOwner().field(Fields::qmlFiles),
- [this, baseDir](DomItem &map, QString key) -> DomItem {
+ [this, baseDir](const DomItem &map, QString key) -> DomItem {
QList<Path> res;
auto it = m_qmlFiles.find(key);
while (it != m_qmlFiles.end() && it.key() == key) {
@@ -456,7 +456,7 @@ bool QmlDirectory::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
}
return map.subReferencesItem(PathEls::Key(key), res);
},
- [this](DomItem &) {
+ [this](const DomItem &) {
auto keys = m_qmlFiles.keys();
return QSet<QString>(keys.begin(), keys.end());
},
diff --git a/src/qmldom/qqmldomexternalitems_p.h b/src/qmldom/qqmldomexternalitems_p.h
index 2ade396963..b217108c9f 100644
--- a/src/qmldom/qqmldomexternalitems_p.h
+++ b/src/qmldom/qqmldomexternalitems_p.h
@@ -51,11 +51,11 @@ public:
ExternalOwningItem(QString filePath, QDateTime lastDataUpdateAt, Path pathFromTop,
int derivedFrom = 0, QString code = QString());
ExternalOwningItem(const ExternalOwningItem &o) = default;
- QString canonicalFilePath(DomItem &) const override;
+ QString canonicalFilePath(const DomItem &) const override;
QString canonicalFilePath() const;
- Path canonicalPath(DomItem &) const override;
+ Path canonicalPath(const DomItem &) const override;
Path canonicalPath() const;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
{
bool cont = OwningItem::iterateDirectSubpaths(self, visitor);
cont = cont && self.dvValueLazyField(visitor, Fields::canonicalFilePath, [this]() {
@@ -69,12 +69,12 @@ public:
return cont;
}
- bool iterateSubOwners(DomItem &self, function_ref<bool(DomItem &owner)> visitor) override
+ bool iterateSubOwners(const DomItem &self, function_ref<bool(const DomItem &owner)> visitor) override
{
bool cont = OwningItem::iterateSubOwners(self, visitor);
- cont = cont && self.field(Fields::components).visitKeys([visitor](QString, DomItem &comps) {
- return comps.visitIndexes([visitor](DomItem &comp) {
- return comp.field(Fields::objects).visitIndexes([visitor](DomItem &qmlObj) {
+ cont = cont && self.field(Fields::components).visitKeys([visitor](QString, const DomItem &comps) {
+ return comps.visitIndexes([visitor](const DomItem &comp) {
+ return comp.field(Fields::objects).visitIndexes([visitor](const DomItem &qmlObj) {
if (const QmlObject *qmlObjPtr = qmlObj.as<QmlObject>())
return qmlObjPtr->iterateSubOwners(qmlObj, visitor);
Q_ASSERT(false);
@@ -106,7 +106,7 @@ protected:
class QMLDOM_EXPORT QmlDirectory final : public ExternalOwningItem
{
protected:
- std::shared_ptr<OwningItem> doCopy(DomItem &) const override
+ std::shared_ptr<OwningItem> doCopy(const DomItem &) const override
{
return std::make_shared<QmlDirectory>(*this);
}
@@ -119,12 +119,12 @@ public:
int derivedFrom = 0);
QmlDirectory(const QmlDirectory &o) = default;
- std::shared_ptr<QmlDirectory> makeCopy(DomItem &self) const
+ std::shared_ptr<QmlDirectory> makeCopy(const DomItem &self) const
{
return std::static_pointer_cast<QmlDirectory>(doCopy(self));
}
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
const QMultiMap<QString, Export> &exports() const & { return m_exports; }
@@ -141,7 +141,7 @@ class QMLDOM_EXPORT QmldirFile final : public ExternalOwningItem
{
Q_DECLARE_TR_FUNCTIONS(QmldirFile)
protected:
- std::shared_ptr<OwningItem> doCopy(DomItem &) const override
+ std::shared_ptr<OwningItem> doCopy(const DomItem &) const override
{
auto copy = std::make_shared<QmldirFile>(*this);
return copy;
@@ -164,12 +164,12 @@ public:
static std::shared_ptr<QmldirFile> fromPathAndCode(const QString &path, const QString &code);
- std::shared_ptr<QmldirFile> makeCopy(DomItem &self) const
+ std::shared_ptr<QmldirFile> makeCopy(const DomItem &self) const
{
return std::static_pointer_cast<QmldirFile>(doCopy(self));
}
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
QmlUri uri() const { return m_uri; }
@@ -190,7 +190,7 @@ public:
QList<ModuleAutoExport> autoExports() const;
void setAutoExports(const QList<ModuleAutoExport> &autoExport);
- void ensureInModuleIndex(DomItem &self, QString uri);
+ void ensureInModuleIndex(const DomItem &self, QString uri) const;
private:
void parse();
@@ -209,7 +209,7 @@ private:
class QMLDOM_EXPORT JsFile final : public ExternalOwningItem
{
protected:
- std::shared_ptr<OwningItem> doCopy(DomItem &) const override
+ std::shared_ptr<OwningItem> doCopy(const DomItem &) const override
{
auto copy = std::make_shared<JsFile>(*this);
return copy;
@@ -226,7 +226,7 @@ public:
}
JsFile(const JsFile &o) = default;
- std::shared_ptr<JsFile> makeCopy(DomItem &self) const
+ std::shared_ptr<JsFile> makeCopy(const DomItem &self) const
{
return std::static_pointer_cast<JsFile>(doCopy(self));
}
@@ -242,7 +242,7 @@ private:
class QMLDOM_EXPORT QmlFile final : public ExternalOwningItem
{
protected:
- std::shared_ptr<OwningItem> doCopy(DomItem &self) const override;
+ std::shared_ptr<OwningItem> doCopy(const DomItem &self) const override;
public:
constexpr static DomType kindValue = DomType::QmlFile;
@@ -253,18 +253,14 @@ public:
QDateTime lastDataUpdate = QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC),
int derivedFrom = 0);
static ErrorGroups myParsingErrors();
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor)
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const
override; // iterates the *direct* subpaths, returns false if a quick end was requested
- DomItem field(DomItem &self, QStringView name) const override
- {
- return const_cast<QmlFile *>(this)->field(self, name);
- }
- DomItem field(DomItem &self, QStringView name);
- std::shared_ptr<QmlFile> makeCopy(DomItem &self) const
+ DomItem field(const DomItem &self, QStringView name) const override;
+ std::shared_ptr<QmlFile> makeCopy(const DomItem &self) const
{
return std::static_pointer_cast<QmlFile>(doCopy(self));
}
- void addError(DomItem &self, ErrorMessage msg) override;
+ void addError(const DomItem &self, ErrorMessage msg) override;
const QMultiMap<QString, QmlComponent> &components() const & { return m_components; }
void setComponents(const QMultiMap<QString, QmlComponent> &components)
@@ -280,7 +276,7 @@ public:
component, option, cPtr);
}
- void writeOut(DomItem &self, OutWriter &lw) const override;
+ void writeOut(const DomItem &self, OutWriter &lw) const override;
AST::UiProgram *ast() const
{
@@ -350,7 +346,7 @@ private:
class QMLDOM_EXPORT QmltypesFile final : public ExternalOwningItem
{
protected:
- std::shared_ptr<OwningItem> doCopy(DomItem &) const override
+ std::shared_ptr<OwningItem> doCopy(const DomItem &) const override
{
auto res = std::make_shared<QmltypesFile>(*this);
return res;
@@ -370,10 +366,10 @@ public:
QmltypesFile(const QmltypesFile &o) = default;
- void ensureInModuleIndex(DomItem &self);
+ void ensureInModuleIndex(const DomItem &self) const;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor) override;
- std::shared_ptr<QmltypesFile> makeCopy(DomItem &self) const
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override;
+ std::shared_ptr<QmltypesFile> makeCopy(const DomItem &self) const
{
return std::static_pointer_cast<QmltypesFile>(doCopy(self));
}
@@ -422,7 +418,7 @@ private:
class QMLDOM_EXPORT GlobalScope final : public ExternalOwningItem
{
protected:
- std::shared_ptr<OwningItem> doCopy(DomItem &) const override;
+ std::shared_ptr<OwningItem> doCopy(const DomItem &) const override;
public:
constexpr static DomType kindValue = DomType::GlobalScope;
@@ -437,8 +433,8 @@ public:
setIsValid(true);
}
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override;
- std::shared_ptr<GlobalScope> makeCopy(DomItem &self) const
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
+ std::shared_ptr<GlobalScope> makeCopy(const DomItem &self) const
{
return std::static_pointer_cast<GlobalScope>(doCopy(self));
}
diff --git a/src/qmldom/qqmldomfieldfilter.cpp b/src/qmldom/qqmldomfieldfilter.cpp
index 17529de4e9..2fa401e004 100644
--- a/src/qmldom/qqmldomfieldfilter.cpp
+++ b/src/qmldom/qqmldomfieldfilter.cpp
@@ -61,7 +61,7 @@ QString FieldFilter::describeFieldsFilter() const
return fieldFilterStr;
}
-bool FieldFilter::operator()(DomItem &obj, Path p, DomItem &i) const
+bool FieldFilter::operator()(const DomItem &obj, Path p, const DomItem &i) const
{
if (p)
return this->operator()(obj, p.component(0), i);
@@ -69,7 +69,7 @@ bool FieldFilter::operator()(DomItem &obj, Path p, DomItem &i) const
return this->operator()(obj, PathEls::Empty(), i);
}
-bool FieldFilter::operator()(DomItem &base, const PathEls::PathComponent &c, DomItem &obj) const
+bool FieldFilter::operator()(const DomItem &base, const PathEls::PathComponent &c, const DomItem &obj) const
{
DomType baseK = base.internalKind();
if (c.kind() == Path::Kind::Field) {
diff --git a/src/qmldom/qqmldomfieldfilter_p.h b/src/qmldom/qqmldomfieldfilter_p.h
index e40ce4459e..9221dc08bc 100644
--- a/src/qmldom/qqmldomfieldfilter_p.h
+++ b/src/qmldom/qqmldomfieldfilter_p.h
@@ -33,8 +33,8 @@ class QMLDOM_EXPORT FieldFilter
public:
QString describeFieldsFilter() const;
bool addFilter(QString f);
- bool operator()(DomItem &, Path, DomItem &) const;
- bool operator()(DomItem &, const PathEls::PathComponent &c, DomItem &) const;
+ bool operator()(const DomItem &, Path, const DomItem &) const;
+ bool operator()(const DomItem &, const PathEls::PathComponent &c, const DomItem &) const;
static FieldFilter defaultFilter();
static FieldFilter noLocationFilter();
static FieldFilter compareFilter();
diff --git a/src/qmldom/qqmldomitem.cpp b/src/qmldom/qqmldomitem.cpp
index a7e5e58b5f..23cc37ddec 100644
--- a/src/qmldom/qqmldomitem.cpp
+++ b/src/qmldom/qqmldomitem.cpp
@@ -104,18 +104,18 @@ The minimal overload set to be usable consists of following methods:
\li \c{pathFromOwner()} returns the path from the owner to the current element
\code
- Path pathFromOwner(DomItem &self) const override;
+ Path pathFromOwner(const DomItem &self) const override;
\endcode
\li \c{canonicalPath()} returns the path
\code
- Path canonicalPath(DomItem &self) const override;
+ Path canonicalPath(const DomItem &self) const override;
\endcode
\li \c{iterateDirectSubpaths} iterates the *direct* subpaths/children and returns false if a quick
end was requested:
\code
-bool iterateDirectSubpaths(DomItem &self, function_ref<bool(Path, DomItem)>) const = 0;
+bool iterateDirectSubpaths(const DomItem &self, function_ref<bool(Path, DomItem)>) const = 0;
\endcode
\endlist
@@ -238,7 +238,7 @@ QCborValue locationToData(SourceLocation loc, QStringView strValue)
return res;
}
-QString DomBase::canonicalFilePath(DomItem &self) const
+QString DomBase::canonicalFilePath(const DomItem &self) const
{
auto parent = containingObject(self);
if (parent)
@@ -246,7 +246,7 @@ QString DomBase::canonicalFilePath(DomItem &self) const
return QString();
}
-void DomBase::writeOut(DomItem &self, OutWriter &) const
+void DomBase::writeOut(const DomItem &self, OutWriter &) const
{
qCWarning(writeOutLog) << "Ignoring unsupported writeOut for " << domTypeToString(kind()) << ":"
<< self.canonicalPath();
@@ -256,7 +256,7 @@ ConstantData::ConstantData(Path pathFromOwner, QCborValue value, Options options
: DomElement(pathFromOwner), m_value(value), m_options(options)
{}
-bool ConstantData::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool ConstantData::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
static QHash<QString, QString> knownFields;
static QBasicMutex m;
@@ -399,7 +399,7 @@ ErrorGroups DomItem::myResolveErrors()
return res;
}
-Path DomItem::canonicalPath()
+Path DomItem::canonicalPath() const
{
Path res = visitEl([this](auto &&el) { return el->canonicalPath(*this); });
if (!(!res || res.headKind() == Path::Kind::Root)) {
@@ -410,7 +410,7 @@ Path DomItem::canonicalPath()
}
-DomItem DomItem::containingObject()
+DomItem DomItem::containingObject() const
{
return visitEl([this](auto &&el) { return el->containingObject(*this); });
}
@@ -421,9 +421,9 @@ DomItem DomItem::containingObject()
qmlObject() might also return the object of a component if GoTo:MostLikely is used.
*/
-DomItem DomItem::qmlObject(GoTo options, FilterUpOptions filterOptions)
+DomItem DomItem::qmlObject(GoTo options, FilterUpOptions filterOptions) const
{
- if (DomItem res = filterUp([](DomType k, DomItem &) { return k == DomType::QmlObject; },
+ if (DomItem res = filterUp([](DomType k, const DomItem &) { return k == DomType::QmlObject; },
filterOptions))
return res;
if (options == GoTo::MostLikely) {
@@ -433,7 +433,7 @@ DomItem DomItem::qmlObject(GoTo options, FilterUpOptions filterOptions)
return DomItem();
}
-DomItem DomItem::fileObject(GoTo options)
+DomItem DomItem::fileObject(GoTo options) const
{
DomItem res = *this;
DomType k = res.internalKind();
@@ -456,9 +456,9 @@ DomItem DomItem::fileObject(GoTo options)
return res;
}
-DomItem DomItem::rootQmlObject(GoTo options)
+DomItem DomItem::rootQmlObject(GoTo options) const
{
- if (DomItem res = filterUp([](DomType k, DomItem &) { return k == DomType::QmlObject; },
+ if (DomItem res = filterUp([](DomType k, const DomItem &) { return k == DomType::QmlObject; },
FilterUpOptions::ReturnInner))
return res;
if (options == GoTo::MostLikely) {
@@ -468,7 +468,7 @@ DomItem DomItem::rootQmlObject(GoTo options)
return DomItem();
}
-DomItem DomItem::container()
+DomItem DomItem::container() const
{
Path path = pathFromOwner();
if (!path)
@@ -479,7 +479,7 @@ DomItem DomItem::container()
return containingObject();
}
-DomItem DomItem::globalScope()
+DomItem DomItem::globalScope() const
{
if (internalKind() == DomType::GlobalScope)
return *this;
@@ -495,7 +495,7 @@ DomItem DomItem::globalScope()
\internal
\brief The owner of an element, for an qmlObject this is the containing qml file.
*/
-DomItem DomItem::owner()
+DomItem DomItem::owner() const
{
if (domTypeIsOwningItem(m_kind) || m_kind == DomType::Empty)
return *this;
@@ -504,14 +504,14 @@ DomItem DomItem::owner()
*m_owner);
}
-DomItem DomItem::top()
+DomItem DomItem::top() const
{
if (domTypeIsTopItem(m_kind) || m_kind == DomType::Empty)
return *this;
return std::visit([](auto &&el) { return DomItem(el, el, Path(), el.get()); }, *m_top);
}
-DomItem DomItem::environment()
+DomItem DomItem::environment() const
{
DomItem res = top();
if (res.internalKind() == DomType::DomEnvironment)
@@ -519,7 +519,7 @@ DomItem DomItem::environment()
return DomItem(); // we are in the universe, and cannot go back to the environment...
}
-DomItem DomItem::universe()
+DomItem DomItem::universe() const
{
DomItem res = top();
if (res.internalKind() == DomType::DomUniverse)
@@ -535,9 +535,9 @@ DomItem DomItem::universe()
Returns an empty DomItem if the item is not defined in a QML file.
\sa goToFile()
*/
-DomItem DomItem::containingFile()
+DomItem DomItem::containingFile() const
{
- if (DomItem res = filterUp([](DomType k, DomItem &) { return k == DomType::QmlFile; },
+ if (DomItem res = filterUp([](DomType k, const DomItem &) { return k == DomType::QmlFile; },
FilterUpOptions::ReturnOuter))
return res;
return DomItem();
@@ -548,7 +548,7 @@ DomItem DomItem::containingFile()
Shorthand to obtain the QmlFile DomItem from a canonicalPath.
\sa containingFile()
*/
-DomItem DomItem::goToFile(const QString &canonicalPath)
+DomItem DomItem::goToFile(const QString &canonicalPath) const
{
Q_UNUSED(canonicalPath);
DomItem file =
@@ -560,7 +560,7 @@ DomItem DomItem::goToFile(const QString &canonicalPath)
\internal
In the DomItem hierarchy, go \c n levels up.
*/
-DomItem DomItem::goUp(int n)
+DomItem DomItem::goUp(int n) const
{
DomItem parent = owner().path(pathFromOwner().dropTail(n));
return parent;
@@ -570,12 +570,12 @@ DomItem DomItem::goUp(int n)
\internal
In the DomItem hierarchy, go 1 level up to get the direct parent.
*/
-DomItem DomItem::directParent()
+DomItem DomItem::directParent() const
{
return goUp(1);
}
-DomItem DomItem::filterUp(function_ref<bool(DomType k, DomItem &)> filter, FilterUpOptions options)
+DomItem DomItem::filterUp(function_ref<bool(DomType k, const DomItem &)> filter, FilterUpOptions options) const
{
DomItem it = *this;
DomType k = it.internalKind();
@@ -635,30 +635,30 @@ DomItem DomItem::filterUp(function_ref<bool(DomType k, DomItem &)> filter, Filte
return DomItem();
}
-DomItem DomItem::scope(FilterUpOptions options)
+DomItem DomItem::scope(FilterUpOptions options) const
{
- DomItem res = filterUp([](DomType, DomItem &el) { return el.isScope(); }, options);
+ DomItem res = filterUp([](DomType, const DomItem &el) { return el.isScope(); }, options);
return res;
}
-std::optional<QQmlJSScope::Ptr> DomItem::nearestSemanticScope()
+std::optional<QQmlJSScope::Ptr> DomItem::nearestSemanticScope() const
{
std::optional<QQmlJSScope::Ptr> scope;
- visitUp([&scope](DomItem &item) {
+ visitUp([&scope](const DomItem &item) {
scope = item.semanticScope();
return !scope; // stop when scope was true
});
return scope;
}
-std::optional<QQmlJSScope::Ptr> DomItem::semanticScope()
+std::optional<QQmlJSScope::Ptr> DomItem::semanticScope() const
{
std::optional<QQmlJSScope::Ptr> scope = std::visit(
[](auto &&e) -> std::optional<QQmlJSScope::Ptr> {
using T = std::remove_cv_t<std::remove_reference_t<decltype(e)>>;
- if constexpr (std::is_same_v<T, QmlObject *>) {
+ if constexpr (std::is_same_v<T, const QmlObject *>) {
return e->semanticScope();
- } else if constexpr (std::is_same_v<T, QmlComponent *>) {
+ } else if constexpr (std::is_same_v<T, const QmlComponent *>) {
return e->semanticScope();
} else if constexpr (std::is_same_v<T, SimpleObjectWrap>) {
if (const MethodInfo *mi = e->template as<MethodInfo>()) {
@@ -673,25 +673,25 @@ std::optional<QQmlJSScope::Ptr> DomItem::semanticScope()
return scope;
}
-DomItem DomItem::get(ErrorHandler h, QList<Path> *visitedRefs)
+DomItem DomItem::get(ErrorHandler h, QList<Path> *visitedRefs) const
{
if (const Reference *refPtr = as<Reference>())
return refPtr->get(*this, h, visitedRefs);
return DomItem();
}
-QList<DomItem> DomItem::getAll(ErrorHandler h, QList<Path> *visitedRefs)
+QList<DomItem> DomItem::getAll(ErrorHandler h, QList<Path> *visitedRefs) const
{
if (const Reference *refPtr = as<Reference>())
return refPtr->getAll(*this, h, visitedRefs);
return {};
}
-PropertyInfo DomItem::propertyInfoWithName(QString name)
+PropertyInfo DomItem::propertyInfoWithName(QString name) const
{
PropertyInfo pInfo;
- visitPrototypeChain([&pInfo, name](DomItem &obj) {
- return obj.visitLocalSymbolsNamed(name, [&pInfo, name](DomItem &el) {
+ visitPrototypeChain([&pInfo, name](const DomItem &obj) {
+ return obj.visitLocalSymbolsNamed(name, [&pInfo, name](const DomItem &el) {
switch (el.internalKind()) {
case DomType::Binding:
pInfo.bindings.append(el);
@@ -708,10 +708,10 @@ PropertyInfo DomItem::propertyInfoWithName(QString name)
return pInfo;
}
-QSet<QString> DomItem::propertyInfoNames()
+QSet<QString> DomItem::propertyInfoNames() const
{
QSet<QString> res;
- visitPrototypeChain([&res](DomItem &obj) {
+ visitPrototypeChain([&res](const DomItem &obj) {
res += obj.propertyDefs().keys();
res += obj.bindings().keys();
return true;
@@ -719,10 +719,10 @@ QSet<QString> DomItem::propertyInfoNames()
return res;
}
-DomItem DomItem::component(GoTo options)
+DomItem DomItem::component(GoTo options) const
{
if (DomItem res = filterUp(
- [](DomType kind, DomItem &) {
+ [](DomType kind, const DomItem &) {
return kind == DomType::QmlComponent || kind == DomType::QmltypesComponent
|| kind == DomType::GlobalComponent;
},
@@ -768,7 +768,7 @@ static QMap<LookupType, QString> lookupTypeToStringMap()
}
bool DomItem::resolve(Path path, DomItem::Visitor visitor, ErrorHandler errorHandler,
- ResolveOptions options, Path fullPath, QList<Path> *visitedRefs)
+ ResolveOptions options, Path fullPath, QList<Path> *visitedRefs) const
{
QList<Path> vRefs;
Path fPath = fullPath;
@@ -865,7 +865,7 @@ bool DomItem::resolve(Path path, DomItem::Visitor visitor, ErrorHandler errorHan
DomItem resolveRes;
it.resolve(
toResolve,
- [&resolveRes](Path, DomItem &r) {
+ [&resolveRes](Path, const DomItem &r) {
resolveRes = r;
return false;
},
@@ -902,7 +902,7 @@ bool DomItem::resolve(Path path, DomItem::Visitor visitor, ErrorHandler errorHan
if (!branchExhausted)
visitTree(
Path(),
- [toFind, &toDos, iPath](Path, DomItem &item, bool) {
+ [toFind, &toDos, iPath](Path, const DomItem &item, bool) {
// avoid non directly attached?
DomItem newItem = item[toFind];
if (newItem)
@@ -930,7 +930,7 @@ bool DomItem::resolve(Path path, DomItem::Visitor visitor, ErrorHandler errorHan
break;
case PathCurrent::ObjChain: {
bool cont = it.visitPrototypeChain(
- [&toDos, iPath](DomItem &subEl) {
+ [&toDos, iPath](const DomItem &subEl) {
toDos.append({ subEl, iPath });
return true;
},
@@ -943,7 +943,7 @@ bool DomItem::resolve(Path path, DomItem::Visitor visitor, ErrorHandler errorHan
}
case PathCurrent::ScopeChain: {
bool cont = it.visitScopeChain(
- [&toDos, iPath](DomItem &subEl) {
+ [&toDos, iPath](const DomItem &subEl) {
toDos.append({ subEl, iPath });
return true;
},
@@ -1073,7 +1073,7 @@ bool DomItem::resolve(Path path, DomItem::Visitor visitor, ErrorHandler errorHan
}
it.visitLookup(
target,
- [&toDos, iPath](DomItem &subEl) {
+ [&toDos, iPath](const DomItem &subEl) {
toDos.append({ subEl, iPath });
return true;
},
@@ -1087,7 +1087,7 @@ bool DomItem::resolve(Path path, DomItem::Visitor visitor, ErrorHandler errorHan
case Path::Kind::Any:
visitTree(
Path(),
- [&toDos, iPath](Path, DomItem &item, bool) {
+ [&toDos, iPath](Path, const DomItem &item, bool) {
toDos.append({ item, iPath });
return true;
},
@@ -1107,7 +1107,7 @@ bool DomItem::resolve(Path path, DomItem::Visitor visitor, ErrorHandler errorHan
return true;
}
-DomItem DomItem::path(Path p, ErrorHandler errorHandler)
+DomItem DomItem::path(Path p, ErrorHandler errorHandler) const
{
if (!p)
return *this;
@@ -1119,37 +1119,37 @@ DomItem DomItem::path(Path p, ErrorHandler errorHandler)
return res;
}
-DomItem DomItem::path(QString p, ErrorHandler errorHandler)
+DomItem DomItem::path(QString p, ErrorHandler errorHandler) const
{
return path(Path::fromString(p, errorHandler));
}
-DomItem DomItem::path(QStringView p, ErrorHandler errorHandler)
+DomItem DomItem::path(QStringView p, ErrorHandler errorHandler) const
{
return path(Path::fromString(p, errorHandler));
}
-QList<QString> DomItem::fields()
+QList<QString> DomItem::fields() const
{
return visitEl([this](auto &&el) { return el->fields(*this); });
}
-DomItem DomItem::field(QStringView name)
+DomItem DomItem::field(QStringView name) const
{
return visitEl([this, name](auto &&el) { return el->field(*this, name); });
}
-index_type DomItem::indexes()
+index_type DomItem::indexes() const
{
return visitEl([this](auto &&el) { return el->indexes(*this); });
}
-DomItem DomItem::index(index_type i)
+DomItem DomItem::index(index_type i) const
{
return visitEl([this, i](auto &&el) { return el->index(*this, i); });
}
-bool DomItem::visitIndexes(function_ref<bool(DomItem &)> visitor)
+bool DomItem::visitIndexes(function_ref<bool(const DomItem &)> visitor) const
{
// use iterateDirectSubpathsConst instead?
int nIndexes = indexes();
@@ -1161,12 +1161,12 @@ bool DomItem::visitIndexes(function_ref<bool(DomItem &)> visitor)
return true;
}
-QSet<QString> DomItem::keys()
+QSet<QString> DomItem::keys() const
{
return visitEl([this](auto &&el) { return el->keys(*this); });
}
-QStringList DomItem::sortedKeys()
+QStringList DomItem::sortedKeys() const
{
QSet<QString> ks = keys();
QStringList sortedKs(ks.begin(), ks.end());
@@ -1174,12 +1174,12 @@ QStringList DomItem::sortedKeys()
return sortedKs;
}
-DomItem DomItem::key(QString name)
+DomItem DomItem::key(QString name) const
{
return visitEl([this, name](auto &&el) { return el->key(*this, name); });
}
-bool DomItem::visitKeys(function_ref<bool(QString, DomItem &)> visitor)
+bool DomItem::visitKeys(function_ref<bool(QString, const DomItem &)> visitor) const
{
// use iterateDirectSubpathsConst instead?
for (auto k : sortedKeys()) {
@@ -1190,10 +1190,10 @@ bool DomItem::visitKeys(function_ref<bool(QString, DomItem &)> visitor)
return true;
}
-QList<DomItem> DomItem::values()
+QList<DomItem> DomItem::values() const
{
QList<DomItem> res;
- visitEl([this, &res](auto &&el) {
+ visitEl([this, &res](const auto &el) {
return el->iterateDirectSubpathsConst(
*this, [&res](const PathEls::PathComponent &, function_ref<DomItem()> item) {
res.append(item());
@@ -1203,7 +1203,7 @@ QList<DomItem> DomItem::values()
return res;
}
-void DomItem::writeOutPre(OutWriter &ow)
+void DomItem::writeOutPre(OutWriter &ow) const
{
if (hasAnnotations()) {
DomItem anns = field(Fields::annotations);
@@ -1222,24 +1222,24 @@ void DomItem::writeOutPre(OutWriter &ow)
ow.itemStart(*this);
}
-void DomItem::writeOut(OutWriter &ow)
+void DomItem::writeOut(OutWriter &ow) const
{
writeOutPre(ow);
visitEl([this, &ow](auto &&el) { el->writeOut(*this, ow); });
writeOutPost(ow);
}
-void DomItem::writeOutPost(OutWriter &ow)
+void DomItem::writeOutPost(OutWriter &ow) const
{
ow.itemEnd(*this);
}
-DomItem::WriteOutCheckResult DomItem::performWriteOutChecks(DomItem &original, DomItem &reformatted,
+DomItem::WriteOutCheckResult DomItem::performWriteOutChecks(const DomItem &original, const DomItem &reformatted,
OutWriter &ow,
- WriteOutChecks extraChecks)
+ WriteOutChecks extraChecks) const
{
QStringList dumped;
- auto maybeDump = [&ow, extraChecks, &dumped](DomItem &obj, QStringView objName) {
+ auto maybeDump = [&ow, extraChecks, &dumped](const DomItem &obj, QStringView objName) {
QString objDumpPath;
if (extraChecks & WriteOutCheck::DumpOnFailure) {
objDumpPath = QDir(QDir::tempPath())
@@ -1260,8 +1260,8 @@ DomItem::WriteOutCheckResult DomItem::performWriteOutChecks(DomItem &original, D
sinkEscaped(s, dumpPath);
}
};
- auto compare = [&maybeDump, &dumpedDumper, this](DomItem &obj1, QStringView obj1Name,
- DomItem &obj2, QStringView obj2Name,
+ auto compare = [&maybeDump, &dumpedDumper, this](const DomItem &obj1, QStringView obj1Name,
+ const DomItem &obj2, QStringView obj2Name,
const FieldFilter &filter) {
const auto diffList = domCompareStrList(obj1, obj2, filter, DomCompareStrList::AllDiffs);
if (!diffList.isEmpty()) {
@@ -1275,7 +1275,7 @@ DomItem::WriteOutCheckResult DomItem::performWriteOutChecks(DomItem &original, D
return true;
};
auto checkStability = [&maybeDump, &dumpedDumper, &dumped, &ow,
- this](QString expected, DomItem &obj, QStringView objName) {
+ this](QString expected, const DomItem &obj, QStringView objName) {
LineWriter lw2([](QStringView) {}, ow.lineWriter.fileName(), ow.lineWriter.options());
OutWriter ow2(lw2);
ow2.indentNextlines = true;
@@ -1348,7 +1348,7 @@ DomItem::WriteOutCheckResult DomItem::performWriteOutChecks(DomItem &original, D
return WriteOutCheckResult::Success;
}
-DomItem DomItem::writeOutForFile(OutWriter &ow, WriteOutChecks extraChecks)
+DomItem DomItem::writeOutForFile(OutWriter &ow, WriteOutChecks extraChecks) const
{
ow.indentNextlines = true;
writeOut(ow);
@@ -1362,7 +1362,7 @@ DomItem DomItem::writeOutForFile(OutWriter &ow, WriteOutChecks extraChecks)
}
DomItem DomItem::writeOut(QString path, int nBackups, const LineWriterOptions &options,
- FileWriter *fw, WriteOutChecks extraChecks)
+ FileWriter *fw, WriteOutChecks extraChecks) const
{
DomItem res = *this;
DomItem copy;
@@ -1390,7 +1390,7 @@ DomItem DomItem::writeOut(QString path, int nBackups, const LineWriterOptions &o
return res;
}
-bool DomItem::isCanonicalChild(DomItem &item)
+bool DomItem::isCanonicalChild(const DomItem &item) const
{
bool isChild = false;
if (item.isOwningItem()) {
@@ -1403,7 +1403,7 @@ bool DomItem::isCanonicalChild(DomItem &item)
return isChild;
}
-bool DomItem::hasAnnotations()
+bool DomItem::hasAnnotations() const
{
bool hasAnnotations = false;
DomType iKind = internalKind();
@@ -1453,7 +1453,7 @@ bool DomItem::hasAnnotations()
*/
bool DomItem::visitTree(Path basePath, DomItem::ChildrenVisitor visitor, VisitOptions options,
DomItem::ChildrenVisitor openingVisitor,
- DomItem::ChildrenVisitor closingVisitor)
+ DomItem::ChildrenVisitor closingVisitor) const
{
if (!*this)
return true;
@@ -1497,10 +1497,10 @@ bool DomItem::visitTree(Path basePath, DomItem::ChildrenVisitor visitor, VisitOp
});
});
}
-static bool visitPrototypeIndex(QList<DomItem> &toDo, DomItem &current,
- DomItem &derivedFromPrototype, ErrorHandler h,
+static bool visitPrototypeIndex(QList<DomItem> &toDo, const DomItem &current,
+ const DomItem &derivedFromPrototype, ErrorHandler h,
QList<Path> *visitedRefs, VisitPrototypesOptions options,
- DomItem &prototype)
+ const DomItem &prototype)
{
Path elId = prototype.canonicalPath();
if (visitedRefs->contains(elId))
@@ -1523,7 +1523,7 @@ static bool visitPrototypeIndex(QList<DomItem> &toDo, DomItem &current,
} else {
if (protos.size() > 1) {
QStringList protoPaths;
- for (DomItem &p : protos)
+ for (const DomItem &p : protos)
protoPaths.append(p.canonicalPath().toString());
derivedFromPrototype.myErrors()
.warning(derivedFromPrototype
@@ -1563,9 +1563,9 @@ static bool visitPrototypeIndex(QList<DomItem> &toDo, DomItem &current,
return true;
}
-bool DomItem::visitPrototypeChain(function_ref<bool(DomItem &)> visitor,
+bool DomItem::visitPrototypeChain(function_ref<bool(const DomItem &)> visitor,
VisitPrototypesOptions options, ErrorHandler h,
- QSet<quintptr> *visited, QList<Path> *visitedRefs)
+ QSet<quintptr> *visited, QList<Path> *visitedRefs) const
{
QSet<quintptr> visitedLocal;
if (!visited)
@@ -1601,16 +1601,16 @@ bool DomItem::visitPrototypeChain(function_ref<bool(DomItem &)> visitor,
return false;
shouldVisit = true;
current.field(Fields::prototypes)
- .visitIndexes([&toDo, &current, this, &h, visitedRefs, options](DomItem &el) {
+ .visitIndexes([&toDo, &current, this, &h, visitedRefs, options](const DomItem &el) {
return visitPrototypeIndex(toDo, current, *this, h, visitedRefs, options, el);
});
}
return true;
}
-bool DomItem::visitDirectAccessibleScopes(function_ref<bool(DomItem &)> visitor,
+bool DomItem::visitDirectAccessibleScopes(function_ref<bool(const DomItem &)> visitor,
VisitPrototypesOptions options, ErrorHandler h,
- QSet<quintptr> *visited, QList<Path> *visitedRefs)
+ QSet<quintptr> *visited, QList<Path> *visitedRefs) const
{
// these are the scopes one can access with the . operator from the current location
// but currently not the attached types, which we should
@@ -1655,9 +1655,9 @@ bool DomItem::visitDirectAccessibleScopes(function_ref<bool(DomItem &)> visitor,
* visit the values JS reaches accessing a type directly: the values if it is a singleton or the
* attached type
*/
-bool DomItem::visitStaticTypePrototypeChains(function_ref<bool(DomItem &)> visitor,
+bool DomItem::visitStaticTypePrototypeChains(function_ref<bool(const DomItem &)> visitor,
VisitPrototypesOptions options, ErrorHandler h,
- QSet<quintptr> *visited, QList<Path> *visitedRefs)
+ QSet<quintptr> *visited, QList<Path> *visitedRefs) const
{
QSet<quintptr> visitedLocal;
if (!visited)
@@ -1678,7 +1678,7 @@ bool DomItem::visitStaticTypePrototypeChains(function_ref<bool(DomItem &)> visit
/*!
\brief Let the visitor visit the Dom Tree hierarchy of this DomItem.
*/
-bool DomItem::visitUp(function_ref<bool(DomItem &)> visitor)
+bool DomItem::visitUp(function_ref<bool(const DomItem &)> visitor) const
{
Path p = canonicalPath();
while (p.length() > 0) {
@@ -1693,8 +1693,8 @@ bool DomItem::visitUp(function_ref<bool(DomItem &)> visitor)
/*!
\brief Let the visitor visit the QML scope hierarchy of this DomItem.
*/
-bool DomItem::visitScopeChain(function_ref<bool(DomItem &)> visitor, LookupOptions options,
- ErrorHandler h, QSet<quintptr> *visited, QList<Path> *visitedRefs)
+bool DomItem::visitScopeChain(function_ref<bool(const DomItem &)> visitor, LookupOptions options,
+ ErrorHandler h, QSet<quintptr> *visited, QList<Path> *visitedRefs) const
{
QSet<quintptr> visitedLocal;
if (!visited)
@@ -1808,7 +1808,7 @@ bool DomItem::visitScopeChain(function_ref<bool(DomItem &)> visitor, LookupOptio
return true;
}
-QSet<QString> DomItem::localSymbolNames(LocalSymbolsTypes typeFilter)
+QSet<QString> DomItem::localSymbolNames(LocalSymbolsTypes typeFilter) const
{
QSet<QString> res;
if (typeFilter == LocalSymbolsType::None)
@@ -1878,7 +1878,7 @@ QSet<QString> DomItem::localSymbolNames(LocalSymbolsTypes typeFilter)
case DomType::MethodInfo: {
if (typeFilter & LocalSymbolsType::MethodParameters) {
DomItem params = field(Fields::parameters);
- params.visitIndexes([&res](DomItem &p) {
+ params.visitIndexes([&res](const DomItem &p) {
const MethodParameter *pPtr = p.as<MethodParameter>();
res.insert(pPtr->name);
return true;
@@ -1892,14 +1892,14 @@ QSet<QString> DomItem::localSymbolNames(LocalSymbolsTypes typeFilter)
return res;
}
-bool DomItem::visitLookup1(QString symbolName, function_ref<bool(DomItem &)> visitor,
+bool DomItem::visitLookup1(QString symbolName, function_ref<bool(const DomItem &)> visitor,
LookupOptions opts, ErrorHandler h, QSet<quintptr> *visited,
- QList<Path> *visitedRefs)
+ QList<Path> *visitedRefs) const
{
return visitScopeChain(
- [symbolName, visitor](DomItem &obj) {
+ [symbolName, visitor](const DomItem &obj) {
return obj.visitLocalSymbolsNamed(symbolName,
- [visitor](DomItem &el) { return visitor(el); });
+ [visitor](const DomItem &el) { return visitor(el); });
},
opts, h, visited, visitedRefs);
}
@@ -1950,7 +1950,7 @@ public:
};
static bool visitForLookupType(DomItem el, LookupType lookupType,
- function_ref<bool(DomItem &)> visitor)
+ function_ref<bool(const DomItem &)> visitor)
{
bool correctType = false;
DomType iType = el.internalKind();
@@ -1980,7 +1980,7 @@ static bool visitForLookupType(DomItem el, LookupType lookupType,
}
static bool visitQualifiedNameLookup(DomItem newIt, QStringList &subpath,
- function_ref<bool(DomItem &)> visitor, LookupType lookupType,
+ function_ref<bool(const DomItem &)> visitor, LookupType lookupType,
ErrorHandler &errorHandler, QList<Path> *visitedRefs)
{
QVector<ResolveToDo> lookupToDos(
@@ -2004,9 +2004,9 @@ static bool visitQualifiedNameLookup(DomItem newIt, QStringList &subpath,
}
if (scope.internalKind() == DomType::QmlObject)
scope.visitDirectAccessibleScopes(
- [&lookupToDos, subPathNow, iSubPath](DomItem &el) {
+ [&lookupToDos, subPathNow, iSubPath](const DomItem &el) {
return el.visitLocalSymbolsNamed(
- subPathNow, [&lookupToDos, iSubPath](DomItem &subEl) {
+ subPathNow, [&lookupToDos, iSubPath](const DomItem &subEl) {
lookupToDos.append({ subEl, iSubPath });
return true;
});
@@ -2015,12 +2015,12 @@ static bool visitQualifiedNameLookup(DomItem newIt, QStringList &subpath,
visitedRefs);
} else {
bool cont = scope.visitDirectAccessibleScopes(
- [&visitor, subPathNow, lookupType](DomItem &el) -> bool {
+ [&visitor, subPathNow, lookupType](const DomItem &el) -> bool {
if (lookupType == LookupType::Symbol)
return el.visitLocalSymbolsNamed(subPathNow, visitor);
else
return el.visitLocalSymbolsNamed(
- subPathNow, [lookupType, &visitor](DomItem &el) -> bool {
+ subPathNow, [lookupType, &visitor](const DomItem &el) -> bool {
return visitForLookupType(el, lookupType, visitor);
});
},
@@ -2033,9 +2033,9 @@ static bool visitQualifiedNameLookup(DomItem newIt, QStringList &subpath,
return true;
}
-bool DomItem::visitLookup(QString target, function_ref<bool(DomItem &)> visitor,
+bool DomItem::visitLookup(QString target, function_ref<bool(const DomItem &)> visitor,
LookupType lookupType, LookupOptions opts, ErrorHandler errorHandler,
- QSet<quintptr> *visited, QList<Path> *visitedRefs)
+ QSet<quintptr> *visited, QList<Path> *visitedRefs) const
{
if (target.isEmpty())
return true;
@@ -2053,7 +2053,7 @@ bool DomItem::visitLookup(QString target, function_ref<bool(DomItem &)> visitor,
return visitLookup1(
subpath.at(0),
[&subpath, visitor, lookupType, &errorHandler,
- visitedRefs](DomItem &newIt) -> bool {
+ visitedRefs](const DomItem &newIt) -> bool {
return visitQualifiedNameLookup(newIt, subpath, visitor, lookupType,
errorHandler, visitedRefs);
},
@@ -2070,8 +2070,8 @@ bool DomItem::visitLookup(QString target, function_ref<bool(DomItem &)> visitor,
}
if (localQmltypes) {
if (DomItem localTypes = localQmltypes.field(Fields::components).key(baseTarget)) {
- bool cont = localTypes.visitIndexes([&visitor](DomItem &els) {
- return els.visitIndexes([&visitor](DomItem &el) {
+ bool cont = localTypes.visitIndexes([&visitor](const DomItem &els) {
+ return els.visitIndexes([&visitor](const DomItem &el) {
if (DomItem obj = el.field(Fields::objects).index(0))
return visitor(obj);
return true;
@@ -2082,10 +2082,10 @@ bool DomItem::visitLookup(QString target, function_ref<bool(DomItem &)> visitor,
}
}
DomItem qmltypes = environment().field(Fields::qmltypesFileWithPath);
- return qmltypes.visitKeys([baseTarget, &visitor](QString, DomItem &els) {
+ return qmltypes.visitKeys([baseTarget, &visitor](QString, const DomItem &els) {
DomItem comps =
els.field(Fields::currentItem).field(Fields::components).key(baseTarget);
- return comps.visitIndexes([&visitor](DomItem &el) {
+ return comps.visitIndexes([&visitor](const DomItem &el) {
if (DomItem obj = el.field(Fields::objects).index(0))
return visitor(obj);
return true;
@@ -2106,7 +2106,7 @@ bool DomItem::visitLookup(QString target, function_ref<bool(DomItem &)> visitor,
Also does multiple rounds of resolving for nested DomItems.
Prefer this over \l {DomItem::get}.
*/
-DomItem DomItem::proceedToScope(ErrorHandler h, QList<Path> *visitedRefs)
+DomItem DomItem::proceedToScope(ErrorHandler h, QList<Path> *visitedRefs) const
{
// follow references, resolve exports
DomItem current = *this;
@@ -2132,12 +2132,12 @@ DomItem DomItem::proceedToScope(ErrorHandler h, QList<Path> *visitedRefs)
}
QList<DomItem> DomItem::lookup(QString symbolName, LookupType type, LookupOptions opts,
- ErrorHandler errorHandler)
+ ErrorHandler errorHandler) const
{
QList<DomItem> res;
visitLookup(
symbolName,
- [&res](DomItem &el) {
+ [&res](const DomItem &el) {
res.append(el);
return true;
},
@@ -2146,12 +2146,12 @@ QList<DomItem> DomItem::lookup(QString symbolName, LookupType type, LookupOption
}
DomItem DomItem::lookupFirst(QString symbolName, LookupType type, LookupOptions opts,
- ErrorHandler errorHandler)
+ ErrorHandler errorHandler) const
{
DomItem res;
visitLookup(
symbolName,
- [&res](DomItem &el) {
+ [&res](const DomItem &el) {
res = el;
return false;
},
@@ -2159,22 +2159,22 @@ DomItem DomItem::lookupFirst(QString symbolName, LookupType type, LookupOptions
return res;
}
-quintptr DomItem::id()
+quintptr DomItem::id() const
{
return visitEl([](auto &&b) { return b->id(); });
}
-Path DomItem::pathFromOwner()
+Path DomItem::pathFromOwner() const
{
return visitEl([this](auto &&e) { return e->pathFromOwner(*this); });
}
-QString DomItem::canonicalFilePath()
+QString DomItem::canonicalFilePath() const
{
return visitEl([this](auto &&e) { return e->canonicalFilePath(*this); });
}
-DomItem DomItem::fileLocationsTree()
+DomItem DomItem::fileLocationsTree() const
{
if (DomItem l = field(Fields::fileLocationsTree))
return l;
@@ -2185,12 +2185,12 @@ DomItem DomItem::fileLocationsTree()
return DomItem();
}
-DomItem DomItem::fileLocations()
+DomItem DomItem::fileLocations() const
{
return fileLocationsTree().field(Fields::infoItem);
}
-MutableDomItem DomItem::makeCopy(DomItem::CopyOption option)
+MutableDomItem DomItem::makeCopy(DomItem::CopyOption option) const
{
if (m_kind == DomType::Empty)
return MutableDomItem();
@@ -2210,8 +2210,8 @@ MutableDomItem DomItem::makeCopy(DomItem::CopyOption option)
newEnvPtr = std::make_shared<DomEnvironment>(
envPtr, envPtr->loadPaths(), envPtr->options());
DomBase *eBase = envPtr.get();
- if (std::holds_alternative<DomEnvironment *>(m_element) && eBase
- && std::get<DomEnvironment *>(m_element) == eBase)
+ if (std::holds_alternative<const DomEnvironment *>(m_element) && eBase
+ && std::get<const DomEnvironment *>(m_element) == eBase)
return MutableDomItem(DomItem(newEnvPtr));
} else if (std::shared_ptr<DomUniverse> univPtr = top().ownerAs<DomUniverse>()) {
newEnvPtr = std::make_shared<DomEnvironment>(
@@ -2268,7 +2268,7 @@ MutableDomItem DomItem::makeCopy(DomItem::CopyOption option)
return MutableDomItem(newItem.path(pathFromOwner()));
}
-bool DomItem::commitToBase(std::shared_ptr<DomEnvironment> validEnvPtr)
+bool DomItem::commitToBase(std::shared_ptr<DomEnvironment> validEnvPtr) const
{
DomItem env = environment();
if (std::shared_ptr<DomEnvironment> envPtr = env.ownerAs<DomEnvironment>()) {
@@ -2277,7 +2277,7 @@ bool DomItem::commitToBase(std::shared_ptr<DomEnvironment> validEnvPtr)
return false;
}
-bool DomItem::visitLocalSymbolsNamed(QString name, function_ref<bool(DomItem &)> visitor)
+bool DomItem::visitLocalSymbolsNamed(QString name, function_ref<bool(const DomItem &)> visitor) const
{
if (name.isEmpty()) // no empty symbol
return true;
@@ -2320,7 +2320,7 @@ bool DomItem::visitLocalSymbolsNamed(QString name, function_ref<bool(DomItem &)>
break;
case DomType::MethodInfo: {
DomItem params = field(Fields::parameters);
- if (!params.visitIndexes([name, visitor](DomItem &p) {
+ if (!params.visitIndexes([name, visitor](const DomItem &p) {
const MethodParameter *pPtr = p.as<MethodParameter>();
if (pPtr->name == name && !visitor(p))
return false;
@@ -2354,31 +2354,31 @@ bool DomItem::visitLocalSymbolsNamed(QString name, function_ref<bool(DomItem &)>
return true;
}
-DomItem DomItem::operator[](const QString &cName)
+DomItem DomItem::operator[](const QString &cName) const
{
if (internalKind() == DomType::Map)
return key(cName);
return field(cName);
}
-DomItem DomItem::operator[](QStringView cName)
+DomItem DomItem::operator[](QStringView cName) const
{
if (internalKind() == DomType::Map)
return key(cName.toString());
return field(cName);
}
-DomItem DomItem::operator[](Path p)
+DomItem DomItem::operator[](Path p) const
{
return path(p);
}
-QCborValue DomItem::value()
+QCborValue DomItem::value() const
{
return base()->value();
}
-void DomItem::dumpPtr(Sink sink)
+void DomItem::dumpPtr(Sink sink) const
{
sink(u"DomItem{ topPtr:");
sink(QString::number((quintptr)topPtr().get(), 16));
@@ -2392,15 +2392,15 @@ void DomItem::dumpPtr(Sink sink)
}
void DomItem::dump(Sink s, int indent,
- function_ref<bool(DomItem &, const PathEls::PathComponent &, DomItem &)> filter)
+ function_ref<bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)> filter) const
{
visitEl([this, s, indent, filter](auto &&e) { e->dump(*this, s, indent, filter); });
}
FileWriter::Status
DomItem::dump(QString path,
- function_ref<bool(DomItem &, const PathEls::PathComponent &, DomItem &)> filter,
- int nBackups, int indent, FileWriter *fw)
+ function_ref<bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)> filter,
+ int nBackups, int indent, FileWriter *fw) const
{
FileWriter localFw;
if (!fw)
@@ -2423,19 +2423,19 @@ DomItem::dump(QString path,
return fw->status;
}
-QString DomItem::toString()
+QString DomItem::toString() const
{
return dumperToString([this](Sink s){ dump(s); });
}
-int DomItem::derivedFrom()
+int DomItem::derivedFrom() const
{
if (m_owner)
return std::visit([](auto &&ow) { return ow->derivedFrom(); }, *m_owner);
return 0;
}
-int DomItem::revision()
+int DomItem::revision() const
{
if (m_owner)
return std::visit([](auto &&ow) { return ow->revision(); }, *m_owner);
@@ -2443,7 +2443,7 @@ int DomItem::revision()
return -1;
}
-QDateTime DomItem::createdAt()
+QDateTime DomItem::createdAt() const
{
if (m_owner)
return std::visit([](auto &&ow) { return ow->createdAt(); }, *m_owner);
@@ -2451,7 +2451,7 @@ QDateTime DomItem::createdAt()
return QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC);
}
-QDateTime DomItem::frozenAt()
+QDateTime DomItem::frozenAt() const
{
if (m_owner)
return std::visit([](auto &&ow) { return ow->frozenAt(); }, *m_owner);
@@ -2459,7 +2459,7 @@ QDateTime DomItem::frozenAt()
return QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC);
}
-QDateTime DomItem::lastDataUpdateAt()
+QDateTime DomItem::lastDataUpdateAt() const
{
if (m_owner)
return std::visit([](auto &&ow) { return ow->lastDataUpdateAt(); }, *m_owner);
@@ -2467,7 +2467,7 @@ QDateTime DomItem::lastDataUpdateAt()
return QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC);
}
-void DomItem::addError(ErrorMessage msg)
+void DomItem::addError(ErrorMessage msg) const
{
if (m_owner) {
DomItem myOwner = owner();
@@ -2478,13 +2478,13 @@ void DomItem::addError(ErrorMessage msg)
defaultErrorHandler(msg.withItem(*this));
}
-ErrorHandler DomItem::errorHandler()
+ErrorHandler DomItem::errorHandler() const
{
DomItem self = *this;
return [self](ErrorMessage m) mutable { self.addError(m); };
}
-void DomItem::clearErrors(ErrorGroups groups, bool iterate)
+void DomItem::clearErrors(ErrorGroups groups, bool iterate) const
{
if (m_owner) {
std::visit([&groups](auto &&ow) { ow->clearErrors(groups); }, *m_owner);
@@ -2496,8 +2496,8 @@ void DomItem::clearErrors(ErrorGroups groups, bool iterate)
}
}
-bool DomItem::iterateErrors(function_ref<bool(DomItem, ErrorMessage)> visitor, bool iterate,
- Path inPath)
+bool DomItem::iterateErrors(function_ref<bool(const DomItem &, ErrorMessage)> visitor, bool iterate,
+ Path inPath) const
{
if (m_owner) {
DomItem ow = owner();
@@ -2505,7 +2505,7 @@ bool DomItem::iterateErrors(function_ref<bool(DomItem, ErrorMessage)> visitor, b
inPath](auto &&el) { return el->iterateErrors(ow, visitor, inPath); },
*m_owner))
return false;
- if (iterate && !iterateSubOwners([inPath, visitor](DomItem &i) {
+ if (iterate && !iterateSubOwners([inPath, visitor](const DomItem &i) {
return i.iterateErrors(visitor, true, inPath);
}))
return false;
@@ -2513,7 +2513,7 @@ bool DomItem::iterateErrors(function_ref<bool(DomItem, ErrorMessage)> visitor, b
return true;
}
-bool DomItem::iterateSubOwners(function_ref<bool(DomItem &)> visitor)
+bool DomItem::iterateSubOwners(function_ref<bool(const DomItem &)> visitor) const
{
if (m_owner) {
DomItem ow = owner();
@@ -2523,22 +2523,22 @@ bool DomItem::iterateSubOwners(function_ref<bool(DomItem &)> visitor)
return true;
}
-bool DomItem::iterateDirectSubpaths(DirectVisitor v)
+bool DomItem::iterateDirectSubpaths(DirectVisitor v) const
{
- return visitMutableEl(
- [this, v](auto &&el) mutable { return el->iterateDirectSubpaths(*this, v); });
+ return visitEl(
+ [this, v](auto &&el) { return el->iterateDirectSubpaths(*this, v); });
}
-DomItem DomItem::subReferencesItem(const PathEls::PathComponent &c, QList<Path> paths)
+DomItem DomItem::subReferencesItem(const PathEls::PathComponent &c, QList<Path> paths) const
{
return subListItem(
List::fromQList<Path>(pathFromOwner().appendComponent(c), paths,
- [](DomItem &list, const PathEls::PathComponent &p, Path &el) {
+ [](const DomItem &list, const PathEls::PathComponent &p, const Path &el) {
return list.subReferenceItem(p, el);
}));
}
-DomItem DomItem::subReferenceItem(const PathEls::PathComponent &c, Path referencedObject)
+DomItem DomItem::subReferenceItem(const PathEls::PathComponent &c, Path referencedObject) const
{
if (domTypeIsOwningItem(internalKind())) {
return DomItem(m_top, m_owner, m_ownerPath, Reference(referencedObject, Path(c)));
@@ -2548,14 +2548,14 @@ DomItem DomItem::subReferenceItem(const PathEls::PathComponent &c, Path referenc
}
}
-shared_ptr<DomTop> DomItem::topPtr()
+shared_ptr<DomTop> DomItem::topPtr() const
{
if (m_top)
return std::visit([](auto &&el) -> shared_ptr<DomTop> { return el; }, *m_top);
return {};
}
-shared_ptr<OwningItem> DomItem::owningItemPtr()
+shared_ptr<OwningItem> DomItem::owningItemPtr() const
{
if (m_owner)
return std::visit([](auto &&el) -> shared_ptr<OwningItem> { return el; }, *m_owner);
@@ -2571,15 +2571,6 @@ const DomBase *DomItem::base() const
return visitEl([](auto &&el) -> const DomBase * { return el->domBase(); });
}
-/*!
- \internal
- Returns a pointer to the virtual base pointer to a DomBase.
-*/
-DomBase *DomItem::mutableBase()
-{
- return visitMutableEl([](auto &&el) -> DomBase * { return el->domBase(); });
-}
-
DomItem::DomItem(std::shared_ptr<DomEnvironment> envPtr):
DomItem(envPtr, envPtr, Path(), envPtr.get())
{
@@ -2591,7 +2582,7 @@ DomItem::DomItem(std::shared_ptr<DomUniverse> universePtr):
}
void DomItem::loadFile(const FileToLoad &file, DomTop::Callback callback, LoadOptions loadOptions,
- std::optional<DomType> fileType)
+ std::optional<DomType> fileType) const
{
DomItem topEl = top();
if (topEl.internalKind() == DomType::DomEnvironment
@@ -2614,8 +2605,8 @@ void DomItem::loadFile(const FileToLoad &file, DomTop::Callback callback, LoadOp
}
void DomItem::loadModuleDependency(QString uri, Version version,
- std::function<void(Path, DomItem &, DomItem &)> callback,
- ErrorHandler errorHandler)
+ std::function<void(Path, const DomItem &, const DomItem &)> callback,
+ ErrorHandler errorHandler) const
{
DomItem topEl = top();
if (topEl.internalKind() == DomType::DomEnvironment) {
@@ -2632,7 +2623,7 @@ void DomItem::loadModuleDependency(QString uri, Version version,
}
}
-void DomItem::loadBuiltins(std::function<void(Path, DomItem &, DomItem &)> callback, ErrorHandler h)
+void DomItem::loadBuiltins(std::function<void(Path, const DomItem &, const DomItem &)> callback, ErrorHandler h) const
{
DomItem env = environment();
if (std::shared_ptr<DomEnvironment> envPtr = env.ownerAs<DomEnvironment>())
@@ -2641,7 +2632,7 @@ void DomItem::loadBuiltins(std::function<void(Path, DomItem &, DomItem &)> callb
myErrors().error(tr("Cannot load builtins without DomEnvironment")).handle(h);
}
-void DomItem::loadPendingDependencies()
+void DomItem::loadPendingDependencies() const
{
DomItem env = environment();
if (std::shared_ptr<DomEnvironment> envPtr = env.ownerAs<DomEnvironment>())
@@ -2680,28 +2671,28 @@ DomItem DomItem::fromCode(QString code, DomType fileType)
Empty::Empty()
{}
-Path Empty::pathFromOwner(DomItem &) const
+Path Empty::pathFromOwner(const DomItem &) const
{
return Path();
}
-Path Empty::canonicalPath(DomItem &) const
+Path Empty::canonicalPath(const DomItem &) const
{
return Path();
}
-bool Empty::iterateDirectSubpaths(DomItem &, DirectVisitor)
+bool Empty::iterateDirectSubpaths(const DomItem &, DirectVisitor) const
{
return true;
}
-DomItem Empty::containingObject(DomItem &self) const
+DomItem Empty::containingObject(const DomItem &self) const
{
return self;
}
-void Empty::dump(DomItem &, Sink s, int,
- function_ref<bool(DomItem &, const PathEls::PathComponent &, DomItem &)>) const
+void Empty::dump(const DomItem &, Sink s, int,
+ function_ref<bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)>) const
{
s(u"null");
}
@@ -2715,7 +2706,7 @@ quintptr Map::id() const
return quintptr(0);
}
-bool Map::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool Map::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
QSet<QString> ksSet = keys(self);
QStringList ksList = QStringList(ksSet.begin(), ksSet.end());
@@ -2727,19 +2718,19 @@ bool Map::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return true;
}
-const QSet<QString> Map::keys(DomItem &self) const
+const QSet<QString> Map::keys(const DomItem &self) const
{
return m_keys(self);
}
-DomItem Map::key(DomItem &self, QString name) const
+DomItem Map::key(const DomItem &self, QString name) const
{
return m_lookup(self, name);
}
void DomBase::dump(
- DomItem &self, Sink sink, int indent,
- function_ref<bool(DomItem &, const PathEls::PathComponent &, DomItem &)> filter) const
+ const DomItem &self, Sink sink, int indent,
+ function_ref<bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)> filter) const
{
bool comma = false;
DomKind dK = self.domKind();
@@ -2869,12 +2860,12 @@ quintptr List::id() const
}
void List::dump(
- DomItem &self, Sink sink, int indent,
- function_ref<bool(DomItem &, const PathEls::PathComponent &, DomItem &)> filter) const
+ const DomItem &self, Sink sink, int indent,
+ function_ref<bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)> filter) const
{
bool first = true;
sink(u"[");
- const_cast<List *>(this)->iterateDirectSubpaths(
+ iterateDirectSubpaths(
self,
[&self, indent, &first, sink, filter](const PathEls::PathComponent &c,
function_ref<DomItem()> itemF) {
@@ -2892,7 +2883,7 @@ void List::dump(
sink(u"]");
}
-bool List::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool List::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
if (m_iterator) {
return m_iterator(self, [visitor](index_type i, function_ref<DomItem()> itemF) {
@@ -2907,22 +2898,22 @@ bool List::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return true;
}
-index_type List::indexes(DomItem &self) const
+index_type List::indexes(const DomItem &self) const
{
return m_length(self);
}
-DomItem List::index(DomItem &self, index_type index) const
+DomItem List::index(const DomItem &self, index_type index) const
{
return m_lookup(self, index);
}
-void List::writeOut(DomItem &self, OutWriter &ow, bool compact) const
+void List::writeOut(const DomItem &self, OutWriter &ow, bool compact) const
{
ow.writeRegion(u"leftSquareBrace", u"[");
int baseIndent = ow.increaseIndent(1);
bool first = true;
- const_cast<List *>(this)->iterateDirectSubpaths(
+ iterateDirectSubpaths(
self,
[&ow, &first, compact](const PathEls::PathComponent &, function_ref<DomItem()> elF) {
if (first)
@@ -2943,19 +2934,19 @@ void List::writeOut(DomItem &self, OutWriter &ow, bool compact) const
DomElement::DomElement(Path pathFromOwner) : m_pathFromOwner(pathFromOwner) { }
-Path DomElement::pathFromOwner(DomItem &) const
+Path DomElement::pathFromOwner(const DomItem &) const
{
Q_ASSERT(m_pathFromOwner && "uninitialized DomElement");
return m_pathFromOwner;
}
-Path DomElement::canonicalPath(DomItem &self) const
+Path DomElement::canonicalPath(const DomItem &self) const
{
Q_ASSERT(m_pathFromOwner && "uninitialized DomElement");
return self.owner().canonicalPath().path(m_pathFromOwner);
}
-DomItem DomElement::containingObject(DomItem &self) const
+DomItem DomElement::containingObject(const DomItem &self) const
{
Q_ASSERT(m_pathFromOwner && "uninitialized DomElement");
return DomBase::containingObject(self);
@@ -3004,7 +2995,7 @@ quintptr Reference::id() const
return quintptr(0);
}
-bool Reference::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool Reference::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && self.dvValueLazyField(visitor, Fields::referredObjectPath, [this]() {
@@ -3015,7 +3006,7 @@ bool Reference::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return cont;
}
-DomItem Reference::field(DomItem &self, QStringView name) const
+DomItem Reference::field(const DomItem &self, QStringView name) const
{
if (Fields::referredObjectPath == name)
return self.subDataItemField(Fields::referredObjectPath, referredObjectPath.toString());
@@ -3024,22 +3015,22 @@ DomItem Reference::field(DomItem &self, QStringView name) const
return DomItem();
}
-QList<QString> Reference::fields(DomItem &) const
+QList<QString> Reference::fields(const DomItem &) const
{
return QList<QString>({QString::fromUtf16(Fields::referredObjectPath), QString::fromUtf16(Fields::get)});
}
-DomItem Reference::index(DomItem &, index_type) const
+DomItem Reference::index(const DomItem &, index_type) const
{
return DomItem();
}
-DomItem Reference::key(DomItem &, QString) const
+DomItem Reference::key(const DomItem &, QString) const
{
return DomItem();
}
-DomItem Reference::get(DomItem &self, ErrorHandler h, QList<Path> *visitedRefs) const
+DomItem Reference::get(const DomItem &self, ErrorHandler h, QList<Path> *visitedRefs) const
{
DomItem res;
if (referredObjectPath) {
@@ -3075,7 +3066,7 @@ DomItem Reference::get(DomItem &self, ErrorHandler h, QList<Path> *visitedRefs)
QList<Path> visitedRefsLocal;
self.resolve(
referredObjectPath,
- [&res](Path, DomItem &el) {
+ [&res](Path, const DomItem &el) {
res = el;
return false;
},
@@ -3088,7 +3079,7 @@ DomItem Reference::get(DomItem &self, ErrorHandler h, QList<Path> *visitedRefs)
return res;
}
-QList<DomItem> Reference::getAll(DomItem &self, ErrorHandler h, QList<Path> *visitedRefs) const
+QList<DomItem> Reference::getAll(const DomItem &self, ErrorHandler h, QList<Path> *visitedRefs) const
{
QList<DomItem> res;
if (referredObjectPath) {
@@ -3130,7 +3121,7 @@ QList<DomItem> Reference::getAll(DomItem &self, ErrorHandler h, QList<Path> *vis
}
self.resolve(
referredObjectPath,
- [&res](Path, DomItem &el) {
+ [&res](Path, const DomItem &el) {
res.append(el);
return true;
},
@@ -3210,14 +3201,14 @@ int OwningItem::nextRevision()
return ++nextRev;
}
-bool OwningItem::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool OwningItem::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && self.dvItemField(visitor, Fields::errors, [&self, this]() {
QMultiMap<Path, ErrorMessage> myErrors = localErrors();
return self.subMapItem(Map(
self.pathFromOwner().field(Fields::errors),
- [myErrors](DomItem &map, QString key) {
+ [myErrors](const DomItem &map, QString key) {
auto it = myErrors.find(Path::fromString(key));
if (it != myErrors.end())
return map.subDataItem(PathEls::Key(key), it->toCbor(),
@@ -3225,7 +3216,7 @@ bool OwningItem::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
else
return DomItem();
},
- [myErrors](DomItem &) {
+ [myErrors](const DomItem &) {
QSet<QString> res;
auto it = myErrors.keyBegin();
auto end = myErrors.keyEnd();
@@ -3238,7 +3229,7 @@ bool OwningItem::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return cont;
}
-DomItem OwningItem::containingObject(DomItem &self) const
+DomItem OwningItem::containingObject(const DomItem &self) const
{
Source s = self.canonicalPath().split();
if (s.pathFromSource) {
@@ -3296,7 +3287,7 @@ void OwningItem::refreshedDataAt(QDateTime tNew)
m_lastDataUpdateAt = tNew;
}
-void OwningItem::addError(DomItem &, ErrorMessage msg)
+void OwningItem::addError(const DomItem &, ErrorMessage msg)
{
addErrorLocal(msg);
}
@@ -3322,8 +3313,9 @@ void OwningItem::clearErrors(ErrorGroups groups)
}
}
-bool OwningItem::iterateErrors(DomItem &self, function_ref<bool(DomItem, ErrorMessage)> visitor,
- Path inPath)
+bool OwningItem::iterateErrors(
+ const DomItem &self, function_ref<bool(const DomItem &, ErrorMessage)> visitor,
+ Path inPath)
{
QMultiMap<Path, ErrorMessage> myErrors;
{
@@ -3339,7 +3331,7 @@ bool OwningItem::iterateErrors(DomItem &self, function_ref<bool(DomItem, ErrorMe
return true;
}
-bool OwningItem::iterateSubOwners(DomItem &self, function_ref<bool(DomItem &owner)> visitor)
+bool OwningItem::iterateSubOwners(const DomItem &self, function_ref<bool(const DomItem &owner)> visitor)
{
return self.iterateDirectSubpaths(
[&self, visitor](const PathEls::PathComponent &, function_ref<DomItem()> iF) {
@@ -3353,13 +3345,11 @@ bool OwningItem::iterateSubOwners(DomItem &self, function_ref<bool(DomItem &owne
});
}
-bool operator==(const DomItem &o1c, const DomItem &o2c)
+bool operator==(const DomItem &o1, const DomItem &o2)
{
- DomItem &o1 = *const_cast<DomItem *>(&o1c);
- DomItem &o2 = *const_cast<DomItem *>(&o2c);
if (o1.m_kind != o2.m_kind)
return false;
- return o1.visitMutableEl([&o1, &o2](auto &&el1) {
+ return o1.visitEl([&o1, &o2](auto &&el1) {
auto &&el2 = std::get<std::decay_t<decltype(el1)>>(o2.m_element);
auto id1 = el1->id();
auto id2 = el2->id();
@@ -3658,7 +3648,7 @@ MutableDomItem MutableDomItem::addPostComment(const Comment &comment, QString re
QDebug operator<<(QDebug debug, const DomItem &c)
{
- dumperToQDebug([&c](Sink s) { const_cast<DomItem *>(&c)->dump(s); }, debug);
+ dumperToQDebug([&c](Sink s) { c.dump(s); }, debug);
return debug;
}
@@ -3669,7 +3659,7 @@ QDebug operator<<(QDebug debug, const MutableDomItem &c)
<< ", " << cc.canonicalPath().toString() << ")";
}
-bool ListPBase::iterateDirectSubpaths(DomItem &self, DirectVisitor v)
+bool ListPBase::iterateDirectSubpaths(const DomItem &self, DirectVisitor v) const
{
index_type len = index_type(m_pList.size());
for (index_type i = 0; i < len; ++i) {
@@ -3679,7 +3669,7 @@ bool ListPBase::iterateDirectSubpaths(DomItem &self, DirectVisitor v)
return true;
}
-void ListPBase::writeOut(DomItem &self, OutWriter &ow, bool compact) const
+void ListPBase::writeOut(const DomItem &self, OutWriter &ow, bool compact) const
{
ow.writeRegion(u"leftSquareBrace", u"[");
int baseIndent = ow.increaseIndent(1);
@@ -3710,6 +3700,26 @@ void ScriptElement::setSemanticScope(const QQmlJSScope::Ptr &scope)
m_scope = scope;
}
+/*!
+ \internal
+ \brief Returns a pointer to the virtual base for virtual method calls.
+
+ A helper to call virtual methods without having to call std::visit(...).
+ */
+ScriptElement::PointerType<ScriptElement> ScriptElementVariant::base() const
+{
+ if (!m_data)
+ return nullptr;
+
+ return std::visit(
+ [](auto &&e) {
+ // std::reinterpret_pointer_cast does not exist on qnx it seems...
+ return std::shared_ptr<ScriptElement>(
+ e, static_cast<ScriptElement *>(e.get()));
+ },
+ *m_data);
+}
+
} // end namespace Dom
} // end namespace QQmlJS
diff --git a/src/qmldom/qqmldomitem_p.h b/src/qmldom/qqmldomitem_p.h
index 2f4999d31e..d3b2c2e29c 100644
--- a/src/qmldom/qqmldomitem_p.h
+++ b/src/qmldom/qqmldomitem_p.h
@@ -90,13 +90,13 @@ QMLDOM_EXPORT QString domKindToString(DomKind k);
QMLDOM_EXPORT QCborValue locationToData(SourceLocation loc, QStringView strValue=u"");
-inline bool noFilter(DomItem &, const PathEls::PathComponent &, DomItem &)
+inline bool noFilter(const DomItem &, const PathEls::PathComponent &, const DomItem &)
{
return true;
}
using DirectVisitor = function_ref<bool(const PathEls::PathComponent &, function_ref<DomItem()>)>;
-// using DirectVisitor = function_ref<bool(Path, DomItem &)>;
+// using DirectVisitor = function_ref<bool(Path, const DomItem &)>;
namespace {
template<typename T>
@@ -179,8 +179,11 @@ template<typename T>
union SubclassStorage {
int i;
T lp;
+
+ // TODO: these are extremely nasty. What is this int doing in here?
T *data() { return reinterpret_cast<T *>(this); }
const T *data() const { return reinterpret_cast<const T *>(this); }
+
SubclassStorage() { }
SubclassStorage(T &&el) { el.moveTo(data()); }
SubclassStorage(const T *el) { el->copyTo(data()); }
@@ -198,43 +201,44 @@ union SubclassStorage {
class QMLDOM_EXPORT DomBase
{
public:
- using FilterT = function_ref<bool(DomItem &, const PathEls::PathComponent &, DomItem &)>;
+ using FilterT = function_ref<bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)>;
virtual ~DomBase() = default;
- DomBase *domBase() { return static_cast<DomBase *>(this); }
+ DomBase *domBase() { return this; }
const DomBase *domBase() const { return this; }
// minimal overload set:
virtual DomType kind() const = 0;
virtual DomKind domKind() const;
- virtual Path pathFromOwner(DomItem &self) const = 0;
- virtual Path canonicalPath(DomItem &self) const = 0;
+ virtual Path pathFromOwner(const DomItem &self) const = 0;
+ virtual Path canonicalPath(const DomItem &self) const = 0;
virtual bool
- iterateDirectSubpaths(DomItem &self,
- DirectVisitor visitor) = 0; // iterates the *direct* subpaths, returns
- // false if a quick end was requested
- bool iterateDirectSubpathsConst(DomItem &self, DirectVisitor)
+ iterateDirectSubpaths(const DomItem &self,
+ DirectVisitor visitor) const = 0; // iterates the *direct* subpaths, returns
+ // false if a quick end was requested
+
+ bool iterateDirectSubpathsConst(const DomItem &self, DirectVisitor)
const; // iterates the *direct* subpaths, returns false if a quick end was requested
virtual DomItem containingObject(
- DomItem &self) const; // the DomItem corresponding to the canonicalSource source
- virtual void dump(DomItem &, Sink sink, int indent, FilterT filter) const;
+ const DomItem &self) const; // the DomItem corresponding to the canonicalSource source
+ virtual void dump(const DomItem &, Sink sink, int indent, FilterT filter) const;
virtual quintptr id() const;
QString typeName() const;
- virtual QList<QString> fields(DomItem &self) const;
- virtual DomItem field(DomItem &self, QStringView name) const;
+ virtual QList<QString> fields(const DomItem &self) const;
+ virtual DomItem field(const DomItem &self, QStringView name) const;
- virtual index_type indexes(DomItem &self) const;
- virtual DomItem index(DomItem &self, index_type index) const;
+ virtual index_type indexes(const DomItem &self) const;
+ virtual DomItem index(const DomItem &self, index_type index) const;
- virtual QSet<QString> const keys(DomItem &self) const;
- virtual DomItem key(DomItem &self, QString name) const;
+ virtual QSet<QString> const keys(const DomItem &self) const;
+ virtual DomItem key(const DomItem &self, QString name) const;
- virtual QString canonicalFilePath(DomItem &self) const;
+ virtual QString canonicalFilePath(const DomItem &self) const;
- virtual void writeOut(DomItem &self, OutWriter &lw) const;
+ virtual void writeOut(const DomItem &self, OutWriter &lw) const;
virtual QCborValue value() const {
return QCborValue();
@@ -271,12 +275,12 @@ public:
Empty();
quintptr id() const override { return ~quintptr(0); }
- Path pathFromOwner(DomItem &self) const override;
- Path canonicalPath(DomItem &self) const override;
- DomItem containingObject(DomItem &self) const override;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor) override;
- void dump(DomItem &, Sink s, int indent,
- function_ref<bool(DomItem &, const PathEls::PathComponent &, DomItem &)> filter)
+ Path pathFromOwner(const DomItem &self) const override;
+ Path canonicalPath(const DomItem &self) const override;
+ DomItem containingObject(const DomItem &self) const override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override;
+ void dump(const DomItem &, Sink s, int indent,
+ function_ref<bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)> filter)
const override;
};
@@ -286,10 +290,10 @@ protected:
public:
DomElement(Path pathFromOwner = Path());
DomElement(const DomElement &o) = default;
- Path pathFromOwner(DomItem &self) const override;
+ Path pathFromOwner(const DomItem &self) const override;
Path pathFromOwner() const { return m_pathFromOwner; }
- Path canonicalPath(DomItem &self) const override;
- DomItem containingObject(DomItem &self) const override;
+ Path canonicalPath(const DomItem &self) const override;
+ DomItem containingObject(const DomItem &self) const override;
virtual void updatePathFromOwner(Path newPath);
private:
@@ -307,20 +311,20 @@ public:
Map &operator*() { return *this; }
const Map &operator*() const { return *this; }
- using LookupFunction = std::function<DomItem(DomItem &, QString)>;
- using Keys = std::function<QSet<QString>(DomItem &)>;
+ using LookupFunction = std::function<DomItem(const DomItem &, QString)>;
+ using Keys = std::function<QSet<QString>(const DomItem &)>;
Map(Path pathFromOwner, LookupFunction lookup, Keys keys, QString targetType);
quintptr id() const override;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor) override;
- QSet<QString> const keys(DomItem &self) const override;
- DomItem key(DomItem &self, QString name) const override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override;
+ QSet<QString> const keys(const DomItem &self) const override;
+ DomItem key(const DomItem &self, QString name) const override;
template<typename T>
- static Map fromMultiMapRef(Path pathFromOwner, QMultiMap<QString, T> &mmap);
+ static Map fromMultiMapRef(Path pathFromOwner, const QMultiMap<QString, T> &mmap);
template<typename T>
static Map
- fromMapRef(Path pathFromOwner, QMap<QString, T> &mmap,
- std::function<DomItem(DomItem &, const PathEls::PathComponent &, T &)> elWrapper);
+ fromMapRef(Path pathFromOwner, const QMap<QString, T> &mmap,
+ std::function<DomItem(const DomItem &, const PathEls::PathComponent &, const T &)> elWrapper);
private:
LookupFunction m_lookup;
@@ -339,32 +343,32 @@ public:
List &operator*() { return *this; }
const List &operator*() const { return *this; }
- using LookupFunction = std::function<DomItem(DomItem &, index_type)>;
- using Length = std::function<index_type(DomItem &)>;
+ using LookupFunction = std::function<DomItem(const DomItem &, index_type)>;
+ using Length = std::function<index_type(const DomItem &)>;
using IteratorFunction =
- std::function<bool(DomItem &, function_ref<bool(index_type, function_ref<DomItem()>)>)>;
+ std::function<bool(const DomItem &, function_ref<bool(index_type, function_ref<DomItem()>)>)>;
List(Path pathFromOwner, LookupFunction lookup, Length length, IteratorFunction iterator, QString elType);
quintptr id() const override;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override;
void
- dump(DomItem &, Sink s, int indent,
- function_ref<bool(DomItem &, const PathEls::PathComponent &, DomItem &)>) const override;
- index_type indexes(DomItem &self) const override;
- DomItem index(DomItem &self, index_type index) const override;
+ dump(const DomItem &, Sink s, int indent,
+ function_ref<bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)>) const override;
+ index_type indexes(const DomItem &self) const override;
+ DomItem index(const DomItem &self, index_type index) const override;
template<typename T>
static List
fromQList(Path pathFromOwner, QList<T> list,
- std::function<DomItem(DomItem &, const PathEls::PathComponent &, T &)> elWrapper,
+ std::function<DomItem(const DomItem &, const PathEls::PathComponent &, const T &)> elWrapper,
ListOptions options = ListOptions::Normal);
template<typename T>
static List
- fromQListRef(Path pathFromOwner, QList<T> &list,
- std::function<DomItem(DomItem &, const PathEls::PathComponent &, T &)> elWrapper,
+ fromQListRef(Path pathFromOwner, const QList<T> &list,
+ std::function<DomItem(const DomItem &, const PathEls::PathComponent &, const T &)> elWrapper,
ListOptions options = ListOptions::Normal);
- void writeOut(DomItem &self, OutWriter &ow, bool compact) const;
- void writeOut(DomItem &self, OutWriter &ow) const override { writeOut(self, ow, true); }
+ void writeOut(const DomItem &self, OutWriter &ow, bool compact) const;
+ void writeOut(const DomItem &self, OutWriter &ow) const override { writeOut(self, ow, true); }
private:
LookupFunction m_lookup;
@@ -379,20 +383,20 @@ public:
constexpr static DomType kindValue = DomType::ListP;
DomType kind() const override { return kindValue; }
- ListPBase(Path pathFromOwner, const QList<void *> &pList, QString elType)
+ ListPBase(Path pathFromOwner, const QList<const void *> &pList, QString elType)
: DomElement(pathFromOwner), m_pList(pList), m_elType(elType)
{
}
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor v) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor v) const override;
virtual void copyTo(ListPBase *) const { Q_ASSERT(false); };
virtual void moveTo(ListPBase *) const { Q_ASSERT(false); };
quintptr id() const override { return quintptr(0); }
- index_type indexes(DomItem &) const override { return index_type(m_pList.size()); }
- void writeOut(DomItem &self, OutWriter &ow, bool compact) const;
- void writeOut(DomItem &self, OutWriter &ow) const override { writeOut(self, ow, true); }
+ index_type indexes(const DomItem &) const override { return index_type(m_pList.size()); }
+ void writeOut(const DomItem &self, OutWriter &ow, bool compact) const;
+ void writeOut(const DomItem &self, OutWriter &ow) const override { writeOut(self, ow, true); }
protected:
- QList<void *> m_pList;
+ QList<const void *> m_pList;
QString m_elType;
};
@@ -413,7 +417,7 @@ public:
"ListPT does not have the same size as ListPBase");
m_pList.reserve(pList.size());
if (options == ListOptions::Normal) {
- for (void *p : pList)
+ for (const void *p : pList)
m_pList.append(p);
} else if (options == ListOptions::Reverse) {
for (qsizetype i = pList.size(); i-- != 0;)
@@ -425,9 +429,9 @@ public:
}
void copyTo(ListPBase *t) const override { new (t) ListPT(*this); }
void moveTo(ListPBase *t) const override { new (t) ListPT(std::move(*this)); }
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor v) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor v) const override;
- DomItem index(DomItem &self, index_type index) const override;
+ DomItem index(const DomItem &self, index_type index) const override;
};
class QMLDOM_EXPORT ListP
@@ -468,7 +472,7 @@ public:
const ConstantData &operator*() const { return *this; }
ConstantData(Path pathFromOwner, QCborValue value, Options options = Options::MapIsMap);
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override;
quintptr id() const override;
DomKind domKind() const override;
QCborValue value() const override { return m_value; }
@@ -492,29 +496,17 @@ public:
{
if (m_options & SimpleWrapOption::ValueType) {
if (m_value.metaType() == QMetaType::fromType<T>())
- return reinterpret_cast<const T *>(m_value.constData());
- return nullptr;
- } else {
- return m_value.value<T *>();
- }
- }
-
- template <typename T>
- T *mutableAs()
- {
- if (m_options & SimpleWrapOption::ValueType) {
- if (m_value.metaType() == QMetaType::fromType<T>())
- return reinterpret_cast<T *>(m_value.data());
+ return static_cast<const T *>(m_value.constData());
return nullptr;
} else {
- return m_value.value<T *>();
+ return m_value.value<const T *>();
}
}
SimpleObjectWrapBase() = delete;
virtual void copyTo(SimpleObjectWrapBase *) const { Q_ASSERT(false); }
virtual void moveTo(SimpleObjectWrapBase *) const { Q_ASSERT(false); }
- bool iterateDirectSubpaths(DomItem &, DirectVisitor) override
+ bool iterateDirectSubpaths(const DomItem &, DirectVisitor) const override
{
Q_ASSERT(false);
return true;
@@ -547,21 +539,21 @@ class SimpleObjectWrapT final : public SimpleObjectWrapBase
public:
constexpr static DomType kindValue = DomType::SimpleObjectWrap;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
{
- return mutableAsT()->iterateDirectSubpaths(self, visitor);
+ return asT()->iterateDirectSubpaths(self, visitor);
}
- void writeOut(DomItem &self, OutWriter &lw) const override;
+ void writeOut(const DomItem &self, OutWriter &lw) const override;
- T const *asT() const
+ const T *asT() const
{
if constexpr (domTypeIsValueWrap(T::kindValue)) {
if (m_value.metaType() == QMetaType::fromType<T>())
- return reinterpret_cast<const T *>(m_value.constData());
+ return static_cast<const T *>(m_value.constData());
return nullptr;
} else if constexpr (domTypeIsObjWrap(T::kindValue)) {
- return m_value.value<T *>();
+ return m_value.value<const T *>();
} else {
// need dependent static assert to not unconditially trigger
static_assert(!std::is_same_v<T, T>, "wrapping of unexpected type");
@@ -569,20 +561,6 @@ public:
}
}
- T *mutableAsT()
- {
- if (domTypeIsValueWrap(T::kindValue)) {
- if (m_value.metaType() == QMetaType::fromType<T>())
- return reinterpret_cast<T *>(m_value.data());
- return nullptr;
- } else if constexpr (domTypeIsObjWrap(T::kindValue)) {
- return m_value.value<T *>();
- } else {
- Q_ASSERT_X(false, "SimpleObjectWrap", "wrapping of unexpected type");
- return nullptr;
- }
- }
-
void copyTo(SimpleObjectWrapBase *target) const override
{
static_assert(sizeof(SimpleObjectWrapBase) == sizeof(SimpleObjectWrapT),
@@ -663,16 +641,16 @@ public:
bool shouldCache() const;
Reference(Path referredObject = Path(), Path pathFromOwner = Path(), const SourceLocation & loc = SourceLocation());
quintptr id() const override;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor) override;
- DomItem field(DomItem &self, QStringView name) const override;
- QList<QString> fields(DomItem &self) const override;
- index_type indexes(DomItem &) const override { return 0; }
- DomItem index(DomItem &, index_type) const override;
- QSet<QString> const keys(DomItem &) const override { return {}; }
- DomItem key(DomItem &, QString) const override;
-
- DomItem get(DomItem &self, ErrorHandler h = nullptr, QList<Path> *visitedRefs = nullptr) const;
- QList<DomItem> getAll(DomItem &self, ErrorHandler h = nullptr,
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override;
+ DomItem field(const DomItem &self, QStringView name) const override;
+ QList<QString> fields(const DomItem &self) const override;
+ index_type indexes(const DomItem &) const override { return 0; }
+ DomItem index(const DomItem &, index_type) const override;
+ QSet<QString> const keys(const DomItem &) const override { return {}; }
+ DomItem key(const DomItem &, QString) const override;
+
+ DomItem get(const DomItem &self, ErrorHandler h = nullptr, QList<Path> *visitedRefs = nullptr) const;
+ QList<DomItem> getAll(const DomItem &self, ErrorHandler h = nullptr,
QList<Path> *visitedRefs = nullptr) const;
Path referredObjectPath;
@@ -745,24 +723,7 @@ public:
return p;
}
- /*!
- \internal
- \brief Returns a pointer to the virtual base for virtual method calls.
-
- A helper to call virtual methods without having to call std::visit(...).
- */
- ScriptElement::PointerType<ScriptElement> base() const
- {
- if (m_data)
- return std::visit(
- [](auto &&e) {
- // std::reinterpret_pointer_cast does not exist on qnx it seems...
- return std::shared_ptr<ScriptElement>(
- e, reinterpret_cast<ScriptElement *>(e.get()));
- },
- *m_data);
- return nullptr;
- }
+ ScriptElement::PointerType<ScriptElement> base() const;
operator bool() const { return m_data.has_value(); }
@@ -805,7 +766,7 @@ public:
DomBase &operator*() { return *m_element.base(); }
const DomBase &operator*() const { return *m_element.base(); }
- ScriptElementVariant element() { return m_element; }
+ ScriptElementVariant element() const { return m_element; }
private:
ScriptElementVariant m_element;
@@ -813,13 +774,40 @@ private:
// TODO: create more "groups" to simplify this variant? Maybe into Internal, ScriptExpression, ???
using ElementT =
- std::variant<Empty, Map, List, ListP, ConstantData, SimpleObjectWrap, Reference,
- ScriptElementDomWrapper, GlobalComponent *, JsResource *, QmlComponent *,
- QmltypesComponent *, EnumDecl *, MockObject *, ModuleScope *, AstComments *,
- AttachedInfo *, DomEnvironment *, DomUniverse *, ExternalItemInfoBase *,
- ExternalItemPairBase *, GlobalScope *, JsFile *, QmlDirectory *, QmlFile *,
- QmldirFile *, QmlObject *, QmltypesFile *, LoadInfo *, MockOwner *,
- ModuleIndex *, ScriptExpression *>;
+ std::variant<
+ ConstantData,
+ Empty,
+ List,
+ ListP,
+ Map,
+ Reference,
+ ScriptElementDomWrapper,
+ SimpleObjectWrap,
+ const AstComments *,
+ const AttachedInfo *,
+ const DomEnvironment *,
+ const DomUniverse *,
+ const EnumDecl *,
+ const ExternalItemInfoBase *,
+ const ExternalItemPairBase *,
+ const GlobalComponent *,
+ const GlobalScope *,
+ const JsFile *,
+ const JsResource *,
+ const LoadInfo *,
+ const MockObject *,
+ const MockOwner *,
+ const ModuleIndex *,
+ const ModuleScope *,
+ const QmlComponent *,
+ const QmlDirectory *,
+ const QmlFile *,
+ const QmlObject *,
+ const QmldirFile *,
+ const QmltypesComponent *,
+ const QmltypesFile *,
+ const ScriptExpression *
+ >;
using TopT = std::variant<std::shared_ptr<DomEnvironment>, std::shared_ptr<DomUniverse>>;
@@ -833,7 +821,7 @@ using OwnerT =
std::shared_ptr<LoadInfo>, std::shared_ptr<AttachedInfo>,
std::shared_ptr<DomEnvironment>, std::shared_ptr<DomUniverse>>;
-inline bool emptyChildrenVisitor(Path, DomItem &, bool)
+inline bool emptyChildrenVisitor(Path, const DomItem &, bool)
{
return true;
}
@@ -886,11 +874,11 @@ private:
class QMLDOM_EXPORT DomItem {
Q_DECLARE_TR_FUNCTIONS(DomItem);
public:
- using Callback = function<void(Path, DomItem &, DomItem &)>;
+ using Callback = function<void(Path, const DomItem &, const DomItem &)>;
using InternalKind = DomType;
- using Visitor = function_ref<bool(Path, DomItem &)>;
- using ChildrenVisitor = function_ref<bool(Path, DomItem &, bool)>;
+ using Visitor = function_ref<bool(Path, const DomItem &)>;
+ using ChildrenVisitor = function_ref<bool(Path, const DomItem &, bool)>;
static ErrorGroup domErrorGroup;
static ErrorGroups myErrors();
@@ -900,11 +888,6 @@ public:
enum class CopyOption { EnvConnected, EnvDisconnected };
template<typename F>
- auto visitMutableEl(F f)
- {
- return std::visit(f, this->m_element);
- }
- template<typename F>
auto visitEl(F f) const
{
return std::visit(f, this->m_element);
@@ -923,54 +906,54 @@ public:
return kind2domKind(m_kind);
}
- Path canonicalPath();
+ Path canonicalPath() const;
- DomItem filterUp(function_ref<bool(DomType k, DomItem &)> filter, FilterUpOptions options);
- DomItem containingObject();
- DomItem container();
- DomItem owner();
- DomItem top();
- DomItem environment();
- DomItem universe();
- DomItem containingFile();
- DomItem goToFile(const QString &filePath);
- DomItem goUp(int);
- DomItem directParent();
+ DomItem filterUp(function_ref<bool(DomType k, const DomItem &)> filter, FilterUpOptions options) const;
+ DomItem containingObject() const;
+ DomItem container() const;
+ DomItem owner() const;
+ DomItem top() const;
+ DomItem environment() const;
+ DomItem universe() const;
+ DomItem containingFile() const;
+ DomItem goToFile(const QString &filePath) const;
+ DomItem goUp(int) const;
+ DomItem directParent() const;
DomItem qmlObject(GoTo option = GoTo::Strict,
- FilterUpOptions options = FilterUpOptions::ReturnOuter);
- DomItem fileObject(GoTo option = GoTo::Strict);
- DomItem rootQmlObject(GoTo option = GoTo::Strict);
- DomItem globalScope();
- DomItem component(GoTo option = GoTo::Strict);
- DomItem scope(FilterUpOptions options = FilterUpOptions::ReturnOuter);
- std::optional<QQmlJSScope::Ptr> nearestSemanticScope();
- std::optional<QQmlJSScope::Ptr> semanticScope();
+ FilterUpOptions options = FilterUpOptions::ReturnOuter) const;
+ DomItem fileObject(GoTo option = GoTo::Strict) const;
+ DomItem rootQmlObject(GoTo option = GoTo::Strict) const;
+ DomItem globalScope() const;
+ DomItem component(GoTo option = GoTo::Strict) const;
+ DomItem scope(FilterUpOptions options = FilterUpOptions::ReturnOuter) const;
+ std::optional<QQmlJSScope::Ptr> nearestSemanticScope() const;
+ std::optional<QQmlJSScope::Ptr> semanticScope() const;
// convenience getters
- DomItem get(ErrorHandler h = nullptr, QList<Path> *visitedRefs = nullptr);
- QList<DomItem> getAll(ErrorHandler h = nullptr, QList<Path> *visitedRefs = nullptr);
- bool isOwningItem() { return domTypeIsOwningItem(internalKind()); }
- bool isExternalItem() { return domTypeIsExternalItem(internalKind()); }
- bool isTopItem() { return domTypeIsTopItem(internalKind()); }
- bool isContainer() { return domTypeIsContainer(internalKind()); }
- bool isScope() { return domTypeIsScope(internalKind()); }
- bool isCanonicalChild(DomItem &child);
- bool hasAnnotations();
- QString name() { return field(Fields::name).value().toString(); }
- DomItem pragmas() { return field(Fields::pragmas); }
- DomItem ids() { return field(Fields::ids); }
- QString idStr() { return field(Fields::idStr).value().toString(); }
- DomItem propertyInfos() { return field(Fields::propertyInfos); }
- PropertyInfo propertyInfoWithName(QString name);
- QSet<QString> propertyInfoNames();
- DomItem propertyDefs() { return field(Fields::propertyDefs); }
- DomItem bindings() { return field(Fields::bindings); }
- DomItem methods() { return field(Fields::methods); }
- DomItem enumerations() { return field(Fields::enumerations); }
- DomItem children() { return field(Fields::children); }
- DomItem child(index_type i) { return field(Fields::children).index(i); }
- DomItem annotations()
+ DomItem get(ErrorHandler h = nullptr, QList<Path> *visitedRefs = nullptr) const;
+ QList<DomItem> getAll(ErrorHandler h = nullptr, QList<Path> *visitedRefs = nullptr) const;
+ bool isOwningItem() const { return domTypeIsOwningItem(internalKind()); }
+ bool isExternalItem() const { return domTypeIsExternalItem(internalKind()); }
+ bool isTopItem() const { return domTypeIsTopItem(internalKind()); }
+ bool isContainer() const { return domTypeIsContainer(internalKind()); }
+ bool isScope() const { return domTypeIsScope(internalKind()); }
+ bool isCanonicalChild(const DomItem &child) const;
+ bool hasAnnotations() const;
+ QString name() const { return field(Fields::name).value().toString(); }
+ DomItem pragmas() const { return field(Fields::pragmas); }
+ DomItem ids() const { return field(Fields::ids); }
+ QString idStr() const { return field(Fields::idStr).value().toString(); }
+ DomItem propertyInfos() const { return field(Fields::propertyInfos); }
+ PropertyInfo propertyInfoWithName(QString name) const;
+ QSet<QString> propertyInfoNames() const;
+ DomItem propertyDefs() const { return field(Fields::propertyDefs); }
+ DomItem bindings() const { return field(Fields::bindings); }
+ DomItem methods() const { return field(Fields::methods); }
+ DomItem enumerations() const { return field(Fields::enumerations); }
+ DomItem children() const { return field(Fields::children); }
+ DomItem child(index_type i) const { return field(Fields::children).index(i); }
+ DomItem annotations() const
{
if (hasAnnotations())
return field(Fields::annotations);
@@ -980,207 +963,203 @@ public:
bool resolve(Path path, Visitor visitor, ErrorHandler errorHandler,
ResolveOptions options = ResolveOption::None, Path fullPath = Path(),
- QList<Path> *visitedRefs = nullptr);
+ QList<Path> *visitedRefs = nullptr) const;
- DomItem operator[](Path path);
- DomItem operator[](QStringView component);
- DomItem operator[](const QString &component);
- DomItem operator[](const char16_t *component)
+ DomItem operator[](Path path) const;
+ DomItem operator[](QStringView component) const;
+ DomItem operator[](const QString &component) const;
+ DomItem operator[](const char16_t *component) const
{
return (*this)[QStringView(component)];
} // to avoid clash with stupid builtin ptrdiff_t[DomItem&], coming from C
- DomItem operator[](index_type i) { return index(i); }
- DomItem operator[](int i) { return index(i); }
- index_type size() { return indexes() + keys().size(); }
- index_type length() { return size(); }
-
- DomItem path(Path p, ErrorHandler h = &defaultErrorHandler);
- DomItem path(QString p, ErrorHandler h = &defaultErrorHandler);
- DomItem path(QStringView p, ErrorHandler h = &defaultErrorHandler);
-
- QList<QString> fields();
- DomItem field(QStringView name);
-
- index_type indexes();
- DomItem index(index_type);
- bool visitIndexes(function_ref<bool(DomItem &)> visitor);
-
- QSet<QString> keys();
- QStringList sortedKeys();
- DomItem key(QString name);
- DomItem key(QStringView name) { return key(name.toString()); }
- bool visitKeys(function_ref<bool(QString, DomItem &)> visitor);
-
- QList<DomItem> values();
- void writeOutPre(OutWriter &lw);
- void writeOut(OutWriter &lw);
- void writeOutPost(OutWriter &lw);
- DomItem writeOutForFile(OutWriter &ow, WriteOutChecks extraChecks);
+ DomItem operator[](index_type i) const { return index(i); }
+ DomItem operator[](int i) const { return index(i); }
+ index_type size() const { return indexes() + keys().size(); }
+ index_type length() const { return size(); }
+
+ DomItem path(Path p, ErrorHandler h = &defaultErrorHandler) const;
+ DomItem path(QString p, ErrorHandler h = &defaultErrorHandler) const;
+ DomItem path(QStringView p, ErrorHandler h = &defaultErrorHandler) const;
+
+ QList<QString> fields() const;
+ DomItem field(QStringView name) const;
+
+ index_type indexes() const;
+ DomItem index(index_type) const;
+ bool visitIndexes(function_ref<bool(const DomItem &)> visitor) const;
+
+ QSet<QString> keys() const;
+ QStringList sortedKeys() const;
+ DomItem key(QString name) const;
+ DomItem key(QStringView name) const { return key(name.toString()); }
+ bool visitKeys(function_ref<bool(QString, const DomItem &)> visitor) const;
+
+ QList<DomItem> values() const;
+ void writeOutPre(OutWriter &lw) const;
+ void writeOut(OutWriter &lw) const;
+ void writeOutPost(OutWriter &lw) const;
+ DomItem writeOutForFile(OutWriter &ow, WriteOutChecks extraChecks) const;
DomItem writeOut(QString path, int nBackups = 2,
const LineWriterOptions &opt = LineWriterOptions(), FileWriter *fw = nullptr,
- WriteOutChecks extraChecks = WriteOutCheck::Default);
+ WriteOutChecks extraChecks = WriteOutCheck::Default) const;
bool visitTree(Path basePath, ChildrenVisitor visitor,
VisitOptions options = VisitOption::Default,
ChildrenVisitor openingVisitor = emptyChildrenVisitor,
- ChildrenVisitor closingVisitor = emptyChildrenVisitor);
- bool visitPrototypeChain(function_ref<bool(DomItem &)> visitor,
+ ChildrenVisitor closingVisitor = emptyChildrenVisitor) const;
+ bool visitPrototypeChain(function_ref<bool(const DomItem &)> visitor,
VisitPrototypesOptions options = VisitPrototypesOption::Normal,
ErrorHandler h = nullptr, QSet<quintptr> *visited = nullptr,
- QList<Path> *visitedRefs = nullptr);
- bool visitDirectAccessibleScopes(function_ref<bool(DomItem &)> visitor,
+ QList<Path> *visitedRefs = nullptr) const;
+ bool visitDirectAccessibleScopes(function_ref<bool(const DomItem &)> visitor,
VisitPrototypesOptions options = VisitPrototypesOption::Normal,
ErrorHandler h = nullptr, QSet<quintptr> *visited = nullptr,
- QList<Path> *visitedRefs = nullptr);
+ QList<Path> *visitedRefs = nullptr) const;
bool
- visitStaticTypePrototypeChains(function_ref<bool(DomItem &)> visitor,
+ visitStaticTypePrototypeChains(function_ref<bool(const DomItem &)> visitor,
VisitPrototypesOptions options = VisitPrototypesOption::Normal,
ErrorHandler h = nullptr, QSet<quintptr> *visited = nullptr,
- QList<Path> *visitedRefs = nullptr);
+ QList<Path> *visitedRefs = nullptr) const;
- bool visitUp(function_ref<bool(DomItem &)> visitor);
- bool visitScopeChain(function_ref<bool(DomItem &)> visitor,
+ bool visitUp(function_ref<bool(const DomItem &)> visitor) const;
+ bool visitScopeChain(function_ref<bool(const DomItem &)> visitor,
LookupOptions = LookupOption::Normal, ErrorHandler h = nullptr,
- QSet<quintptr> *visited = nullptr, QList<Path> *visitedRefs = nullptr);
- bool visitLocalSymbolsNamed(QString name, function_ref<bool(DomItem &)> visitor);
- QSet<QString> localSymbolNames(LocalSymbolsTypes lTypes = LocalSymbolsType::All);
- bool visitLookup1(QString symbolName, function_ref<bool(DomItem &)> visitor,
+ QSet<quintptr> *visited = nullptr, QList<Path> *visitedRefs = nullptr) const;
+ bool visitLocalSymbolsNamed(QString name, function_ref<bool(const DomItem &)> visitor) const;
+ QSet<QString> localSymbolNames(LocalSymbolsTypes lTypes = LocalSymbolsType::All) const;
+ bool visitLookup1(QString symbolName, function_ref<bool(const DomItem &)> visitor,
LookupOptions = LookupOption::Normal, ErrorHandler h = nullptr,
- QSet<quintptr> *visited = nullptr, QList<Path> *visitedRefs = nullptr);
- bool visitLookup(QString symbolName, function_ref<bool(DomItem &)> visitor,
+ QSet<quintptr> *visited = nullptr, QList<Path> *visitedRefs = nullptr) const;
+ bool visitLookup(QString symbolName, function_ref<bool(const DomItem &)> visitor,
LookupType type = LookupType::Symbol, LookupOptions = LookupOption::Normal,
ErrorHandler errorHandler = nullptr, QSet<quintptr> *visited = nullptr,
- QList<Path> *visitedRefs = nullptr);
- bool visitSubSymbolsNamed(QString name, function_ref<bool(DomItem &)> visitor);
- DomItem proceedToScope(ErrorHandler h = nullptr, QList<Path> *visitedRefs = nullptr);
+ QList<Path> *visitedRefs = nullptr) const;
+ bool visitSubSymbolsNamed(QString name, function_ref<bool(const DomItem &)> visitor) const;
+ DomItem proceedToScope(ErrorHandler h = nullptr, QList<Path> *visitedRefs = nullptr) const;
QList<DomItem> lookup(QString symbolName, LookupType type = LookupType::Symbol,
LookupOptions = LookupOption::Normal,
- ErrorHandler errorHandler = nullptr);
+ ErrorHandler errorHandler = nullptr) const;
DomItem lookupFirst(QString symbolName, LookupType type = LookupType::Symbol,
- LookupOptions = LookupOption::Normal, ErrorHandler errorHandler = nullptr);
-
- quintptr id();
- Path pathFromOwner();
- QString canonicalFilePath();
- DomItem fileLocationsTree();
- DomItem fileLocations();
- MutableDomItem makeCopy(CopyOption option = CopyOption::EnvConnected);
- bool commitToBase(std::shared_ptr<DomEnvironment> validPtr = nullptr);
- DomItem refreshed() { return top().path(canonicalPath()); }
- QCborValue value();
-
- void dumpPtr(Sink sink);
+ LookupOptions = LookupOption::Normal, ErrorHandler errorHandler = nullptr) const;
+
+ quintptr id() const;
+ Path pathFromOwner() const;
+ QString canonicalFilePath() const;
+ DomItem fileLocationsTree() const;
+ DomItem fileLocations() const;
+ MutableDomItem makeCopy(CopyOption option = CopyOption::EnvConnected) const;
+ bool commitToBase(std::shared_ptr<DomEnvironment> validPtr = nullptr) const;
+ DomItem refreshed() const { return top().path(canonicalPath()); }
+ QCborValue value() const;
+
+ void dumpPtr(Sink sink) const;
void dump(Sink, int indent = 0,
- function_ref<bool(DomItem &, const PathEls::PathComponent &, DomItem &)> filter =
- noFilter);
+ function_ref<bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)> filter =
+ noFilter) const;
FileWriter::Status
dump(QString path,
- function_ref<bool(DomItem &, const PathEls::PathComponent &, DomItem &)> filter = noFilter,
- int nBackups = 2, int indent = 0, FileWriter *fw = nullptr);
- QString toString();
- QString toString() const
- {
- DomItem self = *this;
- return self.toString();
- }
+ function_ref<bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)> filter = noFilter,
+ int nBackups = 2, int indent = 0, FileWriter *fw = nullptr) const;
+ QString toString() const;
// OwnigItem elements
- int derivedFrom();
- int revision();
- QDateTime createdAt();
- QDateTime frozenAt();
- QDateTime lastDataUpdateAt();
+ int derivedFrom() const;
+ int revision() const;
+ QDateTime createdAt() const;
+ QDateTime frozenAt() const;
+ QDateTime lastDataUpdateAt() const;
- void addError(ErrorMessage msg);
- ErrorHandler errorHandler();
- void clearErrors(ErrorGroups groups = ErrorGroups({}), bool iterate = true);
+ void addError(ErrorMessage msg) const;
+ ErrorHandler errorHandler() const;
+ void clearErrors(ErrorGroups groups = ErrorGroups({}), bool iterate = true) const;
// return false if a quick exit was requested
- bool iterateErrors(function_ref<bool(DomItem source, ErrorMessage msg)> visitor, bool iterate,
- Path inPath = Path());
+ bool iterateErrors(
+ function_ref<bool(const DomItem &source, ErrorMessage msg)> visitor, bool iterate,
+ Path inPath = Path()) const;
- bool iterateSubOwners(function_ref<bool(DomItem &owner)> visitor);
- bool iterateDirectSubpaths(DirectVisitor v);
+ bool iterateSubOwners(function_ref<bool(const DomItem &owner)> visitor) const;
+ bool iterateDirectSubpaths(DirectVisitor v) const;
template<typename T>
DomItem subDataItem(const PathEls::PathComponent &c, T value,
- ConstantData::Options options = ConstantData::Options::MapIsMap);
+ ConstantData::Options options = ConstantData::Options::MapIsMap) const;
template<typename T>
DomItem subDataItemField(QStringView f, T value,
- ConstantData::Options options = ConstantData::Options::MapIsMap)
+ ConstantData::Options options = ConstantData::Options::MapIsMap) const
{
return subDataItem(PathEls::Field(f), value, options);
}
template<typename T>
DomItem subValueItem(const PathEls::PathComponent &c, T value,
- ConstantData::Options options = ConstantData::Options::MapIsMap);
+ ConstantData::Options options = ConstantData::Options::MapIsMap) const;
template<typename T>
bool dvValue(DirectVisitor visitor, const PathEls::PathComponent &c, T value,
- ConstantData::Options options = ConstantData::Options::MapIsMap);
+ ConstantData::Options options = ConstantData::Options::MapIsMap) const;
template<typename T>
bool dvValueField(DirectVisitor visitor, QStringView f, T value,
- ConstantData::Options options = ConstantData::Options::MapIsMap)
+ ConstantData::Options options = ConstantData::Options::MapIsMap) const
{
return this->dvValue<T>(visitor, PathEls::Field(f), value, options);
}
template<typename F>
bool dvValueLazy(DirectVisitor visitor, const PathEls::PathComponent &c, F valueF,
- ConstantData::Options options = ConstantData::Options::MapIsMap);
+ ConstantData::Options options = ConstantData::Options::MapIsMap) const;
template<typename F>
bool dvValueLazyField(DirectVisitor visitor, QStringView f, F valueF,
- ConstantData::Options options = ConstantData::Options::MapIsMap)
+ ConstantData::Options options = ConstantData::Options::MapIsMap) const
{
return this->dvValueLazy(visitor, PathEls::Field(f), valueF, options);
}
DomItem subLocationItem(const PathEls::PathComponent &c, SourceLocation loc,
- QStringView code = QStringView())
+ QStringView code = QStringView()) const
{
return this->subDataItem(c, locationToData(loc, code));
}
// bool dvSubReference(DirectVisitor visitor, const PathEls::PathComponent &c, Path
// referencedObject);
- DomItem subReferencesItem(const PathEls::PathComponent &c, QList<Path> paths);
- DomItem subReferenceItem(const PathEls::PathComponent &c, Path referencedObject);
- bool dvReference(DirectVisitor visitor, const PathEls::PathComponent &c, Path referencedObject)
+ DomItem subReferencesItem(const PathEls::PathComponent &c, QList<Path> paths) const;
+ DomItem subReferenceItem(const PathEls::PathComponent &c, Path referencedObject) const;
+ bool dvReference(DirectVisitor visitor, const PathEls::PathComponent &c, Path referencedObject) const
{
return dvItem(visitor, c, [c, this, referencedObject]() {
return this->subReferenceItem(c, referencedObject);
});
}
- bool dvReferences(DirectVisitor visitor, const PathEls::PathComponent &c, QList<Path> paths)
+ bool dvReferences(DirectVisitor visitor, const PathEls::PathComponent &c, QList<Path> paths) const
{
return dvItem(visitor, c, [c, this, paths]() { return this->subReferencesItem(c, paths); });
}
- bool dvReferenceField(DirectVisitor visitor, QStringView f, Path referencedObject)
+ bool dvReferenceField(DirectVisitor visitor, QStringView f, Path referencedObject) const
{
return dvReference(visitor, PathEls::Field(f), referencedObject);
}
- bool dvReferencesField(DirectVisitor visitor, QStringView f, QList<Path> paths)
+ bool dvReferencesField(DirectVisitor visitor, QStringView f, QList<Path> paths) const
{
return dvReferences(visitor, PathEls::Field(f), paths);
}
- bool dvItem(DirectVisitor visitor, const PathEls::PathComponent &c, function_ref<DomItem()> it)
+ bool dvItem(DirectVisitor visitor, const PathEls::PathComponent &c, function_ref<DomItem()> it) const
{
return visitor(c, it);
}
- bool dvItemField(DirectVisitor visitor, QStringView f, function_ref<DomItem()> it)
+ bool dvItemField(DirectVisitor visitor, QStringView f, function_ref<DomItem()> it) const
{
return dvItem(visitor, PathEls::Field(f), it);
}
- DomItem subListItem(const List &list);
- DomItem subMapItem(const Map &map);
- DomItem subObjectWrapItem(SimpleObjectWrap obj)
+ DomItem subListItem(const List &list) const;
+ DomItem subMapItem(const Map &map) const;
+ DomItem subObjectWrapItem(SimpleObjectWrap obj) const
{
return DomItem(m_top, m_owner, m_ownerPath, obj);
}
- DomItem subScriptElementWrapperItem(const ScriptElementVariant &obj)
+ DomItem subScriptElementWrapperItem(const ScriptElementVariant &obj) const
{
Q_ASSERT(obj);
return DomItem(m_top, m_owner, m_ownerPath, ScriptElementDomWrapper(obj));
}
template<typename Owner>
- DomItem subOwnerItem(const PathEls::PathComponent &c, Owner o)
+ DomItem subOwnerItem(const PathEls::PathComponent &c, Owner o) const
{
if constexpr (domTypeIsUnattachedOwningItem(Owner::element_type::kindValue))
return DomItem(m_top, o, canonicalPath().appendComponent(c), o.get());
@@ -1188,16 +1167,16 @@ public:
return DomItem(m_top, o, Path(), o.get());
}
template<typename T>
- DomItem wrap(const PathEls::PathComponent &c, T &obj);
+ DomItem wrap(const PathEls::PathComponent &c, const T &obj) const;
template<typename T>
- DomItem wrapField(QStringView f, T &obj)
+ DomItem wrapField(QStringView f, const T &obj) const
{
return wrap<T>(PathEls::Field(f), obj);
}
template<typename T>
- bool dvWrap(DirectVisitor visitor, const PathEls::PathComponent &c, T &obj);
+ bool dvWrap(DirectVisitor visitor, const PathEls::PathComponent &c, T &obj) const;
template<typename T>
- bool dvWrapField(DirectVisitor visitor, QStringView f, T &obj)
+ bool dvWrapField(DirectVisitor visitor, QStringView f, T &obj) const
{
return dvWrap<T>(visitor, PathEls::Field(f), obj);
}
@@ -1207,24 +1186,24 @@ public:
DomItem(std::shared_ptr<DomUniverse>);
static DomItem fromCode(QString code, DomType fileType = DomType::QmlFile);
- void loadFile(const FileToLoad &file, std::function<void(Path, DomItem &, DomItem &)> callback,
+ void loadFile(const FileToLoad &file, std::function<void(Path, const DomItem &, const DomItem &)> callback,
LoadOptions loadOptions,
- std::optional<DomType> fileType = std::optional<DomType>());
+ std::optional<DomType> fileType = std::optional<DomType>()) const;
void loadModuleDependency(QString uri, Version v,
- std::function<void(Path, DomItem &, DomItem &)> callback = nullptr,
- ErrorHandler = nullptr);
- void loadBuiltins(std::function<void(Path, DomItem &, DomItem &)> callback = nullptr,
- ErrorHandler = nullptr);
- void loadPendingDependencies();
+ std::function<void(Path, const DomItem &, const DomItem &)> callback = nullptr,
+ ErrorHandler = nullptr) const;
+ void loadBuiltins(std::function<void(Path, const DomItem &, const DomItem &)> callback = nullptr,
+ ErrorHandler = nullptr) const;
+ void loadPendingDependencies() const;
// --- start of potentially dangerous stuff, make private? ---
- std::shared_ptr<DomTop> topPtr();
- std::shared_ptr<OwningItem> owningItemPtr();
+ std::shared_ptr<DomTop> topPtr() const;
+ std::shared_ptr<OwningItem> owningItemPtr() const;
// keep the DomItem around to ensure that it doesn't get deleted
template<typename T, typename std::enable_if<std::is_base_of_v<DomBase, T>, bool>::type = true>
- T const *as()
+ T const *as() const
{
if (m_kind == T::kindValue) {
if constexpr (domTypeIsObjWrap(T::kindValue) || domTypeIsValueWrap(T::kindValue))
@@ -1236,7 +1215,7 @@ public:
}
template<typename T, typename std::enable_if<!std::is_base_of_v<DomBase, T>, bool>::type = true>
- T const *as()
+ T const *as() const
{
if (m_kind == T::kindValue) {
Q_ASSERT(domTypeIsObjWrap(m_kind) || domTypeIsValueWrap(m_kind));
@@ -1246,10 +1225,10 @@ public:
}
template<typename T>
- std::shared_ptr<T> ownerAs();
+ std::shared_ptr<T> ownerAs() const;
template<typename Owner, typename T>
- DomItem copy(Owner owner, Path ownerPath, T base)
+ DomItem copy(Owner owner, Path ownerPath, T base) const
{
Q_ASSERT(m_top);
static_assert(IsInlineDom<std::decay_t<T>>::value, "Expected an inline item or pointer");
@@ -1257,14 +1236,14 @@ public:
}
template<typename Owner>
- DomItem copy(Owner owner, Path ownerPath)
+ DomItem copy(Owner owner, Path ownerPath) const
{
Q_ASSERT(m_top);
return DomItem(m_top, owner, ownerPath, owner.get());
}
template<typename T>
- DomItem copy(T base)
+ DomItem copy(T base) const
{
Q_ASSERT(m_top);
using BaseT = std::decay_t<T>;
@@ -1280,28 +1259,8 @@ public:
private:
enum class WriteOutCheckResult { Success, Failed };
- WriteOutCheckResult performWriteOutChecks(DomItem &, DomItem &, OutWriter &, WriteOutChecks);
- DomBase const *base() const;
- template <typename T, typename std::enable_if<std::is_base_of<DomBase, T>::value, bool>::type = true>
- T *mutableAs() {
- if (m_kind == T::kindValue) {
- if constexpr (domTypeIsObjWrap(T::kindValue) || domTypeIsValueWrap(T::kindValue))
- return static_cast<SimpleObjectWrapBase *>(mutableBase())->mutableAs<T>();
- else
- return static_cast<T *>(mutableBase());
- }
- return nullptr;
- }
-
- template <typename T, typename std::enable_if<!std::is_base_of<DomBase, T>::value, bool>::type = true>
- T *mutableAs() {
- if (m_kind == T::kindValue) {
- Q_ASSERT(domTypeIsObjWrap(m_kind) || domTypeIsValueWrap(m_kind));
- return static_cast<SimpleObjectWrapBase *>(mutableBase())->mutableAs<T>();
- }
- return nullptr;
- }
- DomBase *mutableBase();
+ WriteOutCheckResult performWriteOutChecks(const DomItem &, const DomItem &, OutWriter &, WriteOutChecks) const;
+ const DomBase *base() const;
template<typename Env, typename Owner>
DomItem(Env, Owner, Path, std::nullptr_t) : DomItem()
@@ -1363,18 +1322,18 @@ inline bool operator!=(const DomItem &o1, const DomItem &o2)
}
template<typename T>
-Map Map::fromMultiMapRef(Path pathFromOwner, QMultiMap<QString, T> &mmap)
+Map Map::fromMultiMapRef(Path pathFromOwner, const QMultiMap<QString, T> &mmap)
{
return Map(
pathFromOwner,
- [&mmap](DomItem &self, QString key) {
+ [&mmap](const DomItem &self, QString key) {
auto it = mmap.find(key);
auto end = mmap.cend();
if (it == end)
return DomItem();
else {
// special case single element (++it == end || it.key() != key)?
- QList<T *> values;
+ QList<const T *> values;
while (it != end && it.key() == key)
values.append(&(*it++));
ListP ll(self.pathFromOwner().appendComponent(PathEls::Key(key)), values,
@@ -1382,88 +1341,87 @@ Map Map::fromMultiMapRef(Path pathFromOwner, QMultiMap<QString, T> &mmap)
return self.copy(ll);
}
},
- [&mmap](DomItem &) { return QSet<QString>(mmap.keyBegin(), mmap.keyEnd()); },
+ [&mmap](const DomItem &) { return QSet<QString>(mmap.keyBegin(), mmap.keyEnd()); },
QLatin1String(typeid(T).name()));
}
template<typename T>
Map Map::fromMapRef(
- Path pathFromOwner, QMap<QString, T> &map,
- std::function<DomItem(DomItem &, const PathEls::PathComponent &, T &)> elWrapper)
+ Path pathFromOwner, const QMap<QString, T> &map,
+ std::function<DomItem(const DomItem &, const PathEls::PathComponent &, const T &)> elWrapper)
{
return Map(
pathFromOwner,
- [&map, elWrapper](DomItem &self, QString key) {
- if (!map.contains(key))
+ [&map, elWrapper](const DomItem &self, QString key) {
+ const auto it = map.constFind(key);
+ if (it == map.constEnd())
return DomItem();
- else {
- return elWrapper(self, PathEls::Key(key), map[key]);
- }
+ return elWrapper(self, PathEls::Key(key), it.value());
},
- [&map](DomItem &) { return QSet<QString>(map.keyBegin(), map.keyEnd()); },
+ [&map](const DomItem &) { return QSet<QString>(map.keyBegin(), map.keyEnd()); },
QLatin1String(typeid(T).name()));
}
template<typename T>
List List::fromQList(
Path pathFromOwner, QList<T> list,
- std::function<DomItem(DomItem &, const PathEls::PathComponent &, T &)> elWrapper,
+ std::function<DomItem(const DomItem &, const PathEls::PathComponent &, const T &)> elWrapper,
ListOptions options)
{
index_type len = list.size();
if (options == ListOptions::Reverse) {
return List(
pathFromOwner,
- [list, elWrapper](DomItem &self, index_type i) mutable {
+ [list, elWrapper](const DomItem &self, index_type i) mutable {
if (i < 0 || i >= list.size())
return DomItem();
return elWrapper(self, PathEls::Index(i), list[list.size() - i - 1]);
},
- [len](DomItem &) { return len; }, nullptr, QLatin1String(typeid(T).name()));
+ [len](const DomItem &) { return len; }, nullptr, QLatin1String(typeid(T).name()));
} else {
return List(
pathFromOwner,
- [list, elWrapper](DomItem &self, index_type i) mutable {
+ [list, elWrapper](const DomItem &self, index_type i) mutable {
if (i < 0 || i >= list.size())
return DomItem();
return elWrapper(self, PathEls::Index(i), list[i]);
},
- [len](DomItem &) { return len; }, nullptr, QLatin1String(typeid(T).name()));
+ [len](const DomItem &) { return len; }, nullptr, QLatin1String(typeid(T).name()));
}
}
template<typename T>
List List::fromQListRef(
- Path pathFromOwner, QList<T> &list,
- std::function<DomItem(DomItem &, const PathEls::PathComponent &, T &)> elWrapper,
+ Path pathFromOwner, const QList<T> &list,
+ std::function<DomItem(const DomItem &, const PathEls::PathComponent &, const T &)> elWrapper,
ListOptions options)
{
if (options == ListOptions::Reverse) {
return List(
pathFromOwner,
- [&list, elWrapper](DomItem &self, index_type i) {
+ [&list, elWrapper](const DomItem &self, index_type i) {
if (i < 0 || i >= list.size())
return DomItem();
return elWrapper(self, PathEls::Index(i), list[list.size() - i - 1]);
},
- [&list](DomItem &) { return list.size(); }, nullptr,
+ [&list](const DomItem &) { return list.size(); }, nullptr,
QLatin1String(typeid(T).name()));
} else {
return List(
pathFromOwner,
- [&list, elWrapper](DomItem &self, index_type i) {
+ [&list, elWrapper](const DomItem &self, index_type i) {
if (i < 0 || i >= list.size())
return DomItem();
return elWrapper(self, PathEls::Index(i), list[i]);
},
- [&list](DomItem &) { return list.size(); }, nullptr,
+ [&list](const DomItem &) { return list.size(); }, nullptr,
QLatin1String(typeid(T).name()));
}
}
class QMLDOM_EXPORT OwningItem: public DomBase {
protected:
- virtual std::shared_ptr<OwningItem> doCopy(DomItem &self) const = 0;
+ virtual std::shared_ptr<OwningItem> doCopy(const DomItem &self) const = 0;
public:
OwningItem(const OwningItem &o);
@@ -1473,13 +1431,13 @@ public:
OwningItem &operator=(const OwningItem &&) = delete;
static int nextRevision();
- Path canonicalPath(DomItem &self) const override = 0;
+ Path canonicalPath(const DomItem &self) const override = 0;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor) override;
- std::shared_ptr<OwningItem> makeCopy(DomItem &self) const { return doCopy(self); }
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override;
+ std::shared_ptr<OwningItem> makeCopy(const DomItem &self) const { return doCopy(self); }
Path pathFromOwner() const { return Path(); }
- Path pathFromOwner(DomItem &) const override final { return Path(); }
- DomItem containingObject(DomItem &self) const override;
+ Path pathFromOwner(const DomItem &) const override final { return Path(); }
+ DomItem containingObject(const DomItem &self) const override;
int derivedFrom() const;
virtual int revision() const;
@@ -1492,18 +1450,20 @@ public:
virtual bool freeze();
QDateTime frozenAt() const;
- virtual void addError(DomItem &self, ErrorMessage msg);
+ virtual void addError(const DomItem &self, ErrorMessage msg);
void addErrorLocal(ErrorMessage msg);
void clearErrors(ErrorGroups groups = ErrorGroups({}));
// return false if a quick exit was requested
- bool iterateErrors(DomItem &self, function_ref<bool(DomItem source, ErrorMessage msg)> visitor,
- Path inPath = Path());
+ bool iterateErrors(
+ const DomItem &self,
+ function_ref<bool(const DomItem &source, ErrorMessage msg)> visitor,
+ Path inPath = Path());
QMultiMap<Path, ErrorMessage> localErrors() const {
QMutexLocker l(mutex());
return m_errors;
}
- virtual bool iterateSubOwners(DomItem &self, function_ref<bool(DomItem &owner)> visitor);
+ virtual bool iterateSubOwners(const DomItem &self, function_ref<bool(const DomItem &owner)> visitor);
QBasicMutex *mutex() const { return &m_mutex; }
private:
@@ -1518,7 +1478,7 @@ private:
};
template<typename T>
-std::shared_ptr<T> DomItem::ownerAs()
+std::shared_ptr<T> DomItem::ownerAs() const
{
if constexpr (domTypeIsOwningItem(T::kindValue)) {
if (m_owner) {
@@ -1557,26 +1517,26 @@ struct rank<0>
};
template<typename T>
-auto writeOutWrap(const T &t, DomItem &self, OutWriter &lw, rank<1>)
+auto writeOutWrap(const T &t, const DomItem &self, OutWriter &lw, rank<1>)
-> decltype(t.writeOut(self, lw))
{
t.writeOut(self, lw);
}
template<typename T>
-auto writeOutWrap(const T &, DomItem &, OutWriter &, rank<0>) -> void
+auto writeOutWrap(const T &, const DomItem &, OutWriter &, rank<0>) -> void
{
qCWarning(writeOutLog) << "Ignoring writeout to wrapped object not supporting it ("
<< typeid(T).name();
}
template<typename T>
-auto writeOutWrap(const T &t, DomItem &self, OutWriter &lw) -> void
+auto writeOutWrap(const T &t, const DomItem &self, OutWriter &lw) -> void
{
writeOutWrap(t, self, lw, rank<1>());
}
template<typename T>
-void SimpleObjectWrapT<T>::writeOut(DomItem &self, OutWriter &lw) const
+void SimpleObjectWrapT<T>::writeOut(const DomItem &self, OutWriter &lw) const
{
writeOutWrap<T>(*asT(), self, lw);
}
@@ -1595,7 +1555,7 @@ public:
QString internalKindStr() { return domTypeToString(internalKind()); }
DomKind domKind() { return kind2domKind(internalKind()); }
- Path canonicalPath() { return m_owner.canonicalPath().path(m_pathFromOwner); }
+ Path canonicalPath() const { return m_owner.canonicalPath().path(m_pathFromOwner); }
MutableDomItem containingObject()
{
if (m_pathFromOwner)
@@ -1668,13 +1628,13 @@ public:
void
dump(Sink s, int indent = 0,
- function_ref<bool(DomItem &, const PathEls::PathComponent &, DomItem &)> filter = noFilter)
+ function_ref<bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)> filter = noFilter)
{
item().dump(s, indent, filter);
}
FileWriter::Status
dump(QString path,
- function_ref<bool(DomItem &, const PathEls::PathComponent &, DomItem &)> filter = noFilter,
+ function_ref<bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)> filter = noFilter,
int nBackups = 2, int indent = 0, FileWriter *fw = nullptr)
{
return item().dump(path, filter, nBackups, indent, fw);
@@ -1696,7 +1656,7 @@ public:
{
return item().commitToBase(validEnvPtr);
}
- QString canonicalFilePath() { return item().canonicalFilePath(); }
+ QString canonicalFilePath() const { return item().canonicalFilePath(); }
MutableDomItem refreshed() { return MutableDomItem(item().refreshed()); }
@@ -1775,16 +1735,30 @@ public:
template <typename T>
T *mutableAs() {
Q_ASSERT(!m_owner || !m_owner.owningItemPtr()->frozen());
- return item().mutableAs<T>();
+
+ DomItem self = item();
+ if (self.m_kind != T::kindValue)
+ return nullptr;
+
+ const T *t = nullptr;
+ if constexpr (domTypeIsObjWrap(T::kindValue) || domTypeIsValueWrap(T::kindValue))
+ t = static_cast<const SimpleObjectWrapBase *>(self.base())->as<T>();
+ else if constexpr (std::is_base_of<DomBase, T>::value)
+ t = static_cast<const T *>(self.base());
+ else
+ Q_UNREACHABLE_RETURN(nullptr);
+
+ // Nasty. But since ElementT has to store the const pointers, we allow it in this one place.
+ return const_cast<T *>(t);
}
template<typename T>
- std::shared_ptr<T> ownerAs()
+ std::shared_ptr<T> ownerAs() const
{
return m_owner.ownerAs<T>();
}
// it is dangerous to assume it stays valid when updates are preformed...
- DomItem item() { return m_owner.path(m_pathFromOwner); }
+ DomItem item() const { return m_owner.path(m_pathFromOwner); }
friend bool operator==(const MutableDomItem o1, const MutableDomItem &o2)
{
@@ -2002,7 +1976,7 @@ constexpr bool domTypeIsScriptElement(DomType k)
template<typename T>
DomItem DomItem::subValueItem(const PathEls::PathComponent &c, T value,
- ConstantData::Options options)
+ ConstantData::Options options) const
{
using BaseT = std::remove_cv_t<std::remove_reference_t<T>>;
if constexpr (
@@ -2017,8 +1991,8 @@ DomItem DomItem::subValueItem(const PathEls::PathComponent &c, T value,
} else if constexpr (IsList<T>::value && !std::is_convertible_v<BaseT, QStringView>) {
return subListItem(List::fromQList<typename BaseT::value_type>(
pathFromOwner().appendComponent(c), value,
- [options](DomItem &list, const PathEls::PathComponent &p,
- typename T::value_type &v) { return list.subValueItem(p, v, options); }));
+ [options](const DomItem &list, const PathEls::PathComponent &p,
+ const typename T::value_type &v) { return list.subValueItem(p, v, options); }));
} else if constexpr (IsSharedPointerToDomObject<BaseT>::value) {
Q_UNUSED(options);
return subOwnerItem(c, value);
@@ -2029,7 +2003,7 @@ DomItem DomItem::subValueItem(const PathEls::PathComponent &c, T value,
template<typename T>
DomItem DomItem::subDataItem(const PathEls::PathComponent &c, T value,
- ConstantData::Options options)
+ ConstantData::Options options) const
{
using BaseT = std::remove_cv_t<std::remove_reference_t<T>>;
if constexpr (std::is_same_v<BaseT, ConstantData>) {
@@ -2046,7 +2020,7 @@ DomItem DomItem::subDataItem(const PathEls::PathComponent &c, T value,
template<typename T>
bool DomItem::dvValue(DirectVisitor visitor, const PathEls::PathComponent &c, T value,
- ConstantData::Options options)
+ ConstantData::Options options) const
{
auto lazyWrap = [this, &c, &value, options]() {
return this->subValueItem<T>(c, value, options);
@@ -2056,7 +2030,7 @@ bool DomItem::dvValue(DirectVisitor visitor, const PathEls::PathComponent &c, T
template<typename F>
bool DomItem::dvValueLazy(DirectVisitor visitor, const PathEls::PathComponent &c, F valueF,
- ConstantData::Options options)
+ ConstantData::Options options) const
{
auto lazyWrap = [this, &c, &valueF, options]() {
return this->subValueItem<decltype(valueF())>(c, valueF(), options);
@@ -2065,7 +2039,7 @@ bool DomItem::dvValueLazy(DirectVisitor visitor, const PathEls::PathComponent &c
}
template<typename T>
-DomItem DomItem::wrap(const PathEls::PathComponent &c, T &obj)
+DomItem DomItem::wrap(const PathEls::PathComponent &c, const T &obj) const
{
using BaseT = std::decay_t<T>;
if constexpr (std::is_same_v<QString, BaseT> || std::is_arithmetic_v<BaseT>) {
@@ -2116,8 +2090,8 @@ DomItem DomItem::wrap(const PathEls::PathComponent &c, T &obj)
if constexpr (std::is_same_v<typename BaseT::key_type, QString>) {
return subMapItem(Map::fromMapRef<typename BaseT::mapped_type>(
pathFromOwner().appendComponent(c), obj,
- [](DomItem &map, const PathEls::PathComponent &p,
- typename BaseT::mapped_type &el) { return map.wrap(p, el); }));
+ [](const DomItem &map, const PathEls::PathComponent &p,
+ const typename BaseT::mapped_type &el) { return map.wrap(p, el); }));
} else {
Q_ASSERT_X(false, "DomItem::wrap", "non string keys not supported (try .toString()?)");
}
@@ -2125,8 +2099,8 @@ DomItem DomItem::wrap(const PathEls::PathComponent &c, T &obj)
if constexpr (IsDomObject<typename BaseT::value_type>::value) {
return subListItem(List::fromQListRef<typename BaseT::value_type>(
pathFromOwner().appendComponent(c), obj,
- [](DomItem &list, const PathEls::PathComponent &p,
- typename BaseT::value_type &el) { return list.wrap(p, el); }));
+ [](const DomItem &list, const PathEls::PathComponent &p,
+ const typename BaseT::value_type &el) { return list.wrap(p, el); }));
} else {
Q_ASSERT_X(false, "DomItem::wrap", "Unsupported list type T");
return DomItem();
@@ -2139,14 +2113,14 @@ DomItem DomItem::wrap(const PathEls::PathComponent &c, T &obj)
}
template<typename T>
-bool DomItem::dvWrap(DirectVisitor visitor, const PathEls::PathComponent &c, T &obj)
+bool DomItem::dvWrap(DirectVisitor visitor, const PathEls::PathComponent &c, T &obj) const
{
auto lazyWrap = [this, &c, &obj]() { return this->wrap<T>(c, obj); };
return visitor(c, lazyWrap);
}
template<typename T>
-bool ListPT<T>::iterateDirectSubpaths(DomItem &self, DirectVisitor v)
+bool ListPT<T>::iterateDirectSubpaths(const DomItem &self, DirectVisitor v) const
{
index_type len = index_type(m_pList.size());
for (index_type i = 0; i < len; ++i) {
@@ -2157,10 +2131,10 @@ bool ListPT<T>::iterateDirectSubpaths(DomItem &self, DirectVisitor v)
}
template<typename T>
-DomItem ListPT<T>::index(DomItem &self, index_type index) const
+DomItem ListPT<T>::index(const DomItem &self, index_type index) const
{
if (index >= 0 && index < m_pList.size())
- return self.wrap(PathEls::Index(index), *reinterpret_cast<T *>(m_pList.value(index)));
+ return self.wrap(PathEls::Index(index), *static_cast<const T *>(m_pList.value(index)));
return DomItem();
}
@@ -2170,13 +2144,13 @@ inline DomKind DomBase::domKind() const
return kind2domKind(kind());
}
-inline bool DomBase::iterateDirectSubpathsConst(DomItem &self, DirectVisitor visitor) const
+inline bool DomBase::iterateDirectSubpathsConst(const DomItem &self, DirectVisitor visitor) const
{
Q_ASSERT(self.base() == this);
return self.iterateDirectSubpaths(visitor);
}
-inline DomItem DomBase::containingObject(DomItem &self) const
+inline DomItem DomBase::containingObject(const DomItem &self) const
{
Path path = pathFromOwner(self);
DomItem base = self.owner();
@@ -2198,7 +2172,7 @@ inline QString DomBase::typeName() const
return domTypeToString(kind());
}
-inline QList<QString> DomBase::fields(DomItem &self) const
+inline QList<QString> DomBase::fields(const DomItem &self) const
{
QList<QString> res;
self.iterateDirectSubpaths([&res](const PathEls::PathComponent &c, function_ref<DomItem()>) {
@@ -2209,7 +2183,7 @@ inline QList<QString> DomBase::fields(DomItem &self) const
return res;
}
-inline DomItem DomBase::field(DomItem &self, QStringView name) const
+inline DomItem DomBase::field(const DomItem &self, QStringView name) const
{
DomItem res;
self.iterateDirectSubpaths(
@@ -2223,7 +2197,7 @@ inline DomItem DomBase::field(DomItem &self, QStringView name) const
return res;
}
-inline index_type DomBase::indexes(DomItem &self) const
+inline index_type DomBase::indexes(const DomItem &self) const
{
index_type res = 0;
self.iterateDirectSubpaths([&res](const PathEls::PathComponent &c, function_ref<DomItem()>) {
@@ -2237,7 +2211,7 @@ inline index_type DomBase::indexes(DomItem &self) const
return res;
}
-inline DomItem DomBase::index(DomItem &self, qint64 index) const
+inline DomItem DomBase::index(const DomItem &self, qint64 index) const
{
DomItem res;
self.iterateDirectSubpaths(
@@ -2251,7 +2225,7 @@ inline DomItem DomBase::index(DomItem &self, qint64 index) const
return res;
}
-inline QSet<QString> const DomBase::keys(DomItem &self) const
+inline QSet<QString> const DomBase::keys(const DomItem &self) const
{
QSet<QString> res;
self.iterateDirectSubpaths([&res](const PathEls::PathComponent &c, function_ref<DomItem()>) {
@@ -2262,7 +2236,7 @@ inline QSet<QString> const DomBase::keys(DomItem &self) const
return res;
}
-inline DomItem DomBase::key(DomItem &self, QString name) const
+inline DomItem DomBase::key(const DomItem &self, QString name) const
{
DomItem res;
self.iterateDirectSubpaths(
@@ -2276,12 +2250,12 @@ inline DomItem DomBase::key(DomItem &self, QString name) const
return res;
}
-inline DomItem DomItem::subListItem(const List &list)
+inline DomItem DomItem::subListItem(const List &list) const
{
return DomItem(m_top, m_owner, m_ownerPath, list);
}
-inline DomItem DomItem::subMapItem(const Map &map)
+inline DomItem DomItem::subMapItem(const Map &map) const
{
return DomItem(m_top, m_owner, m_ownerPath, map);
}
diff --git a/src/qmldom/qqmldommock.cpp b/src/qmldom/qqmldommock.cpp
index 84f9452f9d..5bfc7ad7ce 100644
--- a/src/qmldom/qqmldommock.cpp
+++ b/src/qmldom/qqmldommock.cpp
@@ -32,7 +32,7 @@ std::pair<QString, MockObject> MockObject::asStringPair() const
return std::make_pair(pathFromOwner().last().headName(), *this);
}
-bool MockObject::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool MockObject::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
static QHash<QString, QString> knownFields;
static QBasicMutex m;
@@ -60,7 +60,7 @@ bool MockObject::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return cont;
}
-std::shared_ptr<OwningItem> MockOwner::doCopy(DomItem &) const
+std::shared_ptr<OwningItem> MockOwner::doCopy(const DomItem &) const
{
return std::make_shared<MockOwner>(*this);
}
@@ -77,17 +77,17 @@ MockOwner::MockOwner(const MockOwner &o)
}
}
-std::shared_ptr<MockOwner> MockOwner::makeCopy(DomItem &self) const
+std::shared_ptr<MockOwner> MockOwner::makeCopy(const DomItem &self) const
{
return std::static_pointer_cast<MockOwner>(doCopy(self));
}
-Path MockOwner::canonicalPath(DomItem &) const
+Path MockOwner::canonicalPath(const DomItem &) const
{
return pathFromTop;
}
-bool MockOwner::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool MockOwner::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
static QHash<QString, QString> knownFields;
static QBasicMutex m;
diff --git a/src/qmldom/qqmldommock_p.h b/src/qmldom/qqmldommock_p.h
index b35d4d2e1c..459bfaccf2 100644
--- a/src/qmldom/qqmldommock_p.h
+++ b/src/qmldom/qqmldommock_p.h
@@ -52,7 +52,7 @@ public:
MockObject copy() const;
std::pair<QString, MockObject> asStringPair() const;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override;
QMap<QString, MockObject> subObjects;
QMap<QString, QCborValue> subValues;
@@ -62,7 +62,7 @@ public:
class MockOwner final : public OwningItem
{
protected:
- std::shared_ptr<OwningItem> doCopy(DomItem &self) const override;
+ std::shared_ptr<OwningItem> doCopy(const DomItem &self) const override;
public:
constexpr static DomType kindValue = DomType::MockOwner;
@@ -94,10 +94,10 @@ public:
MockOwner(const MockOwner &o);
- std::shared_ptr<MockOwner> makeCopy(DomItem &self) const;
- Path canonicalPath(DomItem &self) const override;
+ std::shared_ptr<MockOwner> makeCopy(const DomItem &self) const;
+ Path canonicalPath(const DomItem &self) const override;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override;
Path pathFromTop;
QMap<QString, MockObject> subObjects;
diff --git a/src/qmldom/qqmldommoduleindex.cpp b/src/qmldom/qqmldommoduleindex.cpp
index 9a638adead..3f78e9144f 100644
--- a/src/qmldom/qqmldommoduleindex.cpp
+++ b/src/qmldom/qqmldommoduleindex.cpp
@@ -27,7 +27,7 @@ static ErrorGroups myExportErrors()
return res;
}
-bool ModuleScope::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool ModuleScope::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && self.dvValueField(visitor, Fields::uri, uri);
@@ -36,19 +36,19 @@ bool ModuleScope::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
int minorVersion = version.minorVersion;
return self.subMapItem(Map(
self.pathFromOwner().field(Fields::exports),
- [minorVersion](DomItem &mapExp, QString name) -> DomItem {
+ [minorVersion](const DomItem &mapExp, QString name) -> DomItem {
DomItem mapExpOw = mapExp.owner();
QList<DomItem> exports =
mapExp.ownerAs<ModuleIndex>()->exportsWithNameAndMinorVersion(
mapExpOw, name, minorVersion);
return mapExp.subListItem(List::fromQList<DomItem>(
mapExp.pathFromOwner().key(name), exports,
- [](DomItem &, const PathEls::PathComponent &, DomItem &el) {
+ [](const DomItem &, const PathEls::PathComponent &, const DomItem &el) {
return el;
},
ListOptions::Normal));
},
- [](DomItem &mapExp) {
+ [](const DomItem &mapExp) {
DomItem mapExpOw = mapExp.owner();
return mapExp.ownerAs<ModuleIndex>()->exportNames(mapExpOw);
},
@@ -58,11 +58,11 @@ bool ModuleScope::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
Path basePath = Path::Current(PathCurrent::Obj).field(Fields::exports);
return self.subMapItem(Map(
self.pathFromOwner().field(Fields::symbols),
- [basePath](DomItem &mapExp, QString name) -> DomItem {
+ [basePath](const DomItem &mapExp, QString name) -> DomItem {
QList<Path> symb({ basePath.key(name) });
return mapExp.subReferencesItem(PathEls::Key(name), symb);
},
- [](DomItem &mapExp) {
+ [](const DomItem &mapExp) {
DomItem mapExpOw = mapExp.owner();
return mapExp.ownerAs<ModuleIndex>()->exportNames(mapExpOw);
},
@@ -74,7 +74,7 @@ bool ModuleScope::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return cont;
}
-std::shared_ptr<OwningItem> ModuleIndex::doCopy(DomItem &) const
+std::shared_ptr<OwningItem> ModuleIndex::doCopy(const DomItem &) const
{
return std::make_shared<ModuleIndex>(*this);
}
@@ -114,14 +114,14 @@ ModuleIndex::~ModuleIndex()
}
}
-bool ModuleIndex::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool ModuleIndex::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = self.dvValueField(visitor, Fields::uri, uri());
cont = cont && self.dvValueField(visitor, Fields::majorVersion, majorVersion());
cont = cont && self.dvItemField(visitor, Fields::moduleScope, [this, &self]() {
return self.subMapItem(Map(
pathFromOwner(self).field(Fields::moduleScope),
- [](DomItem &map, QString minorVersionStr) {
+ [](const DomItem &map, QString minorVersionStr) {
bool ok;
int minorVersion = minorVersionStr.toInt(&ok);
if (minorVersionStr.isEmpty()
@@ -131,7 +131,7 @@ bool ModuleIndex::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return DomItem();
return map.copy(map.ownerAs<ModuleIndex>()->ensureMinorVersion(minorVersion));
},
- [this](DomItem &) {
+ [this](const DomItem &) {
QSet<QString> res;
for (int el : minorVersions())
if (el >= 0)
@@ -151,7 +151,7 @@ bool ModuleIndex::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return cont;
}
-QSet<QString> ModuleIndex::exportNames(DomItem &self) const
+QSet<QString> ModuleIndex::exportNames(const DomItem &self) const
{
QSet<QString> res;
QList<Path> mySources = sources();
@@ -162,7 +162,7 @@ QSet<QString> ModuleIndex::exportNames(DomItem &self) const
return res;
}
-QList<DomItem> ModuleIndex::autoExports(DomItem &self) const
+QList<DomItem> ModuleIndex::autoExports(const DomItem &self) const
{
QList<DomItem> res;
Path selfPath = canonicalPath(self).field(Fields::autoExports);
@@ -219,7 +219,7 @@ QList<DomItem> ModuleIndex::autoExports(DomItem &self) const
return res;
}
-QList<DomItem> ModuleIndex::exportsWithNameAndMinorVersion(DomItem &self, QString name,
+QList<DomItem> ModuleIndex::exportsWithNameAndMinorVersion(const DomItem &self, QString name,
int minorVersion) const
{
Path myPath = Paths::moduleScopePath(uri(), Version(majorVersion(), minorVersion))
@@ -344,7 +344,7 @@ void ModuleIndex::mergeWith(std::shared_ptr<ModuleIndex> o)
}
}
-QList<Path> ModuleIndex::qmldirsToLoad(DomItem &self)
+QList<Path> ModuleIndex::qmldirsToLoad(const DomItem &self)
{
// this always checks the filesystem to the qmldir file to load
DomItem env = self.environment();
diff --git a/src/qmldom/qqmldommoduleindex_p.h b/src/qmldom/qqmldommoduleindex_p.h
index 1d4d9be1df..37db3678da 100644
--- a/src/qmldom/qqmldommoduleindex_p.h
+++ b/src/qmldom/qqmldommoduleindex_p.h
@@ -38,12 +38,12 @@ public:
return Path::Field(Fields::moduleScope)
.key(version.isValid() ? QString::number(version.minorVersion) : QString());
}
- Path pathFromOwner(DomItem &) const override { return pathFromOwner(); }
- Path canonicalPath(DomItem &self) const override
+ Path pathFromOwner(const DomItem &) const override { return pathFromOwner(); }
+ Path canonicalPath(const DomItem &self) const override
{
return self.owner().canonicalPath().path(pathFromOwner());
}
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
QString uri;
Version version;
@@ -54,7 +54,7 @@ class QMLDOM_EXPORT ModuleIndex final : public OwningItem
Q_DECLARE_TR_FUNCTIONS(ModuleIndex);
protected:
- std::shared_ptr<OwningItem> doCopy(DomItem &self) const override;
+ std::shared_ptr<OwningItem> doCopy(const DomItem &self) const override;
public:
enum class Status { NotLoaded, Loading, Loaded };
@@ -71,21 +71,21 @@ public:
~ModuleIndex();
- std::shared_ptr<ModuleIndex> makeCopy(DomItem &self) const
+ std::shared_ptr<ModuleIndex> makeCopy(const DomItem &self) const
{
return std::static_pointer_cast<ModuleIndex>(doCopy(self));
}
- Path canonicalPath(DomItem &) const override
+ Path canonicalPath(const DomItem &) const override
{
return Paths::moduleIndexPath(uri(), majorVersion());
}
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
- QSet<QString> exportNames(DomItem &self) const;
+ QSet<QString> exportNames(const DomItem &self) const;
- QList<DomItem> exportsWithNameAndMinorVersion(DomItem &self, QString name,
+ QList<DomItem> exportsWithNameAndMinorVersion(const DomItem &self, QString name,
int minorVersion) const;
QString uri() const { return m_uri; }
@@ -106,7 +106,7 @@ public:
m_qmltypesFilesPaths.append(p);
}
- QList<Path> qmldirsToLoad(DomItem &self);
+ QList<Path> qmldirsToLoad(const DomItem &self);
QList<Path> qmltypesFilesPaths() const
{
QMutexLocker l(mutex());
@@ -122,7 +122,7 @@ public:
QMutexLocker l(mutex());
return m_directoryPaths;
}
- QList<DomItem> autoExports(DomItem &self) const;
+ QList<DomItem> autoExports(const DomItem &self) const;
private:
QString m_uri;
diff --git a/src/qmldom/qqmldomoutwriter.cpp b/src/qmldom/qqmldomoutwriter.cpp
index 7bdbf505e2..405a281fbb 100644
--- a/src/qmldom/qqmldomoutwriter.cpp
+++ b/src/qmldom/qqmldomoutwriter.cpp
@@ -15,7 +15,7 @@ QT_BEGIN_NAMESPACE
namespace QQmlJS {
namespace Dom {
-OutWriterState::OutWriterState(Path itCanonicalPath, DomItem &it, FileLocations::Tree fLoc)
+OutWriterState::OutWriterState(Path itCanonicalPath, const DomItem &it, FileLocations::Tree fLoc)
: itemCanonicalPath(itCanonicalPath), item(it), currentMap(fLoc)
{
DomItem cRegions = it.field(Fields::comments);
@@ -50,7 +50,7 @@ OutWriterState &OutWriter::state(int i)
return states[states.size() - 1 - i];
}
-void OutWriter::itemStart(DomItem &it)
+void OutWriter::itemStart(const DomItem &it)
{
if (!topLocation->path())
topLocation->setPath(it.canonicalPath());
@@ -77,7 +77,7 @@ void OutWriter::itemStart(DomItem &it)
regionStart(QString());
}
-void OutWriter::itemEnd(DomItem &it)
+void OutWriter::itemEnd(const DomItem &it)
{
Q_ASSERT(states.size() > 0);
Q_ASSERT(state().item == it);
@@ -126,7 +126,7 @@ OutWriter &OutWriter::writeRegion(QString rName, QStringView toWrite)
return *this;
}
-DomItem OutWriter::updatedFile(DomItem &qmlFile)
+DomItem OutWriter::updatedFile(const DomItem &qmlFile)
{
Q_ASSERT(qmlFile.internalKind() == DomType::QmlFile);
if (std::shared_ptr<QmlFile> qmlFilePtr = qmlFile.ownerAs<QmlFile>()) {
diff --git a/src/qmldom/qqmldomoutwriter_p.h b/src/qmldom/qqmldomoutwriter_p.h
index 1d000945d2..1960d4e8de 100644
--- a/src/qmldom/qqmldomoutwriter_p.h
+++ b/src/qmldom/qqmldomoutwriter_p.h
@@ -30,7 +30,7 @@ namespace Dom {
class QMLDOM_EXPORT OutWriterState
{
public:
- OutWriterState(Path itPath, DomItem &it, FileLocations::Tree fLoc);
+ OutWriterState(Path itPath, const DomItem &it, FileLocations::Tree fLoc);
void closeState(OutWriter &);
@@ -86,8 +86,8 @@ public:
return indent;
}
- void itemStart(DomItem &it);
- void itemEnd(DomItem &it);
+ void itemStart(const DomItem &it);
+ void itemEnd(const DomItem &it);
void regionStart(QString rName);
void regionStart(QStringView rName) { regionStart(rName.toString()); }
void regionEnd(QString rName);
@@ -154,7 +154,7 @@ public:
updExp->info().expr = exp;
}
}
- DomItem updatedFile(DomItem &qmlFile);
+ DomItem updatedFile(const DomItem &qmlFile);
};
} // end namespace Dom
diff --git a/src/qmldom/qqmldompath.cpp b/src/qmldom/qqmldompath.cpp
index 24eb9768eb..ea2146cc10 100644
--- a/src/qmldom/qqmldompath.cpp
+++ b/src/qmldom/qqmldompath.cpp
@@ -82,7 +82,8 @@ void Base::dump(Sink sink) const {
sink(u"]");
}
-Filter::Filter(function<bool(DomItem)> f, QStringView filterDescription): filterFunction(f), filterDescription(filterDescription) {}
+Filter::Filter(function<bool(const DomItem &)> f, QStringView filterDescription)
+ : filterFunction(f), filterDescription(filterDescription) {}
QString Filter::name() const {
return QLatin1String("?(%1)").arg(filterDescription); }
@@ -248,7 +249,7 @@ index_type Path::headIndex(index_type defaultValue) const
return component(0).index(defaultValue);
}
-function<bool (DomItem)> Path::headFilter() const
+function<bool(const DomItem &)> Path::headFilter() const
{
auto &comp = component(0);
if (PathEls::Filter const * f = comp.base()->asFilter()) {
@@ -646,14 +647,14 @@ Path Path::any() const
QStringList(), QVector<Component>(1,Component(PathEls::Any())), m_data));
}
-Path Path::filter(function<bool (DomItem)> filterF, QString desc) const
+Path Path::filter(function<bool(const DomItem &)> filterF, QString desc) const
{
auto res = filter(filterF, QStringView(desc));
res.m_data->strData.append(desc);
return res;
}
-Path Path::filter(function<bool (DomItem)> filter, QStringView desc) const
+Path Path::filter(function<bool(const DomItem &)> filter, QStringView desc) const
{
if (m_endOffset != 0)
return noEndOffset().filter(filter, desc);
diff --git a/src/qmldom/qqmldompath_p.h b/src/qmldom/qqmldompath_p.h
index 57ae51e142..ad93b20c17 100644
--- a/src/qmldom/qqmldompath_p.h
+++ b/src/qmldom/qqmldompath_p.h
@@ -270,7 +270,8 @@ class QMLDOM_EXPORT Filter final : public Base
{
public:
Filter() = default;
- Filter(std::function<bool(DomItem)> f, QStringView filterDescription = u"<native code filter>");
+ Filter(std::function<bool(const DomItem &)> f,
+ QStringView filterDescription = u"<native code filter>");
Kind kind() const override { return Kind::Filter; }
QString name() const override;
bool checkName(QStringView s) const override;
@@ -278,7 +279,7 @@ public:
bool hasSquareBrackets() const override { return true; }
const Filter *asFilter() const override { return this; }
- std::function<bool(DomItem)> filterFunction;
+ std::function<bool(const DomItem &)> filterFunction;
QStringView filterDescription;
};
@@ -316,12 +317,11 @@ private:
friend class QQmlJS::Dom::Path;
friend class QQmlJS::Dom::PathEls::TestPaths;
- Base *base() {
- return reinterpret_cast<Base*>(&data);
- }
- const Base *base() const {
- return reinterpret_cast<const Base*>(&data);
- }
+ // TODO: is all extremely nasty. We're casting to the common base of the union members and
+ // relying on the data layout of all of those to follow our expectations.
+ Base *base() { return reinterpret_cast<Base*>(&data); }
+ const Base *base() const { return reinterpret_cast<const Base*>(&data); }
+
union Data {
Data(): empty() { }
Data(const Data &d) {
@@ -679,7 +679,7 @@ public:
QString headName() const;
bool checkHeadName(QStringView name) const;
index_type headIndex(index_type defaultValue=-1) const;
- std::function<bool(DomItem)> headFilter() const;
+ std::function<bool(const DomItem &)> headFilter() const;
Path head() const;
Path last() const;
Source split() const;
@@ -715,8 +715,9 @@ public:
Path key(QStringView name) const;
Path index(index_type i) const;
Path any() const;
- Path filter(std::function<bool(DomItem)>, QString) const;
- Path filter(std::function<bool(DomItem)>, QStringView desc=u"<native code filter>") const;
+ Path filter(std::function<bool(const DomItem &)>, QString) const;
+ Path filter(std::function<bool(const DomItem &)>,
+ QStringView desc=u"<native code filter>") const;
Path current(PathCurrent s) const;
Path current(QString s) const;
Path current(QStringView s=u"") const;
@@ -809,6 +810,9 @@ inline size_t qHash(const Path &path, size_t seed)
*it++ = qHash(p.component(0).stringView(), seed)^size_t(p.headRoot())^size_t(p.headCurrent());
}
}
+
+ // TODO: Get rid of the reinterpret_cast.
+ // Rather hash the path components in a more structured way.
return qHash(QByteArray::fromRawData(reinterpret_cast<char *>(&buf[0]), (it - &buf[0])*sizeof(size_t)), seed);
}
diff --git a/src/qmldom/qqmldomscriptelements.cpp b/src/qmldom/qqmldomscriptelements.cpp
index 9080aae8a5..85d5597cc2 100644
--- a/src/qmldom/qqmldomscriptelements.cpp
+++ b/src/qmldom/qqmldomscriptelements.cpp
@@ -71,7 +71,7 @@ using QQmlJS::Dom::ScriptElementVariant;
\internal
Helper for fields with elements in iterateDirectSubpaths.
*/
-static bool wrap(QQmlJS::Dom::DomItem &self, QQmlJS::Dom::DirectVisitor visitor, QStringView field,
+static bool wrap(const QQmlJS::Dom::DomItem &self, QQmlJS::Dom::DirectVisitor visitor, QStringView field,
const ScriptElementVariant &value)
{
if (!value)
@@ -89,7 +89,7 @@ static bool wrap(QQmlJS::Dom::DomItem &self, QQmlJS::Dom::DirectVisitor visitor,
\internal
Helper for fields with lists in iterateDirectSubpaths.
*/
-static bool wrap(QQmlJS::Dom::DomItem &self, QQmlJS::Dom::DirectVisitor visitor, QStringView field,
+static bool wrap(const QQmlJS::Dom::DomItem &self, QQmlJS::Dom::DirectVisitor visitor, QStringView field,
const ScriptList &value)
{
const bool b =
@@ -100,7 +100,7 @@ static bool wrap(QQmlJS::Dom::DomItem &self, QQmlJS::Dom::DirectVisitor visitor,
return b;
}
-bool GenericScriptElement::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool GenericScriptElement::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
for (auto it = m_children.begin(); it != m_children.end(); ++it) {
@@ -137,7 +137,7 @@ void GenericScriptElement::createFileLocations(FileLocations::Tree base)
}
}
-bool BlockStatement::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool BlockStatement::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
// TODO: test me
bool cont = true;
@@ -157,14 +157,14 @@ void BlockStatement::createFileLocations(FileLocations::Tree base)
m_statements.createFileLocations(base);
}
-bool IdentifierExpression::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool IdentifierExpression::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont &= self.dvValueField(visitor, Fields::identifier, m_name);
return cont;
}
-bool Literal::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool Literal::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
std::visit([&cont, &visitor,
@@ -173,7 +173,7 @@ bool Literal::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return cont;
}
-bool IfStatement::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool IfStatement::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
// TODO: test me
bool cont = true;
@@ -205,7 +205,7 @@ void IfStatement::createFileLocations(FileLocations::Tree base)
ptr->createFileLocations(base);
}
-bool ForStatement::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool ForStatement::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont &= wrap(self, visitor, Fields::initializer, m_initializer);
@@ -246,7 +246,7 @@ void ForStatement::createFileLocations(FileLocations::Tree base)
ptr->createFileLocations(base);
}
-bool BinaryExpression::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool BinaryExpression::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont &= wrap(self, visitor, Fields::left, m_left);
@@ -273,7 +273,7 @@ void BinaryExpression::createFileLocations(FileLocations::Tree base)
ptr->createFileLocations(base);
}
-bool VariableDeclarationEntry::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool VariableDeclarationEntry::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont &= self.dvValueField(visitor, Fields::scopeType, m_scopeType);
@@ -300,7 +300,7 @@ void VariableDeclarationEntry::createFileLocations(FileLocations::Tree base)
ptr->createFileLocations(base);
}
-bool VariableDeclaration::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool VariableDeclaration::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont &= wrap(self, visitor, Fields::declarations, m_declarations);
@@ -319,7 +319,7 @@ void VariableDeclaration::createFileLocations(FileLocations::Tree base)
m_declarations.createFileLocations(base);
}
-bool ReturnStatement::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool ReturnStatement::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont &= wrap(self, visitor, Fields::expression, m_expression);
diff --git a/src/qmldom/qqmldomscriptelements_p.h b/src/qmldom/qqmldomscriptelements_p.h
index cdb1bf645d..080a1aef6e 100644
--- a/src/qmldom/qqmldomscriptelements_p.h
+++ b/src/qmldom/qqmldomscriptelements_p.h
@@ -60,7 +60,7 @@ public:
Pretty prints the current DomItem. Currently, for script elements, this is done entirely on
the parser representation (via the AST classes), but it could be moved here if needed.
*/
- // void writeOut(DomItem &self, OutWriter &lw) const override;
+ // void writeOut(const DomItem &self, OutWriter &lw) const override;
/*!
All of the following overloads are only required for optimization purposes.
@@ -70,17 +70,17 @@ public:
*/
// // needed for debug
- // void dump(DomItem &, Sink sink, int indent, FilterT filter) const override;
+ // void dump(const DomItem &, Sink sink, int indent, FilterT filter) const override;
// // just required for optimization if iterateDirectSubpaths is slow
- // QList<QString> fields(DomItem &self) const override;
- // DomItem field(DomItem &self, QStringView name) const override;
+ // QList<QString> fields(const DomItem &self) const override;
+ // DomItem field(const DomItem &self, QStringView name) const override;
- // index_type indexes(DomItem &self) const override;
- // DomItem index(DomItem &self, index_type index) const override;
+ // index_type indexes(const DomItem &self) const override;
+ // DomItem index(const DomItem &self, index_type index) const override;
- // QSet<QString> const keys(DomItem &self) const override;
- // DomItem key(DomItem &self, QString name) const override;
+ // QSet<QString> const keys(const DomItem &self) const override;
+ // DomItem key(const DomItem &self, QString name) const override;
protected:
QQmlJS::SourceLocation m_combinedLocation;
@@ -94,7 +94,7 @@ public:
using BaseT::BaseT;
// minimal required overload for this to be wrapped as DomItem:
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
{
bool cont =
asList(self.pathFromOwner().key(QString())).iterateDirectSubpaths(self, visitor);
@@ -122,7 +122,7 @@ public:
{
auto asList = List::fromQList<ScriptElementVariant>(
path, m_list,
- [](DomItem &list, const PathEls::PathComponent &, ScriptElementVariant &wrapped)
+ [](const DomItem &list, const PathEls::PathComponent &, const ScriptElementVariant &wrapped)
-> DomItem { return list.subScriptElementWrapperItem(wrapped); });
return asList;
@@ -144,7 +144,7 @@ public:
using BaseT::BaseT;
using VariantT = std::variant<ScriptElementVariant, ScriptList>;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
void updatePathFromOwner(Path p) override;
void createFileLocations(FileLocations::Tree base) override;
@@ -173,7 +173,7 @@ public:
using BaseT::BaseT;
// minimal required overload for this to be wrapped as DomItem:
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
void updatePathFromOwner(Path p) override;
void createFileLocations(FileLocations::Tree base) override;
@@ -192,7 +192,7 @@ public:
QString name() { return m_name; }
// minimal required overload for this to be wrapped as DomItem:
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
QCborValue value() const override { return QCborValue(m_name); }
@@ -211,7 +211,7 @@ public:
VariantT literalValue() const { return m_value; }
// minimal required overload for this to be wrapped as DomItem:
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
QCborValue value() const override
{
@@ -229,7 +229,7 @@ public:
using BaseT::BaseT;
// minimal required overload for this to be wrapped as DomItem:
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
void updatePathFromOwner(Path p) override;
void createFileLocations(FileLocations::Tree base) override;
@@ -265,7 +265,7 @@ public:
using BaseT::BaseT;
// minimal required overload for this to be wrapped as DomItem:
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
void updatePathFromOwner(Path p) override;
void createFileLocations(FileLocations::Tree base) override;
@@ -288,7 +288,7 @@ public:
using BaseT::BaseT;
// minimal required overload for this to be wrapped as DomItem:
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
void updatePathFromOwner(Path p) override;
void createFileLocations(FileLocations::Tree base) override;
@@ -311,7 +311,7 @@ public:
};
// minimal required overload for this to be wrapped as DomItem:
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
void updatePathFromOwner(Path p) override;
void createFileLocations(FileLocations::Tree base) override;
@@ -344,7 +344,7 @@ public:
ScriptElementVariant initializer() const { return m_initializer; }
void setInitializer(const ScriptElementVariant &initializer) { m_initializer = initializer; }
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
void updatePathFromOwner(Path p) override;
void createFileLocations(FileLocations::Tree base) override;
@@ -360,7 +360,7 @@ public:
using BaseT::BaseT;
// minimal required overload for this to be wrapped as DomItem:
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor visitor) override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
void updatePathFromOwner(Path p) override;
void createFileLocations(FileLocations::Tree base) override;
diff --git a/src/qmldom/qqmldomtop.cpp b/src/qmldom/qqmldomtop.cpp
index adc27dc47f..7f64148f1c 100644
--- a/src/qmldom/qqmldomtop.cpp
+++ b/src/qmldom/qqmldomtop.cpp
@@ -55,17 +55,17 @@ using std::shared_ptr;
if force is true the file is always read
*/
-Path DomTop::canonicalPath(DomItem &) const
+Path DomTop::canonicalPath(const DomItem &) const
{
return canonicalPath();
}
-DomItem DomTop::containingObject(DomItem &) const
+DomItem DomTop::containingObject(const DomItem &) const
{
return DomItem();
}
-bool DomTop::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool DomTop::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
static QHash<QString, QString> knownFields;
static QBasicMutex m;
@@ -149,7 +149,7 @@ Path DomUniverse::canonicalPath() const
return Path::Root(u"universe");
}
-bool DomUniverse::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool DomUniverse::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && DomTop::iterateDirectSubpaths(self, visitor);
@@ -158,57 +158,57 @@ bool DomUniverse::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
cont = cont && self.dvItemField(visitor, Fields::globalScopeWithName, [this, &self]() {
return self.subMapItem(Map(
Path::Field(Fields::globalScopeWithName),
- [this](DomItem &map, QString key) { return map.copy(globalScopeWithName(key)); },
- [this](DomItem &) { return globalScopeNames(); }, QLatin1String("GlobalScope")));
+ [this](const DomItem &map, QString key) { return map.copy(globalScopeWithName(key)); },
+ [this](const DomItem &) { return globalScopeNames(); }, QLatin1String("GlobalScope")));
});
cont = cont && self.dvItemField(visitor, Fields::qmlDirectoryWithPath, [this, &self]() {
return self.subMapItem(Map(
Path::Field(Fields::qmlDirectoryWithPath),
- [this](DomItem &map, QString key) { return map.copy(qmlDirectoryWithPath(key)); },
- [this](DomItem &) { return qmlDirectoryPaths(); }, QLatin1String("QmlDirectory")));
+ [this](const DomItem &map, QString key) { return map.copy(qmlDirectoryWithPath(key)); },
+ [this](const DomItem &) { return qmlDirectoryPaths(); }, QLatin1String("QmlDirectory")));
});
cont = cont && self.dvItemField(visitor, Fields::qmldirFileWithPath, [this, &self]() {
return self.subMapItem(Map(
Path::Field(Fields::qmldirFileWithPath),
- [this](DomItem &map, QString key) { return map.copy(qmldirFileWithPath(key)); },
- [this](DomItem &) { return qmldirFilePaths(); }, QLatin1String("QmldirFile")));
+ [this](const DomItem &map, QString key) { return map.copy(qmldirFileWithPath(key)); },
+ [this](const DomItem &) { return qmldirFilePaths(); }, QLatin1String("QmldirFile")));
});
cont = cont && self.dvItemField(visitor, Fields::qmlFileWithPath, [this, &self]() {
return self.subMapItem(Map(
Path::Field(Fields::qmlFileWithPath),
- [this](DomItem &map, QString key) { return map.copy(qmlFileWithPath(key)); },
- [this](DomItem &) { return qmlFilePaths(); }, QLatin1String("QmlFile")));
+ [this](const DomItem &map, QString key) { return map.copy(qmlFileWithPath(key)); },
+ [this](const DomItem &) { return qmlFilePaths(); }, QLatin1String("QmlFile")));
});
cont = cont && self.dvItemField(visitor, Fields::jsFileWithPath, [this, &self]() {
return self.subMapItem(Map(
Path::Field(Fields::jsFileWithPath),
- [this](DomItem &map, QString key) { return map.copy(jsFileWithPath(key)); },
- [this](DomItem &) { return jsFilePaths(); }, QLatin1String("JsFile")));
+ [this](const DomItem &map, QString key) { return map.copy(jsFileWithPath(key)); },
+ [this](const DomItem &) { return jsFilePaths(); }, QLatin1String("JsFile")));
});
cont = cont && self.dvItemField(visitor, Fields::jsFileWithPath, [this, &self]() {
return self.subMapItem(Map(
Path::Field(Fields::qmltypesFileWithPath),
- [this](DomItem &map, QString key) { return map.copy(qmltypesFileWithPath(key)); },
- [this](DomItem &) { return qmltypesFilePaths(); }, QLatin1String("QmltypesFile")));
+ [this](const DomItem &map, QString key) { return map.copy(qmltypesFileWithPath(key)); },
+ [this](const DomItem &) { return qmltypesFilePaths(); }, QLatin1String("QmltypesFile")));
});
cont = cont && self.dvItemField(visitor, Fields::queue, [this, &self]() {
QQueue<ParsingTask> q = queue();
return self.subListItem(List(
Path::Field(Fields::queue),
- [q](DomItem &list, index_type i) {
+ [q](const DomItem &list, index_type i) {
if (i >= 0 && i < q.size())
return list.subDataItem(PathEls::Index(i), q.at(i).toCbor(),
ConstantData::Options::FirstMapIsFields);
else
return DomItem();
},
- [q](DomItem &) { return index_type(q.size()); }, nullptr,
+ [q](const DomItem &) { return index_type(q.size()); }, nullptr,
QLatin1String("ParsingTask")));
});
return cont;
}
-std::shared_ptr<OwningItem> DomUniverse::doCopy(DomItem &) const
+std::shared_ptr<OwningItem> DomUniverse::doCopy(const DomItem &) const
{
QRegularExpression r(QRegularExpression::anchoredPattern(QLatin1String(R"(.*Copy([0-9]*)$)")));
auto m = r.match(m_name);
@@ -221,7 +221,7 @@ std::shared_ptr<OwningItem> DomUniverse::doCopy(DomItem &) const
return res;
}
-static DomType fileTypeForPath(DomItem &self, QString canonicalFilePath)
+static DomType fileTypeForPath(const DomItem &self, QString canonicalFilePath)
{
if (canonicalFilePath.endsWith(u".qml", Qt::CaseInsensitive)
|| canonicalFilePath.endsWith(u".qmlannotation", Qt::CaseInsensitive)) {
@@ -244,7 +244,7 @@ static DomType fileTypeForPath(DomItem &self, QString canonicalFilePath)
return DomType::Empty;
}
-void DomUniverse::loadFile(DomItem &self, const FileToLoad &file, Callback callback,
+void DomUniverse::loadFile(const DomItem &self, const FileToLoad &file, Callback callback,
LoadOptions loadOptions, std::optional<DomType> fileType)
{
DomType fType = (bool(fileType) ? (*fileType) : fileTypeForPath(self, file.canonicalPath()));
@@ -275,7 +275,7 @@ void DomUniverse::loadFile(DomItem &self, const FileToLoad &file, Callback callb
template<typename T>
QPair<std::shared_ptr<ExternalItemPair<T>>, std::shared_ptr<ExternalItemPair<T>>>
-updateEntry(DomItem &univ, std::shared_ptr<T> newItem,
+updateEntry(const DomItem &univ, std::shared_ptr<T> newItem,
QMap<QString, std::shared_ptr<ExternalItemPair<T>>> &map, QBasicMutex *mutex)
{
std::shared_ptr<ExternalItemPair<T>> oldValue;
@@ -502,7 +502,7 @@ void DomUniverse::removePath(const QString &path)
m_qmltypesFileWithPath.removeIf(toDelete);
}
-std::shared_ptr<OwningItem> LoadInfo::doCopy(DomItem &self) const
+std::shared_ptr<OwningItem> LoadInfo::doCopy(const DomItem &self) const
{
auto res = std::make_shared<LoadInfo>(*this);
if (res->status() != Status::Done) {
@@ -525,12 +525,12 @@ std::shared_ptr<OwningItem> LoadInfo::doCopy(DomItem &self) const
return res;
}
-Path LoadInfo::canonicalPath(DomItem &) const
+Path LoadInfo::canonicalPath(const DomItem &) const
{
return Path::Root(PathRoot::Env).field(Fields::loadInfo).key(elementCanonicalPath().toString());
}
-bool LoadInfo::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool LoadInfo::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = OwningItem::iterateDirectSubpaths(self, visitor);
cont = cont && self.dvValueField(visitor, Fields::status, int(status()));
@@ -543,8 +543,8 @@ bool LoadInfo::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return cont;
}
-void LoadInfo::addEndCallback(DomItem &self,
- std::function<void(Path, DomItem &, DomItem &)> callback)
+void LoadInfo::addEndCallback(const DomItem &self,
+ std::function<void(Path, const DomItem &, const DomItem &)> callback)
{
if (!callback)
return;
@@ -566,7 +566,7 @@ void LoadInfo::addEndCallback(DomItem &self,
callback(p, el, el);
}
-void LoadInfo::advanceLoad(DomItem &self)
+void LoadInfo::advanceLoad(const DomItem &self)
{
Status myStatus;
Dependency dep;
@@ -614,7 +614,7 @@ void LoadInfo::advanceLoad(DomItem &self)
if (!dep.uri.isEmpty()) {
self.loadModuleDependency(
dep.uri, dep.version,
- [this, self, dep](Path, DomItem &, DomItem &) mutable {
+ [this, self, dep](Path, const DomItem &, const DomItem &) mutable {
finishedLoadingDep(self, dep);
},
self.errorHandler());
@@ -624,7 +624,7 @@ void LoadInfo::advanceLoad(DomItem &self)
if (std::shared_ptr<DomEnvironment> envPtr = env.ownerAs<DomEnvironment>())
envPtr->loadFile(
env, FileToLoad::fromFileSystem(envPtr, dep.filePath),
- [this, self, dep](Path, DomItem &, DomItem &) mutable {
+ [this, self, dep](Path, const DomItem &, const DomItem &) mutable {
finishedLoadingDep(self, dep);
},
nullptr, nullptr, LoadOption::DefaultLoad, dep.fileType,
@@ -647,7 +647,7 @@ void LoadInfo::advanceLoad(DomItem &self)
}
}
-void LoadInfo::finishedLoadingDep(DomItem &self, const Dependency &d)
+void LoadInfo::finishedLoadingDep(const DomItem &self, const Dependency &d)
{
bool didRemove = false;
bool unexpectedState = false;
@@ -693,9 +693,9 @@ void LoadInfo::finishedLoadingDep(DomItem &self, const Dependency &d)
execEnd(self);
}
-void LoadInfo::execEnd(DomItem &self)
+void LoadInfo::execEnd(const DomItem &self)
{
- QList<std::function<void(Path, DomItem &, DomItem &)>> endCallbacks;
+ QList<std::function<void(Path, const DomItem &, const DomItem &)>> endCallbacks;
bool unexpectedState = false;
{
QMutexLocker l(mutex());
@@ -708,7 +708,7 @@ void LoadInfo::execEnd(DomItem &self)
DomItem el = self.path(p);
{
auto cleanup = qScopeGuard([this, p, &el] {
- QList<std::function<void(Path, DomItem &, DomItem &)>> otherCallbacks;
+ QList<std::function<void(Path, const DomItem &, const DomItem &)>> otherCallbacks;
bool unexpectedState2 = false;
{
QMutexLocker l(mutex());
@@ -730,7 +730,7 @@ void LoadInfo::execEnd(DomItem &self)
}
}
-void LoadInfo::doAddDependencies(DomItem &self)
+void LoadInfo::doAddDependencies(const DomItem &self)
{
if (!elementCanonicalPath()) {
DomEnvironment::myErrors()
@@ -780,8 +780,8 @@ void LoadInfo::doAddDependencies(DomItem &self)
}
}
DomItem currentQmlFiles = currentFile.field(Fields::qmlFiles);
- currentQmlFiles.visitKeys([this, &self](QString, DomItem &els) {
- return els.visitIndexes([this, &self](DomItem &el) {
+ currentQmlFiles.visitKeys([this, &self](QString, const DomItem &els) {
+ return els.visitIndexes([this, &self](const DomItem &el) {
if (const Reference *ref = el.as<Reference>()) {
Path canonicalPath = ref->referredObjectPath[2];
if (canonicalPath && !canonicalPath.headName().isEmpty())
@@ -802,7 +802,7 @@ void LoadInfo::doAddDependencies(DomItem &self)
DomType::QmldirFile });
}
QString uri = elPtr->uri();
- addEndCallback(self, [uri, qmldirs](Path, DomItem &, DomItem &newV) {
+ addEndCallback(self, [uri, qmldirs](Path, const DomItem &, const DomItem &newV) {
for (const Path &p : qmldirs) {
DomItem qmldir = newV.path(p);
if (std::shared_ptr<QmldirFile> qmldirFilePtr = qmldir.ownerAs<QmldirFile>()) {
@@ -822,7 +822,7 @@ void LoadInfo::doAddDependencies(DomItem &self)
}
}
-void LoadInfo::addDependency(DomItem &self, const Dependency &dep)
+void LoadInfo::addDependency(const DomItem &self, const Dependency &dep)
{
bool unexpectedState = false;
{
@@ -843,8 +843,8 @@ void LoadInfo::addDependency(DomItem &self, const Dependency &dep)
template<typename T>
DomTop::Callback envCallbackForFile(
- DomItem &self, QMap<QString, std::shared_ptr<ExternalItemInfo<T>>> DomEnvironment::*map,
- std::shared_ptr<ExternalItemInfo<T>> (DomEnvironment::*lookupF)(DomItem &, QString,
+ const DomItem &self, QMap<QString, std::shared_ptr<ExternalItemInfo<T>>> DomEnvironment::*map,
+ std::shared_ptr<ExternalItemInfo<T>> (DomEnvironment::*lookupF)(const DomItem &, QString,
EnvLookup) const,
DomTop::Callback loadCallback, DomTop::Callback allDirectDepsCallback,
DomTop::Callback endCallback)
@@ -853,7 +853,7 @@ DomTop::Callback envCallbackForFile(
std::weak_ptr<DomEnvironment> selfPtr = ePtr;
std::shared_ptr<DomEnvironment> basePtr = ePtr->base();
return [selfPtr, basePtr, map, lookupF, loadCallback, allDirectDepsCallback,
- endCallback](Path, DomItem &, DomItem &newItem) {
+ endCallback](Path, const DomItem &, const DomItem &newItem) {
shared_ptr<DomEnvironment> envPtr = selfPtr.lock();
if (!envPtr)
return;
@@ -913,7 +913,7 @@ DomTop::Callback envCallbackForFile(
}
if (endCallback)
envPtr->addAllLoadedCallback(env,
- [p, endCallback](Path, DomItem &, DomItem &env) {
+ [p, endCallback](Path, const DomItem &, const DomItem &env) {
DomItem el = env.path(p);
endCallback(p, el, el);
});
@@ -952,7 +952,7 @@ Path DomEnvironment::canonicalPath() const
return Path::Root(u"env");
}
-bool DomEnvironment::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool DomEnvironment::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
bool cont = true;
cont = cont && DomTop::iterateDirectSubpaths(self, visitor);
@@ -966,54 +966,54 @@ bool DomEnvironment::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
cont = cont && self.dvItemField(visitor, Fields::globalScopeWithName, [this, &self]() {
return self.subMapItem(Map(
Path::Field(Fields::globalScopeWithName),
- [&self, this](DomItem &map, QString key) {
+ [&self, this](const DomItem &map, QString key) {
return map.copy(globalScopeWithName(self, key));
},
- [&self, this](DomItem &) { return globalScopeNames(self); },
+ [&self, this](const DomItem &) { return globalScopeNames(self); },
QLatin1String("GlobalScope")));
});
cont = cont && self.dvItemField(visitor, Fields::qmlDirectoryWithPath, [this, &self]() {
return self.subMapItem(Map(
Path::Field(Fields::qmlDirectoryWithPath),
- [&self, this](DomItem &map, QString key) {
+ [&self, this](const DomItem &map, QString key) {
return map.copy(qmlDirectoryWithPath(self, key));
},
- [&self, this](DomItem &) { return qmlDirectoryPaths(self); },
+ [&self, this](const DomItem &) { return qmlDirectoryPaths(self); },
QLatin1String("QmlDirectory")));
});
cont = cont && self.dvItemField(visitor, Fields::qmldirFileWithPath, [this, &self]() {
return self.subMapItem(Map(
Path::Field(Fields::qmldirFileWithPath),
- [&self, this](DomItem &map, QString key) {
+ [&self, this](const DomItem &map, QString key) {
return map.copy(qmldirFileWithPath(self, key));
},
- [&self, this](DomItem &) { return qmldirFilePaths(self); },
+ [&self, this](const DomItem &) { return qmldirFilePaths(self); },
QLatin1String("QmldirFile")));
});
cont = cont && self.dvItemField(visitor, Fields::qmldirWithPath, [this, &self]() {
return self.subMapItem(Map(
Path::Field(Fields::qmldirWithPath),
- [&self, this](DomItem &map, QString key) {
+ [&self, this](const DomItem &map, QString key) {
return map.copy(qmlDirWithPath(self, key));
},
- [&self, this](DomItem &) { return qmlDirPaths(self); }, QLatin1String("Qmldir")));
+ [&self, this](const DomItem &) { return qmlDirPaths(self); }, QLatin1String("Qmldir")));
});
cont = cont && self.dvItemField(visitor, Fields::qmlFileWithPath, [this, &self]() {
return self.subMapItem(Map(
Path::Field(Fields::qmlFileWithPath),
- [&self, this](DomItem &map, QString key) {
+ [&self, this](const DomItem &map, QString key) {
return map.copy(qmlFileWithPath(self, key));
},
- [&self, this](DomItem &) { return qmlFilePaths(self); }, QLatin1String("QmlFile")));
+ [&self, this](const DomItem &) { return qmlFilePaths(self); }, QLatin1String("QmlFile")));
});
cont = cont && self.dvItemField(visitor, Fields::jsFileWithPath, [this, &self]() {
return self.subMapItem(Map(
Path::Field(Fields::jsFileWithPath),
- [this](DomItem &map, QString key) {
+ [this](const DomItem &map, QString key) {
DomItem mapOw(map.owner());
return map.copy(jsFileWithPath(mapOw, key));
},
- [this](DomItem &map) {
+ [this](const DomItem &map) {
DomItem mapOw = map.owner();
return jsFilePaths(mapOw);
},
@@ -1022,11 +1022,11 @@ bool DomEnvironment::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
cont = cont && self.dvItemField(visitor, Fields::qmltypesFileWithPath, [this, &self]() {
return self.subMapItem(Map(
Path::Field(Fields::qmltypesFileWithPath),
- [this](DomItem &map, QString key) {
+ [this](const DomItem &map, QString key) {
DomItem mapOw = map.owner();
return map.copy(qmltypesFileWithPath(mapOw, key));
},
- [this](DomItem &map) {
+ [this](const DomItem &map) {
DomItem mapOw = map.owner();
return qmltypesFilePaths(mapOw);
},
@@ -1035,10 +1035,10 @@ bool DomEnvironment::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
cont = cont && self.dvItemField(visitor, Fields::moduleIndexWithUri, [this, &self]() {
return self.subMapItem(Map(
Path::Field(Fields::moduleIndexWithUri),
- [this](DomItem &map, QString key) {
+ [this](const DomItem &map, QString key) {
return map.subMapItem(Map(
map.pathFromOwner().key(key),
- [this, key](DomItem &submap, QString subKey) {
+ [this, key](const DomItem &submap, QString subKey) {
bool ok;
int i = subKey.toInt(&ok);
if (!ok) {
@@ -1054,7 +1054,7 @@ bool DomEnvironment::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
moduleIndexWithUri(subMapOw, key, i);
return submap.copy(mIndex);
},
- [this, key](DomItem &subMap) {
+ [this, key](const DomItem &subMap) {
QSet<QString> res;
DomItem subMapOw = subMap.owner();
for (int mVersion :
@@ -1069,7 +1069,7 @@ bool DomEnvironment::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
},
QLatin1String("ModuleIndex")));
},
- [this](DomItem &map) {
+ [this](const DomItem &map) {
DomItem mapOw = map.owner();
return moduleIndexUris(mapOw);
},
@@ -1094,14 +1094,14 @@ bool DomEnvironment::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
ensureInfo();
return self.subListItem(List(
Path::Field(Fields::loadsWithWork),
- [loadsWithWork](DomItem &list, index_type i) {
+ [loadsWithWork](const DomItem &list, index_type i) {
if (i >= 0 && i < loadsWithWork.size())
return list.subDataItem(PathEls::Index(i),
loadsWithWork.at(i).toString());
else
return DomItem();
},
- [loadsWithWork](DomItem &) {
+ [loadsWithWork](const DomItem &) {
return index_type(loadsWithWork.size());
},
nullptr, QLatin1String("Path")));
@@ -1111,20 +1111,20 @@ bool DomEnvironment::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
ensureInfo();
return self.subListItem(List(
Path::Field(Fields::inProgress),
- [inProgress](DomItem &list, index_type i) {
+ [inProgress](const DomItem &list, index_type i) {
if (i >= 0 && i < inProgress.size())
return list.subDataItem(PathEls::Index(i),
inProgress.at(i).toString());
else
return DomItem();
},
- [inProgress](DomItem &) { return index_type(inProgress.size()); },
+ [inProgress](const DomItem &) { return index_type(inProgress.size()); },
nullptr, QLatin1String("Path")));
});
cont = cont && self.dvItemField(visitor, Fields::loadInfo, [&self, this]() {
return self.subMapItem(Map(
Path::Field(Fields::loadInfo),
- [this](DomItem &map, QString pStr) {
+ [this](const DomItem &map, QString pStr) {
bool hasErrors = false;
Path p = Path::fromString(pStr, [&hasErrors](ErrorMessage m) {
switch (m.level) {
@@ -1142,7 +1142,7 @@ bool DomEnvironment::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return map.copy(loadInfo(p));
return DomItem();
},
- [this](DomItem &) {
+ [this](const DomItem &) {
QSet<QString> res;
const auto infoPaths = loadInfoPaths();
for (const Path &p : infoPaths)
@@ -1161,17 +1161,17 @@ bool DomEnvironment::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
return cont;
}
-DomItem DomEnvironment::field(DomItem &self, QStringView name) const
+DomItem DomEnvironment::field(const DomItem &self, QStringView name) const
{
return DomTop::field(self, name);
}
-std::shared_ptr<DomEnvironment> DomEnvironment::makeCopy(DomItem &self) const
+std::shared_ptr<DomEnvironment> DomEnvironment::makeCopy(const DomItem &self) const
{
return std::static_pointer_cast<DomEnvironment>(doCopy(self));
}
-std::shared_ptr<OwningItem> DomEnvironment::doCopy(DomItem &) const
+std::shared_ptr<OwningItem> DomEnvironment::doCopy(const DomItem &) const
{
shared_ptr<DomEnvironment> res;
if (m_base)
@@ -1182,7 +1182,7 @@ std::shared_ptr<OwningItem> DomEnvironment::doCopy(DomItem &) const
return res;
}
-void DomEnvironment::loadFile(DomItem &self, FileToLoad file, Callback loadCallback,
+void DomEnvironment::loadFile(const DomItem &self, FileToLoad file, Callback loadCallback,
Callback directDepsCallback, Callback endCallback,
LoadOptions loadOptions, std::optional<DomType> fileType,
ErrorHandler h)
@@ -1198,7 +1198,7 @@ void DomEnvironment::loadFile(DomItem &self, FileToLoad file, Callback loadCallb
if (directDepsCallback)
directDepsCallback(Path(), DomItem::empty, DomItem::empty);
if (endCallback)
- addAllLoadedCallback(self, [endCallback](Path, DomItem &, DomItem &) {
+ addAllLoadedCallback(self, [endCallback](Path, const DomItem &, const DomItem &) {
endCallback(Path(), DomItem::empty, DomItem::empty);
});
return;
@@ -1365,13 +1365,13 @@ void DomEnvironment::loadFile(DomItem &self, FileToLoad file, Callback loadCallb
directDepsCallback(self.canonicalPath(), DomItem::empty, DomItem::empty);
}
if (endCallback)
- addAllLoadedCallback(self, [p, endCallback](Path, DomItem &, DomItem &env) {
+ addAllLoadedCallback(self, [p, endCallback](Path, const DomItem &, const DomItem &env) {
DomItem el = env.path(p);
endCallback(p, el, el);
});
}
-void DomEnvironment::loadModuleDependency(DomItem &self, QString uri, Version v,
+void DomEnvironment::loadModuleDependency(const DomItem &self, QString uri, Version v,
Callback loadCallback, Callback endCallback,
ErrorHandler errorHandler)
{
@@ -1421,7 +1421,7 @@ void DomEnvironment::loadModuleDependency(DomItem &self, QString uri, Version v,
}
}
QAtomicInt toLoad((commonV ? 1 : 0) + ((maxV >= 0) ? 1 : 0));
- auto loadCallback2 = (loadCallback ? [p, loadCallback, toLoad](Path, DomItem &, DomItem &elV) mutable {
+ auto loadCallback2 = (loadCallback ? [p, loadCallback, toLoad](Path, const DomItem &, const DomItem &elV) mutable {
if (--toLoad == 0) {
DomItem el = elV.path(p);
loadCallback(p, el, el);
@@ -1462,13 +1462,13 @@ void DomEnvironment::loadModuleDependency(DomItem &self, QString uri, Version v,
}
}
if (endCallback)
- addAllLoadedCallback(self, [p, endCallback](Path, DomItem &, DomItem &env) {
+ addAllLoadedCallback(self, [p, endCallback](Path, const DomItem &, const DomItem &env) {
DomItem el = env.path(p);
endCallback(p, el, el);
});
}
-void DomEnvironment::loadBuiltins(DomItem &self, Callback callback, ErrorHandler h)
+void DomEnvironment::loadBuiltins(const DomItem &self, Callback callback, ErrorHandler h)
{
QString builtinsName = QLatin1String("builtins.qmltypes");
const auto lPaths = loadPaths();
@@ -1533,7 +1533,7 @@ QSet<QString> DomEnvironment::getStrings(function_ref<QSet<QString>()> getBase,
return res;
}
-QSet<QString> DomEnvironment::moduleIndexUris(DomItem &, EnvLookup lookup) const
+QSet<QString> DomEnvironment::moduleIndexUris(const DomItem &, EnvLookup lookup) const
{
DomItem baseObj = DomItem(m_base);
return this->getStrings<QMap<int, std::shared_ptr<ModuleIndex>>>(
@@ -1541,7 +1541,7 @@ QSet<QString> DomEnvironment::moduleIndexUris(DomItem &, EnvLookup lookup) const
m_moduleIndexWithUri, lookup);
}
-QSet<int> DomEnvironment::moduleIndexMajorVersions(DomItem &, QString uri, EnvLookup lookup) const
+QSet<int> DomEnvironment::moduleIndexMajorVersions(const DomItem &, QString uri, EnvLookup lookup) const
{
QSet<int> res;
if (lookup != EnvLookup::NoBase && m_base) {
@@ -1578,7 +1578,7 @@ std::shared_ptr<ModuleIndex> DomEnvironment::lookupModuleInEnv(const QString &ur
return it->value(majorVersion); // null shared_ptr is fine if no match
}
-DomEnvironment::ModuleLookupResult DomEnvironment::moduleIndexWithUriHelper(DomItem &self, QString uri, int majorVersion, EnvLookup options) const
+DomEnvironment::ModuleLookupResult DomEnvironment::moduleIndexWithUriHelper(const DomItem &self, QString uri, int majorVersion, EnvLookup options) const
{
std::shared_ptr<ModuleIndex> res;
if (options != EnvLookup::BaseOnly)
@@ -1610,7 +1610,7 @@ DomEnvironment::ModuleLookupResult DomEnvironment::moduleIndexWithUriHelper(DomI
}
}
-std::shared_ptr<ModuleIndex> DomEnvironment::moduleIndexWithUri(DomItem &self, QString uri,
+std::shared_ptr<ModuleIndex> DomEnvironment::moduleIndexWithUri(const DomItem &self, QString uri,
int majorVersion, EnvLookup options,
Changeable changeable,
ErrorHandler errorHandler)
@@ -1670,7 +1670,7 @@ std::shared_ptr<ModuleIndex> DomEnvironment::moduleIndexWithUri(DomItem &self, Q
return newModulePtr;
}
-std::shared_ptr<ModuleIndex> DomEnvironment::moduleIndexWithUri(DomItem &self, QString uri,
+std::shared_ptr<ModuleIndex> DomEnvironment::moduleIndexWithUri(const DomItem &self, QString uri,
int majorVersion,
EnvLookup options) const
{
@@ -1680,7 +1680,7 @@ std::shared_ptr<ModuleIndex> DomEnvironment::moduleIndexWithUri(DomItem &self, Q
std::shared_ptr<ExternalItemInfo<QmlDirectory>>
-DomEnvironment::qmlDirectoryWithPath(DomItem &self, QString path, EnvLookup options) const
+DomEnvironment::qmlDirectoryWithPath(const DomItem &self, QString path, EnvLookup options) const
{
if (options != EnvLookup::BaseOnly) {
QMutexLocker l(mutex());
@@ -1693,7 +1693,7 @@ DomEnvironment::qmlDirectoryWithPath(DomItem &self, QString path, EnvLookup opti
return {};
}
-QSet<QString> DomEnvironment::qmlDirectoryPaths(DomItem &, EnvLookup options) const
+QSet<QString> DomEnvironment::qmlDirectoryPaths(const DomItem &, EnvLookup options) const
{
return getStrings<std::shared_ptr<ExternalItemInfo<QmlDirectory>>>(
[this] {
@@ -1704,7 +1704,7 @@ QSet<QString> DomEnvironment::qmlDirectoryPaths(DomItem &, EnvLookup options) co
}
std::shared_ptr<ExternalItemInfo<QmldirFile>>
-DomEnvironment::qmldirFileWithPath(DomItem &self, QString path, EnvLookup options) const
+DomEnvironment::qmldirFileWithPath(const DomItem &self, QString path, EnvLookup options) const
{
if (options != EnvLookup::BaseOnly) {
QMutexLocker l(mutex());
@@ -1717,7 +1717,7 @@ DomEnvironment::qmldirFileWithPath(DomItem &self, QString path, EnvLookup option
return {};
}
-QSet<QString> DomEnvironment::qmldirFilePaths(DomItem &, EnvLookup lOptions) const
+QSet<QString> DomEnvironment::qmldirFilePaths(const DomItem &, EnvLookup lOptions) const
{
return getStrings<std::shared_ptr<ExternalItemInfo<QmldirFile>>>(
[this] {
@@ -1727,7 +1727,7 @@ QSet<QString> DomEnvironment::qmldirFilePaths(DomItem &, EnvLookup lOptions) con
m_qmldirFileWithPath, lOptions);
}
-std::shared_ptr<ExternalItemInfoBase> DomEnvironment::qmlDirWithPath(DomItem &self, QString path,
+std::shared_ptr<ExternalItemInfoBase> DomEnvironment::qmlDirWithPath(const DomItem &self, QString path,
EnvLookup options) const
{
if (auto qmldirFile = qmldirFileWithPath(self, path + QLatin1String("/qmldir"), options))
@@ -1735,7 +1735,7 @@ std::shared_ptr<ExternalItemInfoBase> DomEnvironment::qmlDirWithPath(DomItem &se
return qmlDirectoryWithPath(self, path, options);
}
-QSet<QString> DomEnvironment::qmlDirPaths(DomItem &self, EnvLookup options) const
+QSet<QString> DomEnvironment::qmlDirPaths(const DomItem &self, EnvLookup options) const
{
QSet<QString> res = qmlDirectoryPaths(self, options);
const auto qmldirFiles = qmldirFilePaths(self, options);
@@ -1753,7 +1753,7 @@ QSet<QString> DomEnvironment::qmlDirPaths(DomItem &self, EnvLookup options) cons
}
std::shared_ptr<ExternalItemInfo<QmlFile>>
-DomEnvironment::qmlFileWithPath(DomItem &self, QString path, EnvLookup options) const
+DomEnvironment::qmlFileWithPath(const DomItem &self, QString path, EnvLookup options) const
{
if (options != EnvLookup::BaseOnly) {
QMutexLocker l(mutex());
@@ -1766,7 +1766,7 @@ DomEnvironment::qmlFileWithPath(DomItem &self, QString path, EnvLookup options)
return {};
}
-QSet<QString> DomEnvironment::qmlFilePaths(DomItem &, EnvLookup lookup) const
+QSet<QString> DomEnvironment::qmlFilePaths(const DomItem &, EnvLookup lookup) const
{
return getStrings<std::shared_ptr<ExternalItemInfo<QmlFile>>>(
[this] {
@@ -1777,7 +1777,7 @@ QSet<QString> DomEnvironment::qmlFilePaths(DomItem &, EnvLookup lookup) const
}
std::shared_ptr<ExternalItemInfo<JsFile>>
-DomEnvironment::jsFileWithPath(DomItem &self, QString path, EnvLookup options) const
+DomEnvironment::jsFileWithPath(const DomItem &self, QString path, EnvLookup options) const
{
if (options != EnvLookup::BaseOnly) {
QMutexLocker l(mutex());
@@ -1789,7 +1789,7 @@ DomEnvironment::jsFileWithPath(DomItem &self, QString path, EnvLookup options) c
return {};
}
-QSet<QString> DomEnvironment::jsFilePaths(DomItem &, EnvLookup lookup) const
+QSet<QString> DomEnvironment::jsFilePaths(const DomItem &, EnvLookup lookup) const
{
return getStrings<std::shared_ptr<ExternalItemInfo<JsFile>>>(
[this] {
@@ -1800,7 +1800,7 @@ QSet<QString> DomEnvironment::jsFilePaths(DomItem &, EnvLookup lookup) const
}
std::shared_ptr<ExternalItemInfo<QmltypesFile>>
-DomEnvironment::qmltypesFileWithPath(DomItem &self, QString path, EnvLookup options) const
+DomEnvironment::qmltypesFileWithPath(const DomItem &self, QString path, EnvLookup options) const
{
if (options != EnvLookup::BaseOnly) {
QMutexLocker l(mutex());
@@ -1812,7 +1812,7 @@ DomEnvironment::qmltypesFileWithPath(DomItem &self, QString path, EnvLookup opti
return {};
}
-QSet<QString> DomEnvironment::qmltypesFilePaths(DomItem &, EnvLookup lookup) const
+QSet<QString> DomEnvironment::qmltypesFilePaths(const DomItem &, EnvLookup lookup) const
{
return getStrings<std::shared_ptr<ExternalItemInfo<QmltypesFile>>>(
[this] {
@@ -1823,7 +1823,7 @@ QSet<QString> DomEnvironment::qmltypesFilePaths(DomItem &, EnvLookup lookup) con
}
std::shared_ptr<ExternalItemInfo<GlobalScope>>
-DomEnvironment::globalScopeWithName(DomItem &self, QString name, EnvLookup lookupOptions) const
+DomEnvironment::globalScopeWithName(const DomItem &self, QString name, EnvLookup lookupOptions) const
{
if (lookupOptions != EnvLookup::BaseOnly) {
QMutexLocker l(mutex());
@@ -1837,7 +1837,7 @@ DomEnvironment::globalScopeWithName(DomItem &self, QString name, EnvLookup looku
}
std::shared_ptr<ExternalItemInfo<GlobalScope>>
-DomEnvironment::ensureGlobalScopeWithName(DomItem &self, QString name, EnvLookup lookupOptions)
+DomEnvironment::ensureGlobalScopeWithName(const DomItem &self, QString name, EnvLookup lookupOptions)
{
if (auto current = globalScopeWithName(self, name, lookupOptions))
return current;
@@ -1860,7 +1860,7 @@ DomEnvironment::ensureGlobalScopeWithName(DomItem &self, QString name, EnvLookup
return {};
}
-QSet<QString> DomEnvironment::globalScopeNames(DomItem &, EnvLookup lookupOptions) const
+QSet<QString> DomEnvironment::globalScopeNames(const DomItem &, EnvLookup lookupOptions) const
{
QSet<QString> res;
if (lookupOptions != EnvLookup::NoBase && m_base) {
@@ -1885,7 +1885,7 @@ QSet<QString> DomEnvironment::globalScopeNames(DomItem &, EnvLookup lookupOption
return res;
}
-void DomEnvironment::addLoadInfo(DomItem &self, std::shared_ptr<LoadInfo> loadInfo)
+void DomEnvironment::addLoadInfo(const DomItem &self, std::shared_ptr<LoadInfo> loadInfo)
{
if (!loadInfo)
return;
@@ -1925,7 +1925,7 @@ QList<Path> DomEnvironment::loadInfoPaths() const
return lInfos.keys();
}
-DomItem::Callback DomEnvironment::callbackForQmlDirectory(DomItem &self, Callback loadCallback,
+DomItem::Callback DomEnvironment::callbackForQmlDirectory(const DomItem &self, Callback loadCallback,
Callback allDirectDepsCallback,
Callback endCallback)
{
@@ -1934,7 +1934,7 @@ DomItem::Callback DomEnvironment::callbackForQmlDirectory(DomItem &self, Callbac
allDirectDepsCallback, endCallback);
}
-DomItem::Callback DomEnvironment::callbackForQmlFile(DomItem &self, Callback loadCallback,
+DomItem::Callback DomEnvironment::callbackForQmlFile(const DomItem &self, Callback loadCallback,
Callback allDirectDepsCallback,
Callback endCallback)
{
@@ -1943,14 +1943,14 @@ DomItem::Callback DomEnvironment::callbackForQmlFile(DomItem &self, Callback loa
allDirectDepsCallback, endCallback);
}
-DomTop::Callback DomEnvironment::callbackForQmltypesFile(DomItem &self,
+DomTop::Callback DomEnvironment::callbackForQmltypesFile(const DomItem &self,
DomTop::Callback loadCallback,
Callback allDirectDepsCallback,
DomTop::Callback endCallback)
{
return envCallbackForFile<QmltypesFile>(
self, &DomEnvironment::m_qmltypesFileWithPath, &DomEnvironment::qmltypesFileWithPath,
- [loadCallback](Path p, DomItem &oldV, DomItem &newV) {
+ [loadCallback](Path p, const DomItem &oldV, const DomItem &newV) {
DomItem newFile = newV.field(Fields::currentItem);
if (std::shared_ptr<QmltypesFile> newFilePtr = newFile.ownerAs<QmltypesFile>())
newFilePtr->ensureInModuleIndex(newFile);
@@ -1960,7 +1960,7 @@ DomTop::Callback DomEnvironment::callbackForQmltypesFile(DomItem &self,
allDirectDepsCallback, endCallback);
}
-DomTop::Callback DomEnvironment::callbackForQmldirFile(DomItem &self, DomTop::Callback loadCallback,
+DomTop::Callback DomEnvironment::callbackForQmldirFile(const DomItem &self, DomTop::Callback loadCallback,
Callback allDirectDepsCallback,
DomTop::Callback endCallback)
{
@@ -1977,7 +1977,7 @@ DomEnvironment::DomEnvironment(QStringList loadPaths, Options options,
m_implicitImports(defaultImplicitImports())
{}
-DomItem DomEnvironment::create(QStringList loadPaths, Options options, DomItem &universe)
+DomItem DomEnvironment::create(QStringList loadPaths, Options options, const DomItem &universe)
{
std::shared_ptr<DomUniverse> universePtr = universe.ownerAs<DomUniverse>();
auto envPtr = std::make_shared<DomEnvironment>(loadPaths, options, universePtr);
@@ -2063,7 +2063,7 @@ DomEnvironment::addGlobalScope(std::shared_ptr<GlobalScope> scope, AddOption opt
mutex());
}
-bool DomEnvironment::commitToBase(DomItem &self, shared_ptr<DomEnvironment> validEnvPtr)
+bool DomEnvironment::commitToBase(const DomItem &self, shared_ptr<DomEnvironment> validEnvPtr)
{
if (!base())
return false;
@@ -2149,7 +2149,7 @@ bool DomEnvironment::commitToBase(DomItem &self, shared_ptr<DomEnvironment> vali
return true;
}
-void DomEnvironment::loadPendingDependencies(DomItem &self)
+void DomEnvironment::loadPendingDependencies(const DomItem &self)
{
while (true) {
Path elToDo;
@@ -2192,7 +2192,7 @@ void DomEnvironment::loadPendingDependencies(DomItem &self)
}
}
-bool DomEnvironment::finishLoadingDependencies(DomItem &self, int waitMSec)
+bool DomEnvironment::finishLoadingDependencies(const DomItem &self, int waitMSec)
{
bool hasPendingLoads = true;
QDateTime endTime = QDateTime::currentDateTimeUtc().addMSecs(waitMSec);
@@ -2270,7 +2270,7 @@ QList<Import> DomEnvironment::implicitImports() const
return m_implicitImports;
}
-void DomEnvironment::addAllLoadedCallback(DomItem &self, DomTop::Callback c)
+void DomEnvironment::addAllLoadedCallback(const DomItem &self, DomTop::Callback c)
{
if (c) {
bool immediate = false;
@@ -2291,14 +2291,14 @@ void DomEnvironment::clearReferenceCache()
m_referenceCache.clear();
}
-QString ExternalItemInfoBase::canonicalFilePath(DomItem &self) const
+QString ExternalItemInfoBase::canonicalFilePath(const DomItem &self) const
{
shared_ptr<ExternalOwningItem> current = currentItem();
DomItem currentObj = currentItem(self);
return current->canonicalFilePath(currentObj);
}
-bool ExternalItemInfoBase::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool ExternalItemInfoBase::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
if (!self.dvValueLazyField(visitor, Fields::currentRevision,
[this, &self]() { return currentRevision(self); }))
@@ -2318,38 +2318,38 @@ bool ExternalItemInfoBase::iterateDirectSubpaths(DomItem &self, DirectVisitor vi
return true;
}
-int ExternalItemInfoBase::currentRevision(DomItem &) const
+int ExternalItemInfoBase::currentRevision(const DomItem &) const
{
return currentItem()->revision();
}
-int ExternalItemInfoBase::lastRevision(DomItem &self) const
+int ExternalItemInfoBase::lastRevision(const DomItem &self) const
{
Path p = currentItem()->canonicalPath();
DomItem lastValue = self.universe()[p.mid(1, p.length() - 1)].field(u"revision");
return static_cast<int>(lastValue.value().toInteger(0));
}
-int ExternalItemInfoBase::lastValidRevision(DomItem &self) const
+int ExternalItemInfoBase::lastValidRevision(const DomItem &self) const
{
Path p = currentItem()->canonicalPath();
DomItem lastValidValue = self.universe()[p.mid(1, p.length() - 2)].field(u"validItem").field(u"revision");
return static_cast<int>(lastValidValue.value().toInteger(0));
}
-QString ExternalItemPairBase::canonicalFilePath(DomItem &) const
+QString ExternalItemPairBase::canonicalFilePath(const DomItem &) const
{
shared_ptr<ExternalOwningItem> current = currentItem();
return current->canonicalFilePath();
}
-Path ExternalItemPairBase::canonicalPath(DomItem &) const
+Path ExternalItemPairBase::canonicalPath(const DomItem &) const
{
shared_ptr<ExternalOwningItem> current = currentItem();
return current->canonicalPath().dropTail();
}
-bool ExternalItemPairBase::iterateDirectSubpaths(DomItem &self, DirectVisitor visitor)
+bool ExternalItemPairBase::iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
{
if (!self.dvValueLazyField(visitor, Fields::currentIsValid,
[this]() { return currentIsValid(); }))
@@ -2371,7 +2371,7 @@ bool ExternalItemPairBase::currentIsValid() const
return currentItem() == validItem();
}
-RefCacheEntry RefCacheEntry::forPath(DomItem &el, Path canonicalPath)
+RefCacheEntry RefCacheEntry::forPath(const DomItem &el, Path canonicalPath)
{
DomItem env = el.environment();
std::shared_ptr<DomEnvironment> envPtr = env.ownerAs<DomEnvironment>();
@@ -2387,7 +2387,7 @@ RefCacheEntry RefCacheEntry::forPath(DomItem &el, Path canonicalPath)
return cached;
}
-bool RefCacheEntry::addForPath(DomItem &el, Path canonicalPath, const RefCacheEntry &entry,
+bool RefCacheEntry::addForPath(const DomItem &el, Path canonicalPath, const RefCacheEntry &entry,
AddOption addOption)
{
DomItem env = el.environment();
diff --git a/src/qmldom/qqmldomtop_p.h b/src/qmldom/qqmldomtop_p.h
index 5a6ac8f047..6d1637c859 100644
--- a/src/qmldom/qqmldomtop_p.h
+++ b/src/qmldom/qqmldomtop_p.h
@@ -58,7 +58,7 @@ public:
DomType kind;
FileToLoad file;
std::weak_ptr<DomUniverse> requestingUniverse; // make it a shared_ptr?
- function<void(Path, DomItem &, DomItem &)> callback;
+ function<void(Path, const DomItem &, const DomItem &)> callback;
};
class QMLDOM_EXPORT ExternalItemPairBase: public OwningItem { // all access should have the lock of the DomUniverse containing this
@@ -78,21 +78,21 @@ public:
OwningItem(o), validExposedAt(o.validExposedAt), currentExposedAt(o.currentExposedAt)
{}
virtual std::shared_ptr<ExternalOwningItem> validItem() const = 0;
- virtual DomItem validItem(DomItem &self) const = 0;
+ virtual DomItem validItem(const DomItem &self) const = 0;
virtual std::shared_ptr<ExternalOwningItem> currentItem() const = 0;
- virtual DomItem currentItem(DomItem &self) const = 0;
+ virtual DomItem currentItem(const DomItem &self) const = 0;
- QString canonicalFilePath(DomItem &) const final override;
- Path canonicalPath(DomItem &self) const final override;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor) final override;
- DomItem field(DomItem &self, QStringView name) const final override
+ QString canonicalFilePath(const DomItem &) const final override;
+ Path canonicalPath(const DomItem &self) const final override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const final override;
+ DomItem field(const DomItem &self, QStringView name) const final override
{
return OwningItem::field(self, name);
}
bool currentIsValid() const;
- std::shared_ptr<ExternalItemPairBase> makeCopy(DomItem &self) const
+ std::shared_ptr<ExternalItemPairBase> makeCopy(const DomItem &self) const
{
return std::static_pointer_cast<ExternalItemPairBase>(doCopy(self));
}
@@ -121,7 +121,7 @@ template<class T>
class QMLDOM_EXPORT ExternalItemPair final : public ExternalItemPairBase
{ // all access should have the lock of the DomUniverse containing this
protected:
- std::shared_ptr<OwningItem> doCopy(DomItem &) const override
+ std::shared_ptr<OwningItem> doCopy(const DomItem &) const override
{
return std::make_shared<ExternalItemPair>(*this);
}
@@ -143,10 +143,10 @@ public:
{
}
std::shared_ptr<ExternalOwningItem> validItem() const override { return valid; }
- DomItem validItem(DomItem &self) const override { return self.copy(valid); }
+ DomItem validItem(const DomItem &self) const override { return self.copy(valid); }
std::shared_ptr<ExternalOwningItem> currentItem() const override { return current; }
- DomItem currentItem(DomItem &self) const override { return self.copy(current); }
- std::shared_ptr<ExternalItemPair> makeCopy(DomItem &self) const
+ DomItem currentItem(const DomItem &self) const override { return self.copy(current); }
+ std::shared_ptr<ExternalItemPair> makeCopy(const DomItem &self) const
{
return std::static_pointer_cast<ExternalItemPair>(doCopy(self));
}
@@ -173,9 +173,9 @@ public:
virtual Path canonicalPath() const = 0;
- Path canonicalPath(DomItem &) const override;
- DomItem containingObject(DomItem &) const override;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor) override;
+ Path canonicalPath(const DomItem &) const override;
+ DomItem containingObject(const DomItem &) const override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override;
template<typename T>
void setExtraOwningItem(QString fieldName, std::shared_ptr<T> item)
{
@@ -198,7 +198,7 @@ class QMLDOM_EXPORT DomUniverse final : public DomTop
Q_GADGET
Q_DECLARE_TR_FUNCTIONS(DomUniverse);
protected:
- std::shared_ptr<OwningItem> doCopy(DomItem &self) const override;
+ std::shared_ptr<OwningItem> doCopy(const DomItem &self) const override;
public:
enum class Option{
@@ -219,13 +219,13 @@ public:
Path canonicalPath() const override;
using DomTop::canonicalPath;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor) override;
- std::shared_ptr<DomUniverse> makeCopy(DomItem &self) const
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override;
+ std::shared_ptr<DomUniverse> makeCopy(const DomItem &self) const
{
return std::static_pointer_cast<DomUniverse>(doCopy(self));
}
- void loadFile(DomItem &self, const FileToLoad &file, Callback callback, LoadOptions loadOptions,
+ void loadFile(const DomItem &self, const FileToLoad &file, Callback callback, LoadOptions loadOptions,
std::optional<DomType> fileType = std::optional<DomType>());
void execQueue();
@@ -377,22 +377,22 @@ public:
ExternalItemInfoBase(const ExternalItemInfoBase &o) = default;
virtual std::shared_ptr<ExternalOwningItem> currentItem() const = 0;
- virtual DomItem currentItem(DomItem &) const = 0;
+ virtual DomItem currentItem(const DomItem &) const = 0;
- QString canonicalFilePath(DomItem &) const final override;
+ QString canonicalFilePath(const DomItem &) const final override;
Path canonicalPath() const { return m_canonicalPath; }
- Path canonicalPath(DomItem &) const final override { return canonicalPath(); }
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor) final override;
- DomItem field(DomItem &self, QStringView name) const final override
+ Path canonicalPath(const DomItem &) const final override { return canonicalPath(); }
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const final override;
+ DomItem field(const DomItem &self, QStringView name) const final override
{
return OwningItem::field(self, name);
}
- int currentRevision(DomItem &self) const;
- int lastRevision(DomItem &self) const;
- int lastValidRevision(DomItem &self) const;
+ int currentRevision(const DomItem &self) const;
+ int lastRevision(const DomItem &self) const;
+ int lastValidRevision(const DomItem &self) const;
- std::shared_ptr<ExternalItemInfoBase> makeCopy(DomItem &self) const
+ std::shared_ptr<ExternalItemInfoBase> makeCopy(const DomItem &self) const
{
return std::static_pointer_cast<ExternalItemInfoBase>(doCopy(self));
}
@@ -444,7 +444,7 @@ template<typename T>
class ExternalItemInfo final : public ExternalItemInfoBase
{
protected:
- std::shared_ptr<OwningItem> doCopy(DomItem &) const override
+ std::shared_ptr<OwningItem> doCopy(const DomItem &) const override
{
return std::make_shared<ExternalItemInfo>(*this);
}
@@ -465,7 +465,7 @@ public:
{
}
- std::shared_ptr<ExternalItemInfo> makeCopy(DomItem &self) const
+ std::shared_ptr<ExternalItemInfo> makeCopy(const DomItem &self) const
{
return std::static_pointer_cast<ExternalItemInfo>(doCopy(self));
}
@@ -473,7 +473,7 @@ public:
std::shared_ptr<ExternalOwningItem> currentItem() const override {
return current;
}
- DomItem currentItem(DomItem &self) const override { return self.copy(current); }
+ DomItem currentItem(const DomItem &self) const override { return self.copy(current); }
std::shared_ptr<T> current;
};
@@ -497,7 +497,7 @@ class QMLDOM_EXPORT LoadInfo final : public OwningItem
Q_DECLARE_TR_FUNCTIONS(LoadInfo);
protected:
- std::shared_ptr<OwningItem> doCopy(DomItem &self) const override;
+ std::shared_ptr<OwningItem> doCopy(const DomItem &self) const override;
public:
constexpr static DomType kindValue = DomType::LoadInfo;
@@ -532,23 +532,23 @@ public:
}
}
- Path canonicalPath(DomItem &self) const override;
+ Path canonicalPath(const DomItem &self) const override;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor) override;
- std::shared_ptr<LoadInfo> makeCopy(DomItem &self) const
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override;
+ std::shared_ptr<LoadInfo> makeCopy(const DomItem &self) const
{
return std::static_pointer_cast<LoadInfo>(doCopy(self));
}
- void addError(DomItem &self, ErrorMessage msg) override
+ void addError(const DomItem &self, ErrorMessage msg) override
{
self.path(elementCanonicalPath()).addError(msg);
}
- void addEndCallback(DomItem &self, std::function<void(Path, DomItem &, DomItem &)> callback);
+ void addEndCallback(const DomItem &self, std::function<void(Path, const DomItem &, const DomItem &)> callback);
- void advanceLoad(DomItem &self);
- void finishedLoadingDep(DomItem &self, const Dependency &d);
- void execEnd(DomItem &self);
+ void advanceLoad(const DomItem &self);
+ void finishedLoadingDep(const DomItem &self, const Dependency &d);
+ void execEnd(const DomItem &self);
Status status() const
{
@@ -593,15 +593,15 @@ public:
}
private:
- void doAddDependencies(DomItem &self);
- void addDependency(DomItem &self, const Dependency &dep);
+ void doAddDependencies(const DomItem &self);
+ void addDependency(const DomItem &self, const Dependency &dep);
Path m_elementCanonicalPath;
Status m_status;
int m_nLoaded;
QQueue<Dependency> m_toDo;
QList<Dependency> m_inProgress;
- QList<std::function<void(Path, DomItem &, DomItem &)>> m_endCallbacks;
+ QList<std::function<void(Path, const DomItem &, const DomItem &)>> m_endCallbacks;
};
enum class EnvLookup { Normal, NoBase, BaseOnly };
@@ -615,8 +615,8 @@ public:
enum class Cached { None, First, All };
Q_ENUM(Cached)
- static RefCacheEntry forPath(DomItem &el, Path canonicalPath);
- static bool addForPath(DomItem &el, Path canonicalPath, const RefCacheEntry &entry,
+ static RefCacheEntry forPath(const DomItem &el, Path canonicalPath);
+ static bool addForPath(const DomItem &el, Path canonicalPath, const RefCacheEntry &entry,
AddOption addOption = AddOption::KeepExisting);
Cached cached = Cached::None;
@@ -628,7 +628,7 @@ class QMLDOM_EXPORT DomEnvironment final : public DomTop
Q_GADGET
Q_DECLARE_TR_FUNCTIONS(DomEnvironment);
protected:
- std::shared_ptr<OwningItem> doCopy(DomItem &self) const override;
+ std::shared_ptr<OwningItem> doCopy(const DomItem &self) const override;
public:
enum class Option {
@@ -649,54 +649,54 @@ public:
Path canonicalPath() const override;
using DomTop::canonicalPath;
- bool iterateDirectSubpaths(DomItem &self, DirectVisitor) override;
- DomItem field(DomItem &self, QStringView name) const final override;
+ bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override;
+ DomItem field(const DomItem &self, QStringView name) const final override;
- std::shared_ptr<DomEnvironment> makeCopy(DomItem &self) const;
+ std::shared_ptr<DomEnvironment> makeCopy(const DomItem &self) const;
- void loadFile(DomItem &self, FileToLoad file, Callback loadCallback,
+ void loadFile(const DomItem &self, FileToLoad file, Callback loadCallback,
Callback directDepsCallback, Callback endCallback, LoadOptions loadOptions,
std::optional<DomType> fileType = std::optional<DomType>(),
ErrorHandler h = nullptr);
- void loadModuleDependency(DomItem &self, QString uri, Version v,
+ void loadModuleDependency(const DomItem &self, QString uri, Version v,
Callback loadCallback = nullptr, Callback endCallback = nullptr,
ErrorHandler = nullptr);
- void loadBuiltins(DomItem &self, Callback callback = nullptr, ErrorHandler h = nullptr);
+ void loadBuiltins(const DomItem &self, Callback callback = nullptr, ErrorHandler h = nullptr);
void removePath(const QString &path);
std::shared_ptr<DomUniverse> universe() const;
- QSet<QString> moduleIndexUris(DomItem &self, EnvLookup lookup = EnvLookup::Normal) const;
- QSet<int> moduleIndexMajorVersions(DomItem &self, QString uri,
+ QSet<QString> moduleIndexUris(const DomItem &self, EnvLookup lookup = EnvLookup::Normal) const;
+ QSet<int> moduleIndexMajorVersions(const DomItem &self, QString uri,
EnvLookup lookup = EnvLookup::Normal) const;
- std::shared_ptr<ModuleIndex> moduleIndexWithUri(DomItem &self, QString uri, int majorVersion,
+ std::shared_ptr<ModuleIndex> moduleIndexWithUri(const DomItem &self, QString uri, int majorVersion,
EnvLookup lookup, Changeable changeable,
ErrorHandler errorHandler = nullptr);
- std::shared_ptr<ModuleIndex> moduleIndexWithUri(DomItem &self, QString uri, int majorVersion,
+ std::shared_ptr<ModuleIndex> moduleIndexWithUri(const DomItem &self, QString uri, int majorVersion,
EnvLookup lookup = EnvLookup::Normal) const;
std::shared_ptr<ExternalItemInfo<QmlDirectory>>
- qmlDirectoryWithPath(DomItem &self, QString path, EnvLookup options = EnvLookup::Normal) const;
- QSet<QString> qmlDirectoryPaths(DomItem &self, EnvLookup options = EnvLookup::Normal) const;
+ qmlDirectoryWithPath(const DomItem &self, QString path, EnvLookup options = EnvLookup::Normal) const;
+ QSet<QString> qmlDirectoryPaths(const DomItem &self, EnvLookup options = EnvLookup::Normal) const;
std::shared_ptr<ExternalItemInfo<QmldirFile>>
- qmldirFileWithPath(DomItem &self, QString path, EnvLookup options = EnvLookup::Normal) const;
- QSet<QString> qmldirFilePaths(DomItem &self, EnvLookup options = EnvLookup::Normal) const;
+ qmldirFileWithPath(const DomItem &self, QString path, EnvLookup options = EnvLookup::Normal) const;
+ QSet<QString> qmldirFilePaths(const DomItem &self, EnvLookup options = EnvLookup::Normal) const;
std::shared_ptr<ExternalItemInfoBase>
- qmlDirWithPath(DomItem &self, QString path, EnvLookup options = EnvLookup::Normal) const;
- QSet<QString> qmlDirPaths(DomItem &self, EnvLookup options = EnvLookup::Normal) const;
+ qmlDirWithPath(const DomItem &self, QString path, EnvLookup options = EnvLookup::Normal) const;
+ QSet<QString> qmlDirPaths(const DomItem &self, EnvLookup options = EnvLookup::Normal) const;
std::shared_ptr<ExternalItemInfo<QmlFile>>
- qmlFileWithPath(DomItem &self, QString path, EnvLookup options = EnvLookup::Normal) const;
- QSet<QString> qmlFilePaths(DomItem &self, EnvLookup lookup = EnvLookup::Normal) const;
+ qmlFileWithPath(const DomItem &self, QString path, EnvLookup options = EnvLookup::Normal) const;
+ QSet<QString> qmlFilePaths(const DomItem &self, EnvLookup lookup = EnvLookup::Normal) const;
std::shared_ptr<ExternalItemInfo<JsFile>>
- jsFileWithPath(DomItem &self, QString path, EnvLookup options = EnvLookup::Normal) const;
- QSet<QString> jsFilePaths(DomItem &self, EnvLookup lookup = EnvLookup::Normal) const;
+ jsFileWithPath(const DomItem &self, QString path, EnvLookup options = EnvLookup::Normal) const;
+ QSet<QString> jsFilePaths(const DomItem &self, EnvLookup lookup = EnvLookup::Normal) const;
std::shared_ptr<ExternalItemInfo<QmltypesFile>>
- qmltypesFileWithPath(DomItem &self, QString path, EnvLookup options = EnvLookup::Normal) const;
- QSet<QString> qmltypesFilePaths(DomItem &self, EnvLookup lookup = EnvLookup::Normal) const;
+ qmltypesFileWithPath(const DomItem &self, QString path, EnvLookup options = EnvLookup::Normal) const;
+ QSet<QString> qmltypesFilePaths(const DomItem &self, EnvLookup lookup = EnvLookup::Normal) const;
std::shared_ptr<ExternalItemInfo<GlobalScope>>
- globalScopeWithName(DomItem &self, QString name, EnvLookup lookup = EnvLookup::Normal) const;
+ globalScopeWithName(const DomItem &self, QString name, EnvLookup lookup = EnvLookup::Normal) const;
std::shared_ptr<ExternalItemInfo<GlobalScope>>
- ensureGlobalScopeWithName(DomItem &self, QString name, EnvLookup lookup = EnvLookup::Normal);
- QSet<QString> globalScopeNames(DomItem &self, EnvLookup lookup = EnvLookup::Normal) const;
+ ensureGlobalScopeWithName(const DomItem &self, QString name, EnvLookup lookup = EnvLookup::Normal);
+ QSet<QString> globalScopeNames(const DomItem &self, EnvLookup lookup = EnvLookup::Normal) const;
explicit DomEnvironment(QStringList loadPaths, Options options = Option::SingleThreaded,
std::shared_ptr<DomUniverse> universe = nullptr);
@@ -704,7 +704,7 @@ public:
Options options = Option::SingleThreaded);
DomEnvironment(const DomEnvironment &o) = delete;
static DomItem create(QStringList loadPaths, Options options = Option::SingleThreaded,
- DomItem &universe = DomItem::empty);
+ const DomItem &universe = DomItem::empty);
std::shared_ptr<ExternalItemInfo<QmlFile>>
addQmlFile(std::shared_ptr<QmlFile> file, AddOption option = AddOption::KeepExisting);
@@ -719,14 +719,14 @@ public:
std::shared_ptr<ExternalItemInfo<GlobalScope>>
addGlobalScope(std::shared_ptr<GlobalScope> file, AddOption option = AddOption::KeepExisting);
- bool commitToBase(DomItem &self, std::shared_ptr<DomEnvironment> validEnv = nullptr);
+ bool commitToBase(const DomItem &self, std::shared_ptr<DomEnvironment> validEnv = nullptr);
- void addLoadInfo(DomItem &self, std::shared_ptr<LoadInfo> loadInfo);
+ void addLoadInfo(const DomItem &self, std::shared_ptr<LoadInfo> loadInfo);
std::shared_ptr<LoadInfo> loadInfo(Path path) const;
QList<Path> loadInfoPaths() const;
QHash<Path, std::shared_ptr<LoadInfo>> loadInfos() const;
- void loadPendingDependencies(DomItem &self);
- bool finishLoadingDependencies(DomItem &self, int waitMSec = 30000);
+ void loadPendingDependencies(const DomItem &self);
+ bool finishLoadingDependencies(const DomItem &self, int waitMSec = 30000);
void addWorkForLoadInfo(Path elementCanonicalPath);
Options options() const;
@@ -741,7 +741,7 @@ public:
static QList<Import> defaultImplicitImports();
QList<Import> implicitImports() const;
- void addAllLoadedCallback(DomItem &self, Callback c);
+ void addAllLoadedCallback(const DomItem &self, Callback c);
void clearReferenceCache();
void setLoadPaths(const QStringList &v);
@@ -752,13 +752,13 @@ private:
QSet<QString> getStrings(function_ref<QSet<QString>()> getBase, const QMap<QString, T> &selfMap,
EnvLookup lookup) const;
- Callback callbackForQmlDirectory(DomItem &self, Callback loadCallback,
+ Callback callbackForQmlDirectory(const DomItem &self, Callback loadCallback,
Callback directDepsCallback, Callback endCallback);
- Callback callbackForQmlFile(DomItem &self, Callback loadCallback, Callback directDepsCallback,
+ Callback callbackForQmlFile(const DomItem &self, Callback loadCallback, Callback directDepsCallback,
Callback endCallback);
- Callback callbackForQmltypesFile(DomItem &self, Callback loadCallback,
+ Callback callbackForQmltypesFile(const DomItem &self, Callback loadCallback,
Callback directDepsCallback, Callback endCallback);
- Callback callbackForQmldirFile(DomItem &self, Callback loadCallback,
+ Callback callbackForQmldirFile(const DomItem &self, Callback loadCallback,
Callback directDepsCallback, Callback endCallback);
std::shared_ptr<ModuleIndex> lookupModuleInEnv(const QString &uri, int majorVersion) const;
@@ -770,7 +770,7 @@ private:
Origin fromBase = FromGlobal;
};
// helper function used by the moduleIndexWithUri methods
- ModuleLookupResult moduleIndexWithUriHelper(DomItem &self, QString uri, int majorVersion,
+ ModuleLookupResult moduleIndexWithUriHelper(const DomItem &self, QString uri, int majorVersion,
EnvLookup lookup = EnvLookup::Normal) const;
const Options m_options;
diff --git a/src/qmlls/qqmlcodemodel.cpp b/src/qmlls/qqmlcodemodel.cpp
index efb2bc0695..a5f589a979 100644
--- a/src/qmlls/qqmlcodemodel.cpp
+++ b/src/qmlls/qqmlcodemodel.cpp
@@ -188,7 +188,7 @@ void QQmlCodeModel::indexDirectory(const QString &path, int depthLeft)
FileToLoad::fromFileSystem(newCurrent.ownerAs<DomEnvironment>(), fPath, options);
if (!fileToLoad.canonicalPath().isEmpty()) {
newCurrent.loadBuiltins();
- newCurrent.loadFile(fileToLoad, [](Path, DomItem &, DomItem &) {}, {});
+ newCurrent.loadFile(fileToLoad, [](Path, const DomItem &, const DomItem &) {}, {});
newCurrent.loadPendingDependencies();
newCurrent.commitToBase(m_validEnv.ownerAs<DomEnvironment>());
}
@@ -427,7 +427,7 @@ void QQmlCodeModel::newDocForOpenFile(const QByteArray &url, int version, const
options.setFlag(DomCreationOption::WithSemanticAnalysis);
newCurrent.loadFile(
FileToLoad::fromMemory(newCurrent.ownerAs<DomEnvironment>(), fPath, docText, options),
- [&p](Path, DomItem &, DomItem &newValue) { p = newValue.fileObject().canonicalPath(); },
+ [&p](Path, const DomItem &, const DomItem &newValue) { p = newValue.fileObject().canonicalPath(); },
{});
newCurrent.loadPendingDependencies();
if (p) {
diff --git a/src/qmlls/qqmlcompletionsupport.cpp b/src/qmlls/qqmlcompletionsupport.cpp
index 93b4a472df..321d205b1f 100644
--- a/src/qmlls/qqmlcompletionsupport.cpp
+++ b/src/qmlls/qqmlcompletionsupport.cpp
@@ -172,7 +172,7 @@ void CompletionRequest::sendCompletions(QmlLsp::OpenDocumentSnapshot &doc)
m_response.sendResponse(res);
}
-static QList<CompletionItem> importCompletions(DomItem &file, const CompletionContextStrings &ctx)
+static QList<CompletionItem> importCompletions(const DomItem &file, const CompletionContextStrings &ctx)
{
// returns completions for import statements, ctx is supposed to be in an import statement
QList<CompletionItem> res;
@@ -272,13 +272,13 @@ static QList<CompletionItem> idsCompletions(DomItem component)
return res;
}
-static QList<CompletionItem> bindingsCompletions(DomItem &containingObject)
+static QList<CompletionItem> bindingsCompletions(const DomItem &containingObject)
{
// returns valid bindings completions (i.e. reachable properties and signal handlers)
QList<CompletionItem> res;
qCDebug(complLog) << "binding completions";
containingObject.visitPrototypeChain(
- [&res](DomItem &it) {
+ [&res](const DomItem &it) {
qCDebug(complLog) << "prototypeChain" << it.internalKindStr() << it.canonicalPath();
if (const QmlObject *itPtr = it.as<QmlObject>()) {
// signal handlers
@@ -310,7 +310,7 @@ static QList<CompletionItem> bindingsCompletions(DomItem &containingObject)
return res;
}
-static QList<CompletionItem> reachableSymbols(DomItem &context, const CompletionContextStrings &ctx,
+static QList<CompletionItem> reachableSymbols(const DomItem &context, const CompletionContextStrings &ctx,
TypeCompletionsType typeCompletionType,
FunctionCompletion completeMethodCalls)
{
@@ -319,7 +319,7 @@ static QList<CompletionItem> reachableSymbols(DomItem &context, const Completion
QMap<CompletionItemKind, QSet<QString>> symbols;
QSet<quintptr> visited;
QList<Path> visitedRefs;
- auto addLocalSymbols = [&res, typeCompletionType, completeMethodCalls, &symbols](DomItem &el) {
+ auto addLocalSymbols = [&res, typeCompletionType, completeMethodCalls, &symbols](const DomItem &el) {
switch (typeCompletionType) {
case TypeCompletionsType::None:
return false;
@@ -411,8 +411,8 @@ static QList<CompletionItem> reachableSymbols(DomItem &context, const Completion
} else {
QList<QStringView> baseItems = ctx.base().split(u'.', Qt::SkipEmptyParts);
Q_ASSERT(!baseItems.isEmpty());
- auto addReachableSymbols = [&visited, &visitedRefs, &addLocalSymbols](Path,
- DomItem &it) -> bool {
+ auto addReachableSymbols = [&visited, &visitedRefs, &addLocalSymbols](
+ Path, const DomItem &it) -> bool {
qCDebug(complLog) << "adding directly accessible symbols of" << it.internalKindStr()
<< it.canonicalPath();
it.visitDirectAccessibleScopes(addLocalSymbols, VisitPrototypesOption::Normal,
diff --git a/src/qmlls/qqmllsutils.cpp b/src/qmlls/qqmllsutils.cpp
index 58bfecdc14..4edc062f99 100644
--- a/src/qmlls/qqmllsutils.cpp
+++ b/src/qmlls/qqmllsutils.cpp
@@ -35,7 +35,7 @@ Q_LOGGING_CATEGORY(QQmlLSUtilsLog, "qt.languageserver.utils")
\internal
Helper to check if item is a Field Member Expression \c {<someExpression>.propertyName}.
*/
-static bool isFieldMemberExpression(DomItem &item)
+static bool isFieldMemberExpression(const DomItem &item)
{
return item.internalKind() == DomType::ScriptBinaryExpression
&& item.field(Fields::operation).value().toInteger()
@@ -47,7 +47,7 @@ static bool isFieldMemberExpression(DomItem &item)
Helper to check if item is a Field Member Access \c memberAccess in
\c {<someExpression>.memberAccess}.
*/
-static bool isFieldMemberAccess(DomItem &item)
+static bool isFieldMemberAccess(const DomItem &item)
{
auto parent = item.directParent();
if (!isFieldMemberExpression(parent))
@@ -289,7 +289,7 @@ DomItem QQmlLSUtils::baseObject(DomItem object)
return base;
}
-static std::optional<QQmlLSUtilsLocation> locationFromDomItem(DomItem &item,
+static std::optional<QQmlLSUtilsLocation> locationFromDomItem(const DomItem &item,
const QString &regionName = QString())
{
QQmlLSUtilsLocation location;
@@ -346,7 +346,7 @@ std::optional<QQmlLSUtilsLocation> QQmlLSUtils::findTypeDefinitionOf(DomItem obj
const QString bindingName = binding->name();
object.containingObject().visitLookup(
bindingName,
- [&propertyDefinition](DomItem &item) {
+ [&propertyDefinition](const DomItem &item) {
if (item.internalKind() == QQmlJS::Dom::DomType::PropertyDefinition) {
propertyDefinition = item;
return false;
@@ -370,7 +370,7 @@ std::optional<QQmlLSUtilsLocation> QQmlLSUtils::findTypeDefinitionOf(DomItem obj
case QQmlJS::Dom::DomType::ScriptIdentifierExpression: {
if (object.directParent().internalKind() == DomType::ScriptType) {
DomItem type =
- object.filterUp([](DomType k, DomItem &) { return k == DomType::ScriptType; },
+ object.filterUp([](DomType k, const DomItem &) { return k == DomType::ScriptType; },
FilterUpOptions::ReturnOuter);
const QString name = type.field(Fields::typeName).value().toString();
@@ -419,7 +419,7 @@ static bool findDefinitionFromItem(DomItem item, const QString &name)
static DomItem findJSIdentifierDefinition(DomItem item, const QString &name)
{
DomItem definitionOfItem;
- item.visitUp([&name, &definitionOfItem](DomItem &i) {
+ item.visitUp([&name, &definitionOfItem](const DomItem &i) {
if (findDefinitionFromItem(i, name)) {
definitionOfItem = i;
return false;
@@ -435,7 +435,7 @@ static DomItem findJSIdentifierDefinition(DomItem item, const QString &name)
// special case: somebody asks for usages of a function parameter from its definition
// function parameters are defined in the method's scope
- if (DomItem res = item.filterUp([](DomType k, DomItem &) { return k == DomType::MethodInfo; },
+ if (DomItem res = item.filterUp([](DomType k, const DomItem &) { return k == DomType::MethodInfo; },
FilterUpOptions::ReturnOuter)) {
DomItem candidate = res.field(Fields::body).field(Fields::scriptElement);
if (findDefinitionFromItem(candidate, name)) {
@@ -582,7 +582,7 @@ static void findUsagesOfNonJSIdentifiers(DomItem item, const QString &name,
return namesToCheck.contains(nameToCheck);
};
- auto findUsages = [&targetType, &result, &name, &checkName](Path, DomItem &current,
+ auto findUsages = [&targetType, &result, &name, &checkName](Path, const DomItem &current,
bool) -> bool {
bool resolveType = false;
bool continueForChildren = true;
@@ -691,7 +691,7 @@ static void findUsagesHelper(DomItem item, const QString &name, QList<QQmlLSUtil
definitionOfItem.visitTree(
Path(), emptyChildrenVisitor, VisitOption::VisitAdopted | VisitOption::Recurse,
- [&name, &result](Path, DomItem &item, bool) -> bool {
+ [&name, &result](Path, const DomItem &item, bool) -> bool {
qCDebug(QQmlLSUtilsLog) << "Visiting a " << item.internalKindStr();
if (item.internalKind() == DomType::ScriptIdentifierExpression
&& item.field(Fields::identifier).value().toString() == name) {
@@ -812,7 +812,7 @@ propertyFromReferrerScope(const QQmlJSScope::ConstPtr &referrerScope, const QStr
return {};
}
-static QQmlJSScope::ConstPtr findScopeInConnections(QQmlJSScope::ConstPtr scope, DomItem &item)
+static QQmlJSScope::ConstPtr findScopeInConnections(QQmlJSScope::ConstPtr scope, const DomItem &item)
{
if (!scope || (scope->baseType() && scope->baseType()->internalName() != u"QQmlConnections"_s))
return {};
diff --git a/tests/auto/qmldom/domitem/tst_qmldomitem.h b/tests/auto/qmldom/domitem/tst_qmldomitem.h
index 9c6507510e..a400f02cf6 100644
--- a/tests/auto/qmldom/domitem/tst_qmldomitem.h
+++ b/tests/auto/qmldom/domitem/tst_qmldomitem.h
@@ -28,7 +28,7 @@ QT_BEGIN_NAMESPACE
namespace QQmlJS {
namespace Dom {
-inline DomItem wrapInt(DomItem &self, const PathEls::PathComponent &p, const int &i)
+inline DomItem wrapInt(const DomItem &self, const PathEls::PathComponent &p, const int &i)
{
return self.subDataItem(p, i);
}
@@ -536,13 +536,13 @@ private slots:
QList<DomItem> rects;
obj1.resolve(
Path::Current(PathCurrent::Lookup).field(Fields::type).key(u"Rectangle"_s),
- [&rects](Path, DomItem &el) {
+ [&rects](Path, const DomItem &el) {
rects.append(el);
return true;
},
{});
QVERIFY(rects.size() == 1);
- for (DomItem &el : rects) {
+ for (const DomItem &el : rects) {
QCOMPARE(rect.first(), el);
}
}
@@ -571,7 +571,7 @@ private slots:
DomItem tFile;
env.loadFile(
FileToLoad::fromFileSystem(env.ownerAs<DomEnvironment>(), testFile1),
- [&tFile](Path, DomItem &, DomItem &newIt) { tFile = newIt.fileObject(); },
+ [&tFile](Path, const DomItem &, const DomItem &newIt) { tFile = newIt.fileObject(); },
LoadOption::DefaultLoad);
env.loadPendingDependencies();
@@ -654,7 +654,7 @@ private slots:
QCOMPARE(obj.name(), u"MyItem");
}
- static void checkAliases(DomItem &qmlObj)
+ static void checkAliases(const DomItem &qmlObj)
{
using namespace Qt::StringLiterals;
@@ -747,7 +747,7 @@ private slots:
DomItem tFile;
env.loadFile(
FileToLoad::fromFileSystem(env.ownerAs<DomEnvironment>(), testFile1),
- [&tFile](Path, DomItem &, DomItem &newIt) { tFile = newIt.fileObject(); },
+ [&tFile](Path, const DomItem &, const DomItem &newIt) { tFile = newIt.fileObject(); },
LoadOption::DefaultLoad);
env.loadPendingDependencies();
@@ -769,7 +769,7 @@ private slots:
DomItem tFile;
env.loadFile(
FileToLoad::fromFileSystem(env.ownerAs<DomEnvironment>(), testFile),
- [&tFile](Path, DomItem &, DomItem &newIt) { tFile = newIt.fileObject(); },
+ [&tFile](Path, const DomItem &, const DomItem &newIt) { tFile = newIt.fileObject(); },
LoadOption::DefaultLoad);
env.loadPendingDependencies();
@@ -803,7 +803,7 @@ private slots:
DomItem tFile;
env.loadFile(
FileToLoad::fromFileSystem(env.ownerAs<DomEnvironment>(), testFile),
- [&tFile](Path, DomItem &, DomItem &newIt) { tFile = newIt.fileObject(); },
+ [&tFile](Path, const DomItem &, const DomItem &newIt) { tFile = newIt.fileObject(); },
LoadOption::DefaultLoad);
env.loadPendingDependencies();
@@ -864,7 +864,7 @@ private slots:
env.loadFile(
FileToLoad::fromFileSystem(env.ownerAs<DomEnvironment>(), fileName,
WithSemanticAnalysis),
- [&tFile](Path, DomItem &, DomItem &newIt) { tFile = newIt.fileObject(); },
+ [&tFile](Path, const DomItem &, const DomItem &newIt) { tFile = newIt.fileObject(); },
LoadOption::DefaultLoad);
env.loadPendingDependencies();
@@ -2464,12 +2464,12 @@ private slots:
env.loadFile(
FileToLoad::fromFileSystem(env.ownerAs<DomEnvironment>(), filePathA, options),
- [&fileA](Path, DomItem &, DomItem &newIt) { fileA = newIt.fileObject(); },
+ [&fileA](Path, const DomItem &, const DomItem &newIt) { fileA = newIt.fileObject(); },
LoadOption::DefaultLoad);
env.loadFile(
FileToLoad::fromFileSystem(env.ownerAs<DomEnvironment>(), filePathB, options),
- [&fileB](Path, DomItem &, DomItem &newIt) { fileB = newIt.fileObject(); },
+ [&fileB](Path, const DomItem &, const DomItem &newIt) { fileB = newIt.fileObject(); },
LoadOption::DefaultLoad);
env.loadPendingDependencies();
@@ -2491,14 +2491,14 @@ private:
env.loadFile(
FileToLoad::fromFileSystem(env.ownerAs<DomEnvironment>(), path, options),
- [&tFile](Path, DomItem &, DomItem &newIt) { tFile = newIt.fileObject(); },
+ [&tFile](Path, const DomItem &, const DomItem &newIt) { tFile = newIt.fileObject(); },
LoadOption::DefaultLoad);
env.loadPendingDependencies();
return tFile.rootQmlObject(GoTo::MostLikely);
}
- void fieldMemberExpressionHelper(DomItem &actual, const QStringList &expected)
+ void fieldMemberExpressionHelper(const DomItem &actual, const QStringList &expected)
{
Q_ASSERT(!expected.isEmpty());
auto currentString = expected.rbegin();
diff --git a/tests/benchmarks/qml/qmldom/tst_qmldomconstruction.cpp b/tests/benchmarks/qml/qmldom/tst_qmldomconstruction.cpp
index 2c713281ee..3c95b77784 100644
--- a/tests/benchmarks/qml/qmldom/tst_qmldomconstruction.cpp
+++ b/tests/benchmarks/qml/qmldom/tst_qmldomconstruction.cpp
@@ -61,7 +61,7 @@ void tst_qmldomconstruction::domConstructionTime()
env.loadFile(
FileToLoad::fromFileSystem(env.ownerAs<DomEnvironment>(), fileName, withScope),
- [&tFile](Path, DomItem &, DomItem &newIt) { tFile = newIt.fileObject(); },
+ [&tFile](Path, const DomItem &, const DomItem &newIt) { tFile = newIt.fileObject(); },
LoadOption::DefaultLoad);
env.loadPendingDependencies();
}