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
qqmldomexternalitems_p.h
Go to the documentation of this file.
1// Copyright (C) 2020 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#ifndef QQMLDOMEXTERNALITEMS_P_H
5#define QQMLDOMEXTERNALITEMS_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include "qqmldomitem_p.h"
19#include "qqmldomelements_p.h"
21#include "qqmldomcomments_p.h"
22
23#include <QtQml/private/qqmljsast_p.h>
24#include <QtQml/private/qqmljsengine_p.h>
25#include <QtQml/private/qqmldirparser_p.h>
26#include <QtQmlCompiler/private/qqmljstyperesolver_p.h>
27#include <QtCore/QMetaType>
28#include <QtCore/qregularexpression.h>
29
30#include <limits>
31#include <memory>
32
34
36
37namespace QQmlJS {
38namespace Dom {
39
51public:
53 const QString &filePath, const QDateTime &lastDataUpdateAt, const Path &pathFromTop,
54 int derivedFrom = 0, const QString &code = QString());
56 QString canonicalFilePath(const DomItem &) const override;
57 QString canonicalFilePath() const;
58 Path canonicalPath(const DomItem &) const override;
59 Path canonicalPath() const;
60 bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
61 {
62 bool cont = OwningItem::iterateDirectSubpaths(self, visitor);
63 cont = cont && self.dvValueLazyField(visitor, Fields::canonicalFilePath, [this]() {
64 return canonicalFilePath();
65 });
66 cont = cont
67 && self.dvValueLazyField(visitor, Fields::isValid, [this]() { return isValid(); });
68 if (!code().isNull())
69 cont = cont
70 && self.dvValueLazyField(visitor, Fields::code, [this]() { return code(); });
71 return cont;
72 }
73
74 bool iterateSubOwners(const DomItem &self, function_ref<bool(const DomItem &owner)> visitor) override
75 {
76 bool cont = OwningItem::iterateSubOwners(self, visitor);
77 cont = cont && self.field(Fields::components).visitKeys([visitor](const QString &, const DomItem &comps) {
78 return comps.visitIndexes([visitor](const DomItem &comp) {
79 return comp.field(Fields::objects).visitIndexes([visitor](const DomItem &qmlObj) {
80 if (const QmlObject *qmlObjPtr = qmlObj.as<QmlObject>())
81 return qmlObjPtr->iterateSubOwners(qmlObj, visitor);
82 Q_ASSERT(false);
83 return true;
84 });
85 });
86 });
87 return cont;
88 }
89
90 bool isValid() const {
92 return m_isValid;
93 }
94 void setIsValid(bool val) {
96 m_isValid = val;
97 }
98 // null code means invalid
99 const QString &code() const { return m_code; }
100
101protected:
105 bool m_isValid = false;
106};
107
109{
110protected:
111 std::shared_ptr<OwningItem> doCopy(const DomItem &) const override
112 {
113 return std::make_shared<QmlDirectory>(*this);
114 }
115
116public:
117 constexpr static DomType kindValue = DomType::QmlDirectory;
118 DomType kind() const override { return kindValue; }
120 const QString &filePath = QString(), const QStringList &dirList = QStringList(),
121 const QDateTime &lastDataUpdateAt = QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC),
122 int derivedFrom = 0);
123 QmlDirectory(const QmlDirectory &o) = default;
124
125 std::shared_ptr<QmlDirectory> makeCopy(const DomItem &self) const
126 {
127 return std::static_pointer_cast<QmlDirectory>(doCopy(self));
128 }
129
130 bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
131
132 const QMultiMap<QString, Export> &exports() const & { return m_exports; }
133
134 const QMultiMap<QString, QString> &qmlFiles() const & { return m_qmlFiles; }
135
136 bool addQmlFilePath(const QString &relativePath);
137
138private:
139 QMultiMap<QString, Export> m_exports;
140 QMultiMap<QString, QString> m_qmlFiles;
141};
142
144{
146protected:
147 std::shared_ptr<OwningItem> doCopy(const DomItem &) const override
148 {
149 auto copy = std::make_shared<QmldirFile>(*this);
150 return copy;
151 }
152
153public:
154 constexpr static DomType kindValue = DomType::QmldirFile;
155 DomType kind() const override { return kindValue; }
156
157 static ErrorGroups myParsingErrors();
158
160 const QString &filePath = QString(), const QString &code = QString(),
161 const QDateTime &lastDataUpdateAt = QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC),
162 int derivedFrom = 0)
163 : ExternalOwningItem(filePath, lastDataUpdateAt, Paths::qmldirFilePath(filePath),
164 derivedFrom, code)
165 {
166 }
167 QmldirFile(const QmldirFile &o) = default;
168
169 static std::shared_ptr<QmldirFile> fromPathAndCode(const QString &path, const QString &code);
170
171 std::shared_ptr<QmldirFile> makeCopy(const DomItem &self) const
172 {
173 return std::static_pointer_cast<QmldirFile>(doCopy(self));
174 }
175
176 bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
177
178 QmlUri uri() const { return m_uri; }
179
180 const QSet<int> &majorVersions() const & { return m_majorVersions; }
181
182 const QMultiMap<QString, Export> &exports() const & { return m_exports; }
183
184 const QList<Import> &imports() const & { return m_imports; }
185
186 const QList<Path> &qmltypesFilePaths() const & { return m_qmltypesFilePaths; }
187
188 QMap<QString, QString> qmlFiles() const;
189
190 bool designerSupported() const { return m_qmldir.designerSupported(); }
191
192 QStringList classNames() const { return m_qmldir.classNames(); }
193
194 QList<ModuleAutoExport> autoExports() const;
195 void setAutoExports(const QList<ModuleAutoExport> &autoExport);
196
197 void ensureInModuleIndex(const DomItem &self, const QString &uri) const;
198
199private:
200 void parse();
201 void setFromQmldir();
202
203 QmlUri m_uri;
204 QSet<int> m_majorVersions;
205 QQmlDirParser m_qmldir;
206 QList<QQmlDirParser::Plugin> m_plugins;
207 QList<Import> m_imports;
208 QList<ModuleAutoExport> m_autoExports;
209 QMultiMap<QString, Export> m_exports;
210 QList<Path> m_qmltypesFilePaths;
211};
212
214{
215protected:
216 std::shared_ptr<OwningItem> doCopy(const DomItem &) const override
217 {
218 auto copy = std::make_shared<JsFile>(*this);
219 return copy;
220 }
221
222public:
223 constexpr static DomType kindValue = DomType::JsFile;
224 DomType kind() const override { return kindValue; }
225 JsFile(const QString &filePath = QString(),
226 const QDateTime &lastDataUpdateAt = QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC),
227 const Path &pathFromTop = Path(), int derivedFrom = 0)
228 : ExternalOwningItem(filePath, lastDataUpdateAt, pathFromTop, derivedFrom)
229 {
230 }
231 JsFile(const QString &filePath = QString(), const QString &code = QString(),
232 const QDateTime &lastDataUpdateAt = QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC),
233 int derivedFrom = 0);
234 JsFile(const JsFile &o) = default;
235
236 std::shared_ptr<JsFile> makeCopy(const DomItem &self) const
237 {
238 return std::static_pointer_cast<JsFile>(doCopy(self));
239 }
240
241 bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const
242 override; // iterates the *direct* subpaths, returns false if a quick end was requested
243
244 std::shared_ptr<QQmlJS::Engine> engine() const { return m_engine; }
245 JsResource rootComponent() const { return m_rootComponent; }
246 void setFileLocationsTree(const FileLocations::Tree &v) { m_fileLocationsTree = std::move(v); }
247
248 static ErrorGroups myParsingErrors();
249
250 void writeOut(const DomItem &self, OutWriter &lw) const override;
251 void setExpression(const std::shared_ptr<ScriptExpression> &script) { m_script = script; }
252
253 void initPragmaLibrary() { m_pragmaLibrary = LegacyPragmaLibrary{}; };
254 void addFileImport(const QString &jsfile, const QString &module);
255 void addModuleImport(const QString &uri, const QString &version, const QString &module);
256
257private:
258 void writeOutDirectives(OutWriter &lw) const;
259
260 /*
261 Entities with Legacy prefix are here to support formatting of the discouraged
262 .import, .pragma directives in .js files.
263 Taking into account that usage of these directives is discouraged and
264 the fact that current usecase is limited to the formatting of .js, it's arguably should not
265 be exposed and kept private.
266
267 LegacyPragma corresponds to the only one existing .pragma library
268
269 LegacyImport is capable of representing the following import statements:
270 .import T_STRING_LITERAL as T_IDENTIFIER
271 .import T_IDENTIFIER (. T_IDENTIFIER)* (T_VERSION_NUMBER (. T_VERSION_NUMBER)?)? as T_IDENTIFIER
272
273 LegacyDirectivesCollector is a workaround for collecting those directives.
274 At the moment of writing .import, .pragma in .js files do not have corresponding
275 representative AST::Node-s. Collecting of those is happening during the lexing
276 */
277
278 struct LegacyPragmaLibrary
279 {
280 void writeOut(OutWriter &lw) const;
281 };
282
283 struct LegacyImport
284 {
285 QString fileName; // file import
286 QString uri; // module import
287 QString version; // used for module import
288 QString asIdentifier; // .import ... as T_Identifier
289
290 void writeOut(OutWriter &lw) const;
291 };
292
293 class LegacyDirectivesCollector : public QQmlJS::Directives
294 {
295 public:
296 LegacyDirectivesCollector(JsFile &file) : m_file(file){};
297
298 void pragmaLibrary() override { m_file.initPragmaLibrary(); };
299 void importFile(const QString &jsfile, const QString &module, int, int) override
300 {
301 m_file.addFileImport(jsfile, module);
302 };
303 void importModule(const QString &uri, const QString &version, const QString &module, int,
304 int) override
305 {
306 m_file.addModuleImport(uri, version, module);
307 };
308
309 private:
310 JsFile &m_file;
311 };
312
313private:
314 std::shared_ptr<QQmlJS::Engine> m_engine;
315 std::optional<LegacyPragmaLibrary> m_pragmaLibrary = std::nullopt;
316 QList<LegacyImport> m_imports;
317 std::shared_ptr<ScriptExpression> m_script;
318 JsResource m_rootComponent;
319 FileLocations::Tree m_fileLocationsTree;
320};
321
323{
324protected:
325 std::shared_ptr<OwningItem> doCopy(const DomItem &self) const override;
326
327public:
328 constexpr static DomType kindValue = DomType::QmlFile;
329 DomType kind() const override { return kindValue; }
330
331 enum RecoveryOption { DisableParserRecovery, EnableParserRecovery };
332
333 QmlFile(const QString &filePath = QString(), const QString &code = QString(),
334 const QDateTime &lastDataUpdate = QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC),
335 int derivedFrom = 0, RecoveryOption option = DisableParserRecovery);
336 static ErrorGroups myParsingErrors();
337 bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const
338 override; // iterates the *direct* subpaths, returns false if a quick end was requested
339 DomItem field(const DomItem &self, QStringView name) const override;
340 std::shared_ptr<QmlFile> makeCopy(const DomItem &self) const
341 {
342 return std::static_pointer_cast<QmlFile>(doCopy(self));
343 }
344 void addError(const DomItem &self, ErrorMessage &&msg) override;
345
346 const QMultiMap<QString, QmlComponent> &components() const &
347 {
348 return lazyMembers().m_components;
349 }
350 void setComponents(const QMultiMap<QString, QmlComponent> &components)
351 {
352 lazyMembers().m_components = components;
353 }
354 Path addComponent(const QmlComponent &component, AddOption option = AddOption::Overwrite,
355 QmlComponent **cPtr = nullptr)
356 {
357 QStringList nameEls = component.name().split(QChar::fromLatin1('.'));
358 QString key = nameEls.mid(1).join(QChar::fromLatin1('.'));
359 return insertUpdatableElementInMultiMap(Path::Field(Fields::components), lazyMembers().m_components,
360 key, component, option, cPtr);
361 }
362
363 void writeOut(const DomItem &self, OutWriter &lw) const override;
364
366 {
367 return m_ast; // avoid making it public? would make moving away from it easier
368 }
369 const QList<Import> &imports() const &
370 {
371 return lazyMembers().m_imports;
372 }
373 void setImports(const QList<Import> &imports) { lazyMembers().m_imports = imports; }
375 {
376 auto &members = lazyMembers();
377 index_type idx = index_type(members.m_imports.size());
378 members.m_imports.append(i);
379 if (i.uri.isModule()) {
380 members.m_importScope.addImport((i.importId.isEmpty()
381 ? QStringList()
382 : i.importId.split(QChar::fromLatin1('.'))),
383 i.importedPath());
384 } else {
385 QString path = i.uri.absoluteLocalPath(canonicalFilePath());
386 if (!path.isEmpty())
387 members.m_importScope.addImport(
388 (i.importId.isEmpty() ? QStringList()
389 : i.importId.split(QChar::fromLatin1('.'))),
390 Paths::qmlDirPath(path));
391 }
392 return Path::Field(Fields::imports).index(idx);
393 }
394 std::shared_ptr<QQmlJS::Engine> engine() const { return m_engine; }
395 RegionComments &comments() { return lazyMembers().m_comments; }
396 std::shared_ptr<AstComments> astComments() const { return lazyMembers().m_astComments; }
397 void setAstComments(const std::shared_ptr<AstComments> &comm) { lazyMembers().m_astComments = comm; }
398 FileLocations::Tree fileLocationsTree() const { return lazyMembers().m_fileLocationsTree; }
399 void setFileLocationsTree(const FileLocations::Tree &v) { lazyMembers().m_fileLocationsTree = v; }
400 const QList<Pragma> &pragmas() const & { return lazyMembers().m_pragmas; }
401 void setPragmas(QList<Pragma> pragmas) { lazyMembers().m_pragmas = pragmas; }
402 Path addPragma(const Pragma &pragma)
403 {
404 auto &members = lazyMembers();
405 int idx = members.m_pragmas.size();
406 members.m_pragmas.append(pragma);
407 return Path::Field(Fields::pragmas).index(idx);
408 }
409 ImportScope &importScope() { return lazyMembers().m_importScope; }
410 const ImportScope &importScope() const { return lazyMembers().m_importScope; }
411
412 std::shared_ptr<QQmlJSTypeResolver> typeResolver() const
413 {
414 return lazyMembers().m_typeResolver;
415 }
416 void setTypeResolverWithDependencies(const std::shared_ptr<QQmlJSTypeResolver> &typeResolver,
417 const QQmlJSTypeResolverDependencies &dependencies)
418 {
419 auto &members = lazyMembers();
420 members.m_typeResolver = typeResolver;
421 members.m_typeResolverDependencies = dependencies;
422 }
423
424 DomCreationOptions creationOptions() const { return lazyMembers().m_creationOptions; }
425
427 {
428 m_handleForPopulation = scope;
429 }
430
431
432private:
433 // The lazy parts of QmlFile are inside of QmlFileLazy.
434 struct QmlFileLazy
435 {
436 QmlFileLazy(FileLocations::Tree fileLocationsTree, AstComments *astComments)
437 : m_fileLocationsTree(fileLocationsTree), m_astComments(astComments)
438 {
439 }
440 RegionComments m_comments;
441 QMultiMap<QString, QmlComponent> m_components;
442 QList<Pragma> m_pragmas;
443 QList<Import> m_imports;
444 ImportScope m_importScope;
445 FileLocations::Tree m_fileLocationsTree;
446 std::shared_ptr<AstComments> m_astComments;
447 DomCreationOptions m_creationOptions;
448 std::shared_ptr<QQmlJSTypeResolver> m_typeResolver;
449 QQmlJSTypeResolverDependencies m_typeResolverDependencies;
450 };
451 friend class QQmlDomAstCreator;
452 AST::UiProgram *m_ast; // avoid? would make moving away from it easier
453 std::shared_ptr<Engine> m_engine;
454 QQmlJSScope::ConstPtr m_handleForPopulation;
455 mutable std::optional<QmlFileLazy> m_lazyMembers;
456
457 void ensurePopulated() const
458 {
459 if (m_lazyMembers)
460 return;
461
462 m_lazyMembers.emplace(FileLocations::createTree(canonicalPath()), new AstComments(m_engine));
463
464 // populate via the QQmlJSScope by accessing the (lazy) pointer
465 if (m_handleForPopulation.factory()) {
466 // silence no-discard attribute:
467 Q_UNUSED(m_handleForPopulation.data());
468 }
469 }
470 const QmlFileLazy &lazyMembers() const
471 {
472 ensurePopulated();
473 return *m_lazyMembers;
474 }
475 QmlFileLazy &lazyMembers()
476 {
477 ensurePopulated();
478 return *m_lazyMembers;
479 }
480};
481
483{
484protected:
485 std::shared_ptr<OwningItem> doCopy(const DomItem &) const override
486 {
487 auto res = std::make_shared<QmltypesFile>(*this);
488 return res;
489 }
490
491public:
492 constexpr static DomType kindValue = DomType::QmltypesFile;
493 DomType kind() const override { return kindValue; }
494
496 const QString &filePath = QString(), const QString &code = QString(),
497 const QDateTime &lastDataUpdateAt = QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC),
498 int derivedFrom = 0)
499 : ExternalOwningItem(filePath, lastDataUpdateAt, Paths::qmltypesFilePath(filePath),
500 derivedFrom, code)
501 {
502 }
503
504 QmltypesFile(const QmltypesFile &o) = default;
505
506 void ensureInModuleIndex(const DomItem &self) const;
507
508 bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override;
509 std::shared_ptr<QmltypesFile> makeCopy(const DomItem &self) const
510 {
511 return std::static_pointer_cast<QmltypesFile>(doCopy(self));
512 }
513
514 void addImport(const Import i)
515 { // builder only: not threadsafe...
516 m_imports.append(i);
517 }
518 const QList<Import> &imports() const & { return m_imports; }
519 const QMultiMap<QString, QmltypesComponent> &components() const & { return m_components; }
520 void setComponents(QMultiMap<QString, QmltypesComponent> c) { m_components = std::move(c); }
521 Path addComponent(const QmltypesComponent &comp, AddOption option = AddOption::Overwrite,
522 QmltypesComponent **cPtr = nullptr)
523 {
524 for (const Export &e : comp.exports())
525 addExport(e);
526 return insertUpdatableElementInMultiMap(Path::Field(u"components"), m_components,
527 comp.name(), comp, option, cPtr);
528 }
529 const QMultiMap<QString, Export> &exports() const & { return m_exports; }
530 void setExports(QMultiMap<QString, Export> e) { m_exports = e; }
532 {
533 index_type i = m_exports.values(e.typeName).size();
534 m_exports.insert(e.typeName, e);
535 addUri(e.uri, e.version.majorVersion);
536 return canonicalPath().field(Fields::exports).index(i);
537 }
538
539 const QMap<QString, QSet<int>> &uris() const & { return m_uris; }
540 void addUri(const QString &uri, int majorVersion)
541 {
542 QSet<int> &v = m_uris[uri];
543 if (!v.contains(majorVersion)) {
544 v.insert(majorVersion);
545 }
546 }
547
548private:
549 QList<Import> m_imports;
550 QMultiMap<QString, QmltypesComponent> m_components;
551 QMultiMap<QString, Export> m_exports;
552 QMap<QString, QSet<int>> m_uris;
553};
554
556{
557protected:
558 std::shared_ptr<OwningItem> doCopy(const DomItem &) const override;
559
560public:
561 constexpr static DomType kindValue = DomType::GlobalScope;
562 DomType kind() const override { return kindValue; }
563
565 const QString &filePath = QString(),
566 const QDateTime &lastDataUpdateAt = QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC),
567 int derivedFrom = 0)
568 : ExternalOwningItem(filePath, lastDataUpdateAt, Paths::globalScopePath(filePath),
569 derivedFrom)
570 {
571 setIsValid(true);
572 }
573
574 bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
575 std::shared_ptr<GlobalScope> makeCopy(const DomItem &self) const
576 {
577 return std::static_pointer_cast<GlobalScope>(doCopy(self));
578 }
579 QString name() const { return m_name; }
580 Language language() const { return m_language; }
581 GlobalComponent rootComponent() const { return m_rootComponent; }
582 void setName(const QString &name) { m_name = name; }
583 void setLanguage(Language language) { m_language = language; }
585 {
586 m_rootComponent = ob;
587 m_rootComponent.updatePathFromOwner(Path::Field(Fields::rootComponent));
588 }
589
590private:
591 QString m_name;
592 Language m_language;
593 GlobalComponent m_rootComponent;
594};
595
596} // end namespace Dom
597} // end namespace QQmlJS
599#endif // QQMLDOMEXTERNALITEMS_P_H
\inmodule QtCore\reentrant
Definition qdatetime.h:283
static QDateTime fromMSecsSinceEpoch(qint64 msecs, const QTimeZone &timeZone)
\inmodule QtCore
Definition qmutex.h:313
Associates comments with AST::Node *.
Represents a set of tags grouping a set of related error messages.
Represents an error message connected to the dom.
A OwningItem that refers to an external resource (file,...)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
bool iterateSubOwners(const DomItem &self, function_ref< bool(const DomItem &owner)> visitor) override
ExternalOwningItem(const ExternalOwningItem &o)=default
std::shared_ptr< AttachedInfoT< FileLocations > > Tree
void setLanguage(Language language)
void setName(const QString &name)
void setRootComponent(const GlobalComponent &ob)
DomType kind() const override
std::shared_ptr< GlobalScope > makeCopy(const DomItem &self) const
GlobalComponent rootComponent() const
GlobalScope(const QString &filePath=QString(), const QDateTime &lastDataUpdateAt=QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC), int derivedFrom=0)
DomType kind() const override
std::shared_ptr< OwningItem > doCopy(const DomItem &) const override
void setFileLocationsTree(const FileLocations::Tree &v)
std::shared_ptr< JsFile > makeCopy(const DomItem &self) const
JsFile(const JsFile &o)=default
JsResource rootComponent() const
void setExpression(const std::shared_ptr< ScriptExpression > &script)
std::shared_ptr< QQmlJS::Engine > engine() const
JsFile(const QString &filePath=QString(), const QDateTime &lastDataUpdateAt=QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC), const Path &pathFromTop=Path(), int derivedFrom=0)
DomType kind() const override
const QMultiMap< QString, QString > & qmlFiles() const &
const QMultiMap< QString, Export > & exports() const &
QmlDirectory(const QmlDirectory &o)=default
std::shared_ptr< OwningItem > doCopy(const DomItem &) const override
std::shared_ptr< QmlDirectory > makeCopy(const DomItem &self) const
A QmlFile, when loaded in a DomEnvironment that has the DomCreationOption::WithSemanticAnalysis,...
void setTypeResolverWithDependencies(const std::shared_ptr< QQmlJSTypeResolver > &typeResolver, const QQmlJSTypeResolverDependencies &dependencies)
const QMultiMap< QString, QmlComponent > & components() const &
std::shared_ptr< QQmlJS::Engine > engine() const
std::shared_ptr< AstComments > astComments() const
std::shared_ptr< QmlFile > makeCopy(const DomItem &self) const
Path addImport(const Import &i)
void setAstComments(const std::shared_ptr< AstComments > &comm)
void setComponents(const QMultiMap< QString, QmlComponent > &components)
const QList< Import > & imports() const &
std::shared_ptr< QQmlJSTypeResolver > typeResolver() const
DomCreationOptions creationOptions() const
const QList< Pragma > & pragmas() const &
void setImports(const QList< Import > &imports)
AST::UiProgram * ast() const
void setFileLocationsTree(const FileLocations::Tree &v)
DomType kind() const override
Path addPragma(const Pragma &pragma)
Path addComponent(const QmlComponent &component, AddOption option=AddOption::Overwrite, QmlComponent **cPtr=nullptr)
void setHandleForPopulation(const QQmlJSScope::ConstPtr &scope)
const ImportScope & importScope() const
void setPragmas(QList< Pragma > pragmas)
FileLocations::Tree fileLocationsTree() const
const QSet< int > & majorVersions() const &
const QList< Import > & imports() const &
DomType kind() const override
std::shared_ptr< OwningItem > doCopy(const DomItem &) const override
QmldirFile(const QmldirFile &o)=default
std::shared_ptr< QmldirFile > makeCopy(const DomItem &self) const
const QMultiMap< QString, Export > & exports() const &
const QList< Path > & qmltypesFilePaths() const &
QmldirFile(const QString &filePath=QString(), const QString &code=QString(), const QDateTime &lastDataUpdateAt=QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC), int derivedFrom=0)
std::shared_ptr< OwningItem > doCopy(const DomItem &) const override
void addUri(const QString &uri, int majorVersion)
DomType kind() const override
QmltypesFile(const QmltypesFile &o)=default
const QList< Import > & imports() const &
const QMultiMap< QString, QmltypesComponent > & components() const &
void setExports(QMultiMap< QString, Export > e)
void setComponents(QMultiMap< QString, QmltypesComponent > c)
Path addComponent(const QmltypesComponent &comp, AddOption option=AddOption::Overwrite, QmltypesComponent **cPtr=nullptr)
QmltypesFile(const QString &filePath=QString(), const QString &code=QString(), const QDateTime &lastDataUpdateAt=QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC), int derivedFrom=0)
std::shared_ptr< QmltypesFile > makeCopy(const DomItem &self) const
const QMultiMap< QString, Export > & exports() const &
const QMap< QString, QSet< int > > & uris() const &
Keeps the comments associated with a DomItem.
\inmodule QtCore
\inmodule QtCore
Definition qstringview.h:78
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
QString mid(qsizetype position, qsizetype n=-1) const &
Definition qstring.cpp:5300
bool isNull() const
Returns true if this string is null; otherwise returns false.
Definition qstring.h:994
Path insertUpdatableElementInMultiMap(const Path &mapPathFromOwner, QMultiMap< K, T > &mmap, K key, const T &value, AddOption option=AddOption::KeepExisting, T **valuePtr=nullptr)
qint64 index_type
Combined button and popup list for selecting options.
static jboolean copy(JNIEnv *, jobject)
QList< QString > QStringList
Constructs a string list that contains the given string, str.
#define Q_DECLARE_TR_FUNCTIONS(context)
#define Q_DECLARE_METATYPE(TYPE)
Definition qmetatype.h:1525
GLsizei const GLfloat * v
[13]
GLuint64 key
GLint GLenum GLint components
GLuint name
GLuint res
const GLubyte * c
GLuint GLfloat * val
GLsizei const GLchar *const * path
GLuint GLenum option
static qreal component(const QPointF &point, unsigned int i)
#define QMLDOM_EXPORT
Members members(const Members &candidates, QTypeRevision maxMajorVersion, Postprocess &&process)
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
static QString canonicalPath(const QString &rootPath)
#define Q_UNUSED(x)
QFile file
[0]
QMutex mutex
[2]