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 return cont;
112}
113
115{
116 BaseT::updatePathFromOwner(p);
117 for (auto it = m_children.begin(); it != m_children.end(); ++it) {
118 std::visit(qOverloadedVisitor{ [&p, &it](ScriptElementVariant &e) {
119 e.base()->updatePathFromOwner(p.field(it->first));
120 },
121 [&p, &it](ScriptList &list) {
122 list.updatePathFromOwner(p.field(it->first));
123 } },
124 it->second);
125 }
126}
127
129{
130 BaseT::createFileLocations(base);
131 for (auto it = m_children.begin(); it != m_children.end(); ++it) {
132 std::visit(
134 [&base](ScriptElementVariant &e) { e.base()->createFileLocations(base); },
135 [&base](ScriptList &list) { list.createFileLocations(base); } },
136 it->second);
137 }
138}
139
141{
142 // TODO: test me
143 bool cont = true;
144 cont &= wrap(self, visitor, Fields::statements, m_statements);
145 return cont;
146}
147
149{
150 BaseT::updatePathFromOwner(p);
151 m_statements.updatePathFromOwner(p.field(Fields::statements));
152}
153
155{
156 BaseT::createFileLocations(base);
157 m_statements.createFileLocations(base);
158}
159
161{
162 bool cont = true;
163 cont &= self.dvValueField(visitor, Fields::identifier, m_name);
164 return cont;
165}
166
168{
169 bool cont = true;
170 std::visit([&cont, &visitor,
171 &self](auto &&e) { cont &= self.dvValueField(visitor, Fields::value, e); },
172 m_value);
173 return cont;
174}
175
177{
178 // TODO: test me
179 bool cont = true;
180 cont &= wrap(self, visitor, Fields::condition, m_condition);
181 cont &= wrap(self, visitor, Fields::consequence, m_consequence);
182 cont &= wrap(self, visitor, Fields::alternative, m_alternative);
183 return cont;
184}
185
187{
188 BaseT::updatePathFromOwner(p);
189 if (auto ptr = m_condition.base())
190 ptr->updatePathFromOwner(p.field(Fields::condition));
191 if (auto ptr = m_consequence.base())
192 ptr->updatePathFromOwner(p.field(Fields::consequence));
193 if (auto ptr = m_alternative.base())
194 ptr->updatePathFromOwner(p.field(Fields::alternative));
195}
196
198{
199 BaseT::createFileLocations(base);
200 if (auto ptr = m_condition.base())
201 ptr->createFileLocations(base);
202 if (auto ptr = m_consequence.base())
203 ptr->createFileLocations(base);
204 if (auto ptr = m_alternative.base())
205 ptr->createFileLocations(base);
206}
207
209{
210 bool cont = true;
211 cont &= wrap(self, visitor, Fields::initializer, m_initializer);
212 cont &= wrap(self, visitor, Fields::declarations, m_declarations);
213 cont &= wrap(self, visitor, Fields::condition, m_condition);
214 cont &= wrap(self, visitor, Fields::expression, m_expression);
215 cont &= wrap(self, visitor, Fields::body, m_body);
216 return cont;
217}
218
220{
221 BaseT::updatePathFromOwner(p);
222 if (auto ptr = m_initializer.base())
223 ptr->updatePathFromOwner(p.field(Fields::initializer));
224 if (auto ptr = m_declarations.base())
225 ptr->updatePathFromOwner(p.field(Fields::declarations));
226 if (auto ptr = m_condition.base())
227 ptr->updatePathFromOwner(p.field(Fields::condition));
228 if (auto ptr = m_expression.base())
229 ptr->updatePathFromOwner(p.field(Fields::expression));
230 if (auto ptr = m_body.base())
231 ptr->updatePathFromOwner(p.field(Fields::body));
232}
233
235{
236 BaseT::createFileLocations(base);
237 if (auto ptr = m_initializer.base())
238 ptr->createFileLocations(base);
239 if (auto ptr = m_declarations.base())
240 ptr->createFileLocations(base);
241 if (auto ptr = m_condition.base())
242 ptr->createFileLocations(base);
243 if (auto ptr = m_expression.base())
244 ptr->createFileLocations(base);
245 if (auto ptr = m_body.base())
246 ptr->createFileLocations(base);
247}
248
250{
251 bool cont = true;
252 cont &= wrap(self, visitor, Fields::left, m_left);
253 cont &= self.dvValueField(visitor, Fields::operation, m_operator);
254 cont &= wrap(self, visitor, Fields::right, m_right);
255 return cont;
256}
257
259{
260 BaseT::updatePathFromOwner(p);
261 if (auto ptr = m_left.base())
262 ptr->updatePathFromOwner(p.field(Fields::left));
263 if (auto ptr = m_right.base())
264 ptr->updatePathFromOwner(p.field(Fields::right));
265}
266
268{
269 BaseT::createFileLocations(base);
270 if (auto ptr = m_left.base())
271 ptr->createFileLocations(base);
272 if (auto ptr = m_right.base())
273 ptr->createFileLocations(base);
274}
275
277{
278 bool cont = true;
279 cont &= self.dvValueField(visitor, Fields::scopeType, m_scopeType);
280 cont &= wrap(self, visitor, Fields::identifier, m_identifier);
281 cont &= wrap(self, visitor, Fields::initializer, m_initializer);
282 return cont;
283}
284
286{
287 BaseT::updatePathFromOwner(p);
288 if (auto ptr = m_identifier.base())
289 ptr->updatePathFromOwner(p.field(Fields::identifier));
290 if (auto ptr = m_initializer.base())
291 ptr->updatePathFromOwner(p.field(Fields::initializer));
292}
293
295{
296 BaseT::createFileLocations(base);
297 if (auto ptr = m_identifier.base())
298 ptr->createFileLocations(base);
299 if (auto ptr = m_initializer.base())
300 ptr->createFileLocations(base);
301}
302
304{
305 bool cont = true;
306 cont &= wrap(self, visitor, Fields::declarations, m_declarations);
307 return cont;
308}
309
311{
312 BaseT::updatePathFromOwner(p);
313 m_declarations.updatePathFromOwner(p.field(Fields::declarations));
314}
315
317{
318 BaseT::createFileLocations(base);
319 m_declarations.createFileLocations(base);
320}
321
323{
324 bool cont = true;
325 cont &= wrap(self, visitor, Fields::expression, m_expression);
326 return cont;
327}
328
330{
331 BaseT::updatePathFromOwner(p);
332 if (auto ptr = m_expression.base())
333 ptr->updatePathFromOwner(p.field(Fields::expression));
334}
335
337{
338 BaseT::createFileLocations(base);
339 if (auto ptr = m_expression.base())
340 ptr->createFileLocations(base);
341}
342
344{
345 for (auto &it : m_list) {
346 if (auto current = it.data()) {
347 if (auto genericElement =
348 std::get_if<std::shared_ptr<ScriptElements::GenericScriptElement>>(
349 &*current)) {
350 if ((*genericElement)->kind() == oldType)
351 (*genericElement)->setKind(newType);
352 }
353 }
354 }
355}
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.