Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qqmldomscriptelements.cpp
Go to the documentation of this file.
1// Copyright (C) 2023 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "qqmldom_utils_p.h"
5#include "qqmldomitem_p.h"
6#include "qqmldompath_p.h"
8#include <memory>
9#include <utility>
10#include <variant>
11
12using namespace QQmlJS::Dom::ScriptElements;
16
74static bool wrap(const QQmlJS::Dom::DomItem &self, QQmlJS::Dom::DirectVisitor visitor, QStringView field,
76{
77 if (!value)
78 return true;
79
80 const bool b =
81 self.dvItemField(visitor, field, [&self, field, &value]() -> QQmlJS::Dom::DomItem {
82 const QQmlJS::Dom::Path pathFromOwner{ self.pathFromOwner().field(field) };
83 return self.subScriptElementWrapperItem(value);
84 });
85 return b;
86}
87
92static bool wrap(const QQmlJS::Dom::DomItem &self, QQmlJS::Dom::DirectVisitor visitor, QStringView field,
93 const ScriptList &value)
94{
95 const bool b =
96 self.dvItemField(visitor, field, [&self, field, &value]() -> QQmlJS::Dom::DomItem {
97 const QQmlJS::Dom::Path pathFromOwner{ self.pathFromOwner().field(field) };
98 return self.subListItem(value.asList(pathFromOwner));
99 });
100 return b;
101}
102
104{
105 bool cont = true;
106 for (auto it = m_children.begin(); it != m_children.end(); ++it) {
107 cont &= std::visit(
108 [&self, &visitor, &it](auto &&e) { return wrap(self, visitor, it->first, e); },
109 it->second);
110 }
111 for (auto it = m_values.begin(); it != m_values.end(); ++it) {
112 cont &= self.dvValueField(visitor, it->first, it->second);
113 }
114 return cont;
115}
116
118{
119 BaseT::updatePathFromOwner(p);
120 for (auto it = m_children.begin(); it != m_children.end(); ++it) {
121 std::visit(qOverloadedVisitor{ [&p, &it](ScriptElementVariant &e) {
122 e.base()->updatePathFromOwner(p.field(it->first));
123 },
124 [&p, &it](ScriptList &list) {
125 list.updatePathFromOwner(p.field(it->first));
126 } },
127 it->second);
128 }
129}
130
132{
133 BaseT::createFileLocations(base);
134 for (auto it = m_children.begin(); it != m_children.end(); ++it) {
135 std::visit(
137 [&base](ScriptElementVariant &e) { e.base()->createFileLocations(base); },
138 [&base](ScriptList &list) { list.createFileLocations(base); } },
139 it->second);
140 }
141}
142
144{
145 // TODO: test me
146 bool cont = true;
147 cont &= wrap(self, visitor, Fields::statements, m_statements);
148 return cont;
149}
150
152{
153 BaseT::updatePathFromOwner(p);
154 m_statements.updatePathFromOwner(p.field(Fields::statements));
155}
156
158{
159 BaseT::createFileLocations(base);
160 m_statements.createFileLocations(base);
161}
162
164{
165 bool cont = true;
166 cont &= self.dvValueField(visitor, Fields::identifier, m_name);
167 return cont;
168}
169
171{
172 bool cont = true;
173 std::visit([&cont, &visitor,
174 &self](auto &&e) { cont &= self.dvValueField(visitor, Fields::value, e); },
175 m_value);
176 return cont;
177}
178
180{
181 // TODO: test me
182 bool cont = true;
183 cont &= wrap(self, visitor, Fields::condition, m_condition);
184 cont &= wrap(self, visitor, Fields::consequence, m_consequence);
185 cont &= wrap(self, visitor, Fields::alternative, m_alternative);
186 return cont;
187}
188
190{
191 BaseT::updatePathFromOwner(p);
192 if (auto ptr = m_condition.base())
193 ptr->updatePathFromOwner(p.field(Fields::condition));
194 if (auto ptr = m_consequence.base())
195 ptr->updatePathFromOwner(p.field(Fields::consequence));
196 if (auto ptr = m_alternative.base())
197 ptr->updatePathFromOwner(p.field(Fields::alternative));
198}
199
201{
202 BaseT::createFileLocations(base);
203 if (auto ptr = m_condition.base())
204 ptr->createFileLocations(base);
205 if (auto ptr = m_consequence.base())
206 ptr->createFileLocations(base);
207 if (auto ptr = m_alternative.base())
208 ptr->createFileLocations(base);
209}
210
212{
213 bool cont = true;
214 cont &= wrap(self, visitor, Fields::initializer, m_initializer);
215 cont &= wrap(self, visitor, Fields::declarations, m_declarations);
216 cont &= wrap(self, visitor, Fields::condition, m_condition);
217 cont &= wrap(self, visitor, Fields::expression, m_expression);
218 cont &= wrap(self, visitor, Fields::body, m_body);
219 return cont;
220}
221
223{
224 BaseT::updatePathFromOwner(p);
225 if (auto ptr = m_initializer.base())
226 ptr->updatePathFromOwner(p.field(Fields::initializer));
227 if (auto ptr = m_declarations.base())
228 ptr->updatePathFromOwner(p.field(Fields::declarations));
229 if (auto ptr = m_condition.base())
230 ptr->updatePathFromOwner(p.field(Fields::condition));
231 if (auto ptr = m_expression.base())
232 ptr->updatePathFromOwner(p.field(Fields::expression));
233 if (auto ptr = m_body.base())
234 ptr->updatePathFromOwner(p.field(Fields::body));
235}
236
238{
239 BaseT::createFileLocations(base);
240 if (auto ptr = m_initializer.base())
241 ptr->createFileLocations(base);
242 if (auto ptr = m_declarations.base())
243 ptr->createFileLocations(base);
244 if (auto ptr = m_condition.base())
245 ptr->createFileLocations(base);
246 if (auto ptr = m_expression.base())
247 ptr->createFileLocations(base);
248 if (auto ptr = m_body.base())
249 ptr->createFileLocations(base);
250}
251
253{
254 bool cont = true;
255 cont &= wrap(self, visitor, Fields::left, m_left);
256 cont &= self.dvValueField(visitor, Fields::operation, m_operator);
257 cont &= wrap(self, visitor, Fields::right, m_right);
258 return cont;
259}
260
262{
263 BaseT::updatePathFromOwner(p);
264 if (auto ptr = m_left.base())
265 ptr->updatePathFromOwner(p.field(Fields::left));
266 if (auto ptr = m_right.base())
267 ptr->updatePathFromOwner(p.field(Fields::right));
268}
269
271{
272 BaseT::createFileLocations(base);
273 if (auto ptr = m_left.base())
274 ptr->createFileLocations(base);
275 if (auto ptr = m_right.base())
276 ptr->createFileLocations(base);
277}
278
280{
281 bool cont = true;
282 cont &= self.dvValueField(visitor, Fields::scopeType, m_scopeType);
283 cont &= wrap(self, visitor, Fields::identifier, m_identifier);
284 cont &= wrap(self, visitor, Fields::initializer, m_initializer);
285 return cont;
286}
287
289{
290 BaseT::updatePathFromOwner(p);
291 if (auto ptr = m_identifier.base())
292 ptr->updatePathFromOwner(p.field(Fields::identifier));
293 if (auto ptr = m_initializer.base())
294 ptr->updatePathFromOwner(p.field(Fields::initializer));
295}
296
298{
299 BaseT::createFileLocations(base);
300 if (auto ptr = m_identifier.base())
301 ptr->createFileLocations(base);
302 if (auto ptr = m_initializer.base())
303 ptr->createFileLocations(base);
304}
305
307{
308 bool cont = true;
309 cont &= wrap(self, visitor, Fields::declarations, m_declarations);
310 return cont;
311}
312
314{
315 BaseT::updatePathFromOwner(p);
316 m_declarations.updatePathFromOwner(p.field(Fields::declarations));
317}
318
320{
321 BaseT::createFileLocations(base);
322 m_declarations.createFileLocations(base);
323}
324
326{
327 bool cont = true;
328 cont &= wrap(self, visitor, Fields::expression, m_expression);
329 return cont;
330}
331
333{
334 BaseT::updatePathFromOwner(p);
335 if (auto ptr = m_expression.base())
336 ptr->updatePathFromOwner(p.field(Fields::expression));
337}
338
340{
341 BaseT::createFileLocations(base);
342 if (auto ptr = m_expression.base())
343 ptr->createFileLocations(base);
344}
345
347{
348 for (auto &it : m_list) {
349 if (auto current = it.data()) {
350 if (auto genericElement =
351 std::get_if<std::shared_ptr<ScriptElements::GenericScriptElement>>(
352 &*current)) {
353 if ((*genericElement)->kind() == oldType)
354 (*genericElement)->setKind(newType);
355 }
356 }
357 }
358}
std::shared_ptr< AttachedInfoT< FileLocations > > Tree
Use this to contain any script element.
ScriptElement::PointerType< ScriptElement > base() const
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
void createFileLocations(const FileLocations::Tree &base) override
void createFileLocations(const FileLocations::Tree &base) override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
void createFileLocations(const FileLocations::Tree &base) override
void createFileLocations(const FileLocations::Tree &base) override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
void createFileLocations(const FileLocations::Tree &base) override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
void createFileLocations(const FileLocations::Tree &base) override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
void createFileLocations(const FileLocations::Tree &base) override
void replaceKindForGenericChildren(DomType oldType, DomType newType)
void createFileLocations(const FileLocations::Tree &base) override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
void createFileLocations(const FileLocations::Tree &base) override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
\inmodule QtCore
Definition qstringview.h:78
QSet< QString >::iterator it
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
static ControlElement< T > * ptr(QWidget *widget)
GLboolean GLboolean GLboolean b
GLfloat GLfloat p
[1]
static bool wrap(const QQmlJS::Dom::DomItem &self, QQmlJS::Dom::DirectVisitor visitor, QStringView field, const ScriptElementVariant &value)
static QT_BEGIN_NAMESPACE QAsn1Element wrap(quint8 type, const QAsn1Element &child)
static const uint base
Definition qurlidna.cpp:20
QList< int > list
[14]
A common base class for all the script elements.