5#ifndef QQMLDOMELEMENTS_P_H
6#define QQMLDOMELEMENTS_P_H
24#include <QtQml/private/qqmljsast_p.h>
25#include <QtQml/private/qqmljsengine_p.h>
26#include <QtQml/private/qqmlsignalnames_p.h>
28#include <QtCore/QCborValue>
29#include <QtCore/QCborMap>
30#include <QtCore/QMutexLocker>
33#include <private/qqmljsscope_p.h>
48 const QString &uri,
int majorVersion,
const ErrorHandler &errorHandler =
nullptr);
52 const QString &uri,
const QString &version,
const ErrorHandler &errorHandler =
nullptr);
54 const QString &uri,
const ErrorHandler &errorHandler =
nullptr)
56 return moduleScopePath(uri, QString(), errorHandler);
64 return qmlDirInfoPath(path).withField(Fields::currentItem);
72 return qmldirFileInfoPath(path).withField(Fields::currentItem);
80 return qmlFileInfoPath(canonicalFilePath).withField(Fields::currentItem);
84 return qmlFilePath(canonicalFilePath)
85 .withField(Fields::components)
88 .withField(Fields::objects)
97 return qmltypesFileInfoPath(path).withField(Fields::currentItem);
105 return jsFileInfoPath(path).withField(Fields::currentItem);
113 return qmlDirectoryInfoPath(path).withField(Fields::currentItem);
121 return globalScopeInfoPath(name).withField(Fields::currentItem);
168 Version(qint32 majorVersion = Undefined, qint32 minorVersion = Undefined);
178 if (majorVersion >= 0 || majorVersion == Undefined)
179 return QString::number(majorVersion);
184 if (majorVersion == Version::Latest)
185 return QLatin1String(
"Latest");
186 if (majorVersion >= 0 || majorVersion == Undefined)
187 return QString::number(majorVersion);
192 if (minorVersion >= 0 || minorVersion == Undefined)
193 return QString::number(minorVersion);
198 int c = majorVersion - o.majorVersion;
201 return minorVersion - o.minorVersion;
253 return i1.m_kind == i2.m_kind && i1.m_value == i2.m_value;
259 QmlUri(
Kind kind,
const QString &value) : m_kind(kind), m_value(value) { }
261 std::variant<QString, QUrl> m_value;
272 const QString &importId = QString(),
const ErrorHandler &handler =
nullptr);
274 const QString &importStr,
const QString &importId = QString(),
278 const QString &importId = QString())
286 if (uri.isDirectory()) {
287 QString path = uri.absoluteLocalPath();
288 if (!path.isEmpty()) {
289 return Paths::qmlDirPath(path);
291 Q_ASSERT_X(
false,
"Import",
"url imports not supported");
292 return Paths::qmldirFilePath(uri.directoryString());
295 return Paths::moduleScopePath(uri.moduleUri(), version);
302 return i1.uri == i2.uri && i1.version == i2.version && i1.importId == i2.importId
326 cont = cont && self.dvWrapField(visitor, Fields::import, import);
327 cont = cont && self.dvValueField(visitor, Fields::inheritVersion,
inheritVersion);
349 Pragma(
const QString &pragmaName = QString(),
const QStringList &pragmaValues = {})
356 bool cont = self.dvValueField(visitor, Fields::name, name);
357 cont = cont && self.dvValueField(visitor, Fields::values, values);
358 cont = cont && self.dvWrapField(visitor, Fields::comments, comments);
374 Id(
const QString &idName = QString(),
const Path &referredObject =
Path());
408 explicit ScriptExpression(QStringView code,
const std::shared_ptr<QQmlJS::Engine> &engine,
410 ExpressionType expressionType,
411 const SourceLocation &localOffset = SourceLocation());
439 void astDumper(
const Sink &s, AstDumperOptions options)
const;
446 QMutexLocker l(mutex());
452 QMutexLocker l(mutex());
453 return m_expressionType;
458 QMutexLocker l(mutex());
459 return m_code.isNull();
463 QMutexLocker l(mutex());
482 return SourceLocation(
483 x.offset - m_localOffset.offset, x.length, x.startLine - m_localOffset.startLine,
484 ((x.startLine == m_localOffset.startLine)
485 ? x.startColumn - m_localOffset.startColumn
490 void setCode(
const QString &code);
493 ExpressionType m_expressionType;
496 mutable std::shared_ptr<QQmlJS::Engine> m_engine;
497 mutable AST::Node *m_ast;
499 SourceLocation m_localOffset;
510 Binding(
const QString &m_name = QString());
511 Binding(
const QString &m_name, std::unique_ptr<BindingValue> &&value,
515 Binding(
const QString &m_name,
const QString &scriptCode,
519 Binding(
const QString &m_name,
const QList<QmlObject> &value,
539 void setAnnotations(
const QList<QmlObject> &annotations) { m_annotations = annotations; }
540 void setValue(std::unique_ptr<BindingValue> &&value);
549 QString baseName = m_name.split(QLatin1Char(
'.')).last();
550 return QQmlSignalNames::isHandlerName(baseName);
554 return QStringLiteral(u"QtObject{\n %1: ").arg(n.split(u'.').last());
567 std::unique_ptr<BindingValue> m_value;
568 QList<QmlObject> m_annotations;
625 bool cont = AttributeInfo::iterateDirectSubpaths(self, visitor);
626 cont = cont && self.dvValueField(visitor, Fields::isPointer,
isPointer);
627 cont = cont && self.dvValueField(visitor, Fields::isFinal,
isFinal);
628 cont = cont && self.dvValueField(visitor, Fields::isAlias,
isAlias());
629 cont = cont && self.dvValueField(visitor, Fields::isDefaultMember,
isDefaultMember);
630 cont = cont && self.dvValueField(visitor, Fields::isRequired,
isRequired);
631 cont = cont && self.dvValueField(visitor, Fields::read, read);
632 cont = cont && self.dvValueField(visitor, Fields::write, write);
633 cont = cont && self.dvValueField(visitor, Fields::bindable, bindable);
634 cont = cont && self.dvValueField(visitor, Fields::notify, notify);
635 cont = cont && self.dvReferenceField(visitor, Fields::type,
typePath());
636 if (m_nameIdentifiers) {
637 cont = cont && self.dvItemField(visitor, Fields::nameIdentifiers, [
this, &self]() {
638 return self.subScriptElementWrapperItem(m_nameIdentifiers);
646 bool isAlias()
const {
return typeName == u"alias"; }
720 return (typeName.isEmpty() ? Path() : Paths::lookupTypePath(typeName));
738 void writeOutArguments(
const DomItem &self, OutWriter &ow)
const;
739 void writeOutReturnType(
const DomItem &self, OutWriter &ow)
const;
740 void writeOutBody(
const DomItem &self, OutWriter &ow)
const;
752 :
m_name(
name), m_value(value), m_valueKind(valueKind)
759 double value()
const {
return m_value; }
777 EnumDecl(
const QString &name = QString(),
const QList<EnumItem> &values = QList<
EnumItem>(),
786 void setName(
const QString &name) { m_name = name; }
791 void setAlias(
const QString &aliasName) { m_alias = aliasName; }
792 void setValues(
const QList<EnumItem> &values) { m_values = values; }
795 m_values.append(value);
796 return Path::fromField(Fields::values).withIndex(index_type(m_values.size() - 1));
807 bool m_isFlag =
false;
809 QList<EnumItem> m_values;
810 QList<QmlObject> m_annotations;
830 function_ref<
bool(
const DomItem &owner)> visitor)
const;
843 void setName(
const QString &name) { m_name = name; }
845 void setPrototypePaths(
const QList<Path> &prototypePaths) { m_prototypePaths = prototypePaths; }
848 index_type idx = index_type(m_prototypePaths.indexOf(prototypePath));
850 idx = index_type(m_prototypePaths.size());
851 m_prototypePaths.append(prototypePath);
853 return Path::fromField(Fields::prototypes).withIndex(idx);
858 m_propertyDefs = propertyDefs;
860 void setBindings(
const QMultiMap<QString, Binding> &bindings) { m_bindings = bindings; }
861 void setMethods(
const QMultiMap<QString, MethodInfo> &functionDefs)
863 m_methods = functionDefs;
867 m_children = children;
873 m_annotations = annotations;
880 return insertUpdatableElementInMultiMap(pathFromOwner().withField(Fields::propertyDefs),
881 m_propertyDefs, propertyDef.name, propertyDef,
889 return insertUpdatableElementInMultiMap(pathFromOwner().withField(Fields::bindings), m_bindings,
890 binding.name(), binding, option, bPtr);
895 return insertUpdatableElementInMultiMap(pathFromOwner().withField(Fields::methods), m_methods,
896 functionDef.name, functionDef, option, mPtr);
901 return appendUpdatableElementInQList(pathFromOwner().withField(Fields::children), m_children,
911 return appendUpdatableElementInQList(pathFromOwner().withField(Fields::annotations),
912 m_annotations, annotation, aPtr);
916 const DomItem &component)
const;
918 const QString &code)
const;
922 const DomItem &component)
const;
924 QSet<QString> &mergedDefBinding)
const;
927 void writeOut(
const DomItem &self, OutWriter &ow,
const QString &onTarget)
const;
944 QList<Path> m_prototypePaths;
945 Path m_nextScopePath;
946 QString m_defaultPropertyName;
947 QMultiMap<QString, PropertyDefinition> m_propertyDefs;
948 QMultiMap<QString, Binding> m_bindings;
949 QMultiMap<QString, MethodInfo> m_methods;
950 QList<QmlObject> m_children;
951 QList<QmlObject> m_annotations;
952 QQmlJSScope::ConstPtr m_scope;
968 cont = cont && self.dvValueField(visitor, Fields::uri, uri);
969 cont = cont && self.dvValueField(visitor, Fields::typeName, typeName);
970 cont = cont && self.dvWrapField(visitor, Fields::version, version);
972 cont = cont && self.dvReferenceField(visitor, Fields::type, typePath);
973 cont = cont && self.dvValueField(visitor, Fields::isInternal,
isInternal);
974 cont = cont && self.dvValueField(visitor, Fields::isSingleton,
isSingleton);
975 if (exportSourcePath)
976 cont = cont && self.dvReferenceField(visitor, Fields::exportSource, exportSourcePath);
1010 void setName(
const QString &name) { m_name = name; }
1013 m_enumerations = enumerations;
1016 EnumDecl **ePtr =
nullptr)
1018 return insertUpdatableElementInMultiMap(pathFromOwner().withField(Fields::enumerations),
1019 m_enumerations, enumeration.name(), enumeration,
1022 void setObjects(
const QList<QmlObject> &objects) { m_objects = objects; }
1033 QMultiMap<QString, EnumDecl> m_enumerations;
1034 QList<QmlObject> m_objects;
1035 bool m_isSingleton =
false;
1036 bool m_isCreatable =
true;
1037 bool m_isComposite =
true;
1038 QString m_attachedTypeName;
1039 Path m_attachedTypePath;
1066 void setExports(
const QList<Export> &exports) { m_exports = exports; }
1090 QList<Export> m_exports;
1091 QList<
int> m_metaRevisions;
1093 QStringList m_interfaceNames;
1094 bool m_hasCustomParser =
false;
1095 bool m_extensionIsJavaScript =
false;
1096 bool m_extensionIsNamespace =
false;
1097 QString m_elementTypeName;
1098 QString m_extensionTypeName;
1099 QQmlJSScope::AccessSemantics m_accessSemantics = QQmlJSScope::AccessSemantics::None;
1100 QQmlJSScope::ConstPtr m_semanticScope;
1119 void setIds(
const QMultiMap<QString, Id> &ids) { m_ids = ids; }
1125 return insertUpdatableElementInMultiMap(pathFromOwner().withField(Fields::ids), m_ids, id.name,
1139 Path m_nextComponentPath;
1140 QMultiMap<QString, Id> m_ids;
1141 QQmlJSScope::ConstPtr m_semanticScope;
1175 const auto sources = allSources(self);
1176 for (
const Path &p : sources) {
1177 QSet<QString> ks = self.path(p.withField(Fields::exports), self.errorHandler()).keys();
1186 const auto sources = allSources(self);
1187 for (
const Path &p : sources) {
1188 DomItem source = self.path(p.withField(Fields::exports), self.errorHandler());
1189 DomItem els = source.key(name);
1190 int nEls = els.indexes();
1191 for (
int i = 0; i < nEls; ++i)
1192 res.append(els.index(i));
1193 if (nEls == 0 && els) {
1194 self.addError(importErrors.warning(
1195 tr(
"Looking up '%1' expected a list of exports, not %2")
1196 .arg(name, els.toString())));
1205 for (
const DomItem &i : importedItemsWithName(self, name))
1206 if (
const Export *e = i.as<Export>())
1209 self.addError(importErrors.warning(
1210 tr(
"Expected Export looking up '%1', not %2").arg(name, i.toString())));
1219 m_subImports[p.first()].addImport(p.mid(1), targetExports);
1220 else if (!m_importSourcePaths.contains(targetExports))
1221 m_importSourcePaths.append(targetExports);
1225 QList<Path> m_importSourcePaths;
1226 QMap<QString, ImportScope> m_subImports;
1247 BindingValueKind kind;
void setSemanticScope(const QQmlJSScope::ConstPtr &scope)
QQmlJSScope::ConstPtr m_semanticScope
void updatePathFromOwner(const Path &newPath)
QQmlJSScope::ConstPtr semanticScope() const
QList< QmlObject > annotations
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
Path addAnnotation(const Path &selfPathFromOwner, const QmlObject &annotation, QmlObject **aPtr=nullptr)
BindingValue(const QList< QmlObject > &l)
void updatePathFromOwner(const Path &newPath)
BindingValue(const std::shared_ptr< ScriptExpression > &o)
BindingValue(const BindingValue &o)
DomItem value(const DomItem &binding) const
BindingValue & operator=(const BindingValue &o)
std::shared_ptr< ScriptExpression > scriptExpression
BindingValue(const QmlObject &o)
void setValue(std::unique_ptr< BindingValue > &&value)
BindingType bindingType() const
std::shared_ptr< ScriptExpression > scriptExpressionValue() const
RegionComments & comments()
Binding & operator=(const Binding &)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const
void setBindingIdentifiers(const ScriptElementVariant &bindingIdentifiers)
Path addAnnotation(const Path &selfPathFromOwner, const QmlObject &a, QmlObject **aPtr=nullptr)
QList< QmlObject > annotations() const
void updatePathFromOwner(const Path &newPath)
static QString preCodeForName(QStringView n)
QmlObject const * objectValue() const
DomItem valueItem(const DomItem &self) const
QList< QmlObject > * arrayValue()
Binding(const Binding &o)
QList< QmlObject > const * arrayValue() const
static QString postCodeForName(QStringView)
void setAnnotations(const QList< QmlObject > &annotations)
Binding & operator=(Binding &&)=default
void writeOut(const DomItem &self, OutWriter &lw) const
Binding(const QString &m_name, const QString &scriptCode, BindingType bindingType=BindingType::Normal)
const RegionComments & comments() const
Binding(const QString &m_name, std::unique_ptr< BindingValue > &&value, BindingType bindingType=BindingType::Normal)
bool isSignalHandler() const
void writeOutValue(const DomItem &self, OutWriter &lw) const
Binding(const QString &m_name=QString())
static constexpr DomType kindValue
Binding(const QString &m_name, const QmlObject &value, BindingType bindingType=BindingType::Normal)
Binding(Binding &&o)=default
QmlObject * objectValue()
std::shared_ptr< ScriptExpression > scriptExpressionValue()
ScriptElementVariant bindingIdentifiers() const
BindingValueKind valueKind() const
Binding(const QString &m_name, const std::shared_ptr< ScriptExpression > &value, BindingType bindingType=BindingType::Normal)
void setIsSingleton(bool isSingleton)
void updatePathFromOwner(const Path &newPath) override
Component(const Path &pathFromOwner=Path())
void setIsComposite(bool isComposite)
Component & operator=(const Component &)=default
void setIsCreatable(bool isCreatable)
void setObjects(const QList< QmlObject > &objects)
const QMultiMap< QString, EnumDecl > & enumerations() const &
Component(const Component &o)=default
Path addObject(const QmlObject &object, QmlObject **oPtr=nullptr)
void setName(const QString &name)
Path attachedTypePath(const DomItem &) const
void setEnumerations(const QMultiMap< QString, EnumDecl > &enumerations)
DomItem field(const DomItem &self, QStringView name) const override
Path addEnumeration(const EnumDecl &enumeration, AddOption option=AddOption::Overwrite, EnumDecl **ePtr=nullptr)
void setAttachedTypeName(const QString &name)
bool iterateDirectSubpaths(const DomItem &, DirectVisitor) const override
QString attachedTypeName() const
Component(const QString &name)
void setAttachedTypePath(const Path &p)
const QList< QmlObject > & objects() const &
Path pathFromOwner() const override
DomElement(const Path &pathFromOwner=Path())
A value type that references any element of the Dom.
static ErrorGroup domErrorGroup
const QList< QmlObject > & annotations() const &
const QList< EnumItem > & values() const &
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
void setAlias(const QString &aliasName)
void setAnnotations(const QList< QmlObject > &annotations)
EnumDecl(const QString &name=QString(), const QList< EnumItem > &values=QList< EnumItem >(), const Path &pathFromOwner=Path())
void writeOut(const DomItem &self, OutWriter &lw) const override
void updatePathFromOwner(const Path &newP) override
void setName(const QString &name)
Path addAnnotation(const QmlObject &child, QmlObject **cPtr=nullptr)
Path addValue(const EnumItem &value)
void setIsFlag(bool flag)
static constexpr DomType kindValue
void setValues(const QList< EnumItem > &values)
DomType kind() const override
EnumItem(const QString &name=QString(), int value=0, ValueKind valueKind=ValueKind::ImplicitValue)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
const RegionComments & comments() const
RegionComments & comments()
void writeOut(const DomItem &self, OutWriter &lw) const
static constexpr DomType kindValue
Represents a set of tags grouping a set of related error messages.
static Export fromString(const Path &source, QStringView exp, const Path &typePath, const ErrorHandler &h)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
GlobalComponent(const Path &pathFromOwner=Path())
DomType kind() const override
static constexpr DomType kindValue
Path addAnnotation(const Path &selfPathFromOwner, const QmlObject &ann, QmlObject **aPtr=nullptr)
std::shared_ptr< ScriptExpression > value
static constexpr DomType kindValue
Id(const QString &idName=QString(), const Path &referredObject=Path())
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const
void updatePathFromOwner(const Path &pathFromOwner)
QList< QmlObject > annotations
const QList< Path > & importSourcePaths() const &
const QMap< QString, ImportScope > & subImports() const &
QList< DomItem > importedItemsWithName(const DomItem &self, const QString &name) const
QList< Export > importedExportsWithName(const DomItem &self, const QString &name) const
QSet< QString > importedNames(const DomItem &self) const
void addImport(const QStringList &p, const Path &targetExports)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
QList< Path > allSources(const DomItem &self) const
Import(const QmlUri &uri=QmlUri(), Version version=Version(), const QString &importId=QString())
Import baseImport() const
friend bool operator==(const Import &i1, const Import &i2)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const
Path importedPath() const
static QRegularExpression importRe()
void writeOut(const DomItem &self, OutWriter &ow) const
static Import fromFileString(const QString &importStr, const QString &importId=QString(), const ErrorHandler &handler=nullptr)
friend bool operator!=(const Import &i1, const Import &i2)
static Import fromUriString(const QString &importStr, Version v=Version(), const QString &importId=QString(), const ErrorHandler &handler=nullptr)
JsResource(const Path &pathFromOwner=Path())
DomType kind() const override
bool iterateDirectSubpaths(const DomItem &, DirectVisitor) const override
static constexpr DomType kindValue
std::shared_ptr< ScriptExpression > body
Path typePath(const DomItem &) const
QList< MethodParameter > parameters
std::shared_ptr< ScriptExpression > returnType
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
void writeOut(const DomItem &self, OutWriter &ow) const
void writePre(const DomItem &self, OutWriter &ow) const
QString signature(const DomItem &self) const
std::shared_ptr< ScriptExpression > defaultValue
void writeOut(const DomItem &self, OutWriter &ow) const
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
void writeOutSignal(const DomItem &self, OutWriter &ow) const
TypeAnnotationStyle typeAnnotationStyle
static constexpr DomType kindValue
std::shared_ptr< ScriptExpression > value
QList< QmlObject > annotations
friend bool operator==(const ModuleAutoExport &i1, const ModuleAutoExport &i2)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
friend bool operator!=(const ModuleAutoExport &i1, const ModuleAutoExport &i2)
static constexpr DomType kindValue
MutableDomItem(const DomItem &owner, const Path &pathFromOwner)
A DomItem that owns other DomItems and is managed through a shared pointer.
OwningItem(int derivedFrom=0)
static Path fromRoot(PathRoot r)
Path operator[](int i) const
Path mid(int offset, int length) const
static Path fromCurrent(PathCurrent c)
Pragma(const QString &pragmaName=QString(), const QStringList &pragmaValues={})
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
void writeOut(const DomItem &self, OutWriter &ow) const
static constexpr DomType kindValue
static constexpr DomType kindValue
ScriptElementVariant m_nameIdentifiers
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
bool isParametricType() const
void writeOut(const DomItem &self, OutWriter &lw) const
ScriptElementVariant nameIdentifiers() const
void setNameIdentifiers(const ScriptElementVariant &name)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
static constexpr DomType kindValue
QList< DomItem > propertyDefs
QList< DomItem > bindings
QQmlDomAstCreatorBase(const MutableDomItem &qmlFile)
void endVisit(AST::UiProgram *) override
bool stackHasScriptList() const
void throwRecursionDepthError() override
void endVisitHelper(AST::PatternElement *pe, const std::shared_ptr< ScriptElements::GenericScriptElement > &element)
void loadAnnotations(AST::UiObjectMember *el)
bool visit(AST::UiProgram *program) override
void enableLoadFileLazily(bool enable=true)
bool stackHasScriptVariant() const
void enableScriptExpressions(bool enable=true)
QQmlJSImportVisitor & scopeCreator()
virtual QQmlJSASTClassListToVisit void throwRecursionDepthError() override
QQmlDomAstCreatorWithQQmlJSScope(const QQmlJSScope::Ptr ¤t, MutableDomItem &qmlFile, QQmlJSLogger *logger, QQmlJSImporter *importer)
void enableScriptExpressions(bool enable=true)
void enableLoadFileLazily(bool enable=true)
QQmlJSScope::ConstPtr semanticScope() const
void setIds(const QMultiMap< QString, Id > &ids)
void setNextComponentPath(const Path &p)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override
QList< DomItem > subComponents(const DomItem &self) const
const QMultiMap< QString, Id > & ids() const &
void updatePathFromOwner(const Path &newPath) override
void setNameIdentifiers(const ScriptElementVariant &name)
static constexpr DomType kindValue
void writeOut(const DomItem &self, OutWriter &) const override
void setSemanticScope(const QQmlJSScope::ConstPtr &scope)
QmlComponent(const QString &name=QString())
QList< QString > subComponentsNames(const DomItem &self) const
Path nextComponentPath() const
Path addId(const Id &id, AddOption option=AddOption::Overwrite, Id **idPtr=nullptr)
ScriptElementVariant nameIdentifiers() const
DomType kind() const override
QList< QString > fields(const DomItem &) const override
void setNameIdentifiers(const ScriptElementVariant &name)
Path addChild(const QmlObject &child, QmlObject **cPtr=nullptr)
MutableDomItem addBinding(MutableDomItem &self, const Binding &binding, AddOption option)
void setMethods(const QMultiMap< QString, MethodInfo > &functionDefs)
void writeOut(const DomItem &self, OutWriter &ow, const QString &onTarget) const
ScriptElementVariant nameIdentifiers() const
void setName(const QString &name)
QList< std::pair< SourceLocation, DomItem > > orderOfAttributes(const DomItem &self, const DomItem &component) const
bool iterateSubOwners(const DomItem &self, function_ref< bool(const DomItem &owner)> visitor) const
MutableDomItem addChild(MutableDomItem &self, const QmlObject &child)
void setAnnotations(const QList< QmlObject > &annotations)
const QMultiMap< QString, Binding > & bindings() const &
DomType kind() const override
void setNextScopePath(const Path &nextScopePath)
void updatePathFromOwner(const Path &newPath) override
void setChildren(const QList< QmlObject > &children)
Path addBinding(const Binding &binding, AddOption option, Binding **bPtr=nullptr)
static constexpr DomType kindValue
Path addAnnotation(const QmlObject &annotation, QmlObject **aPtr=nullptr)
void writeOutSortedEnumerations(const DomItem &component, OutWriter &ow) const
LocallyResolvedAlias resolveAlias(const DomItem &self, std::shared_ptr< ScriptExpression > accessSequence) const
void writeOutId(const DomItem &self, OutWriter &ow) const
QList< QmlObject > children() const
LocallyResolvedAlias resolveAlias(const DomItem &self, const QStringList &accessSequence) const
const QList< Path > & prototypePaths() const &
void writeOutSortedPropertyDefinition(const DomItem &self, OutWriter &ow, QSet< QString > &mergedDefBinding) const
Path addPropertyDef(const PropertyDefinition &propertyDef, AddOption option, PropertyDefinition **pDef=nullptr)
const QMultiMap< QString, MethodInfo > & methods() const &
MutableDomItem addPropertyDef(MutableDomItem &self, const PropertyDefinition &propertyDef, AddOption option)
DomItem field(const DomItem &self, QStringView name) const override
void setBindings(const QMultiMap< QString, Binding > &bindings)
QString localDefaultPropertyName() const
QString defaultPropertyName(const DomItem &self) const
void setPropertyDefs(const QMultiMap< QString, PropertyDefinition > &propertyDefs)
QmlObject(const Path &pathFromOwner=Path())
void writeOutSortedAttributes(const DomItem &self, OutWriter &ow, const DomItem &component) const
MutableDomItem addMethod(MutableDomItem &self, const MethodInfo &functionDef, AddOption option)
void writeOutAttributes(const DomItem &self, OutWriter &ow, const DomItem &component, const QString &code) const
Path nextScopePath() const
void setIdStr(const QString &id)
QQmlJSScope::ConstPtr semanticScope() const
const QMultiMap< QString, PropertyDefinition > & propertyDefs() const &
void writeOut(const DomItem &self, OutWriter &lw) const override
Path addPrototypePath(const Path &prototypePath)
void setSemanticScope(const QQmlJSScope::ConstPtr &scope)
void setDefaultPropertyName(const QString &name)
void setPrototypePaths(const QList< Path > &prototypePaths)
QList< QmlObject > annotations() const
QList< QString > fields() const
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override
Path addMethod(const MethodInfo &functionDef, AddOption option, MethodInfo **mPtr=nullptr)
bool iterateBaseDirectSubpaths(const DomItem &self, DirectVisitor) const
static QmlUri fromString(const QString &importStr)
QString absoluteLocalPath(const QString &basePath=QString()) const
QUrl directoryUrl() const
QString directoryString() const
static QmlUri fromUriString(const QString &importStr)
QString localPath() const
QString moduleUri() const
friend bool operator==(const QmlUri &i1, const QmlUri &i2)
static QmlUri fromDirectoryString(const QString &importStr)
friend bool operator!=(const QmlUri &i1, const QmlUri &i2)
void setHasCustomParser(bool v)
void setInterfaceNames(const QStringList &interfaces)
void setMetaRevisions(const QList< int > &metaRevisions)
QQmlJSScope::AccessSemantics accessSemantics() const
void setFileName(const QString &fileName)
QString elementTypeName() const
bool extensionIsJavaScript() const
static constexpr DomType kindValue
bool hasCustomParser() const
QQmlJSScope::ConstPtr semanticScope() const
void setAccessSemantics(QQmlJSScope::AccessSemantics v)
void setSemanticScope(const QQmlJSScope::ConstPtr &scope)
QString extensionTypeName() const
bool iterateDirectSubpaths(const DomItem &, DirectVisitor) const override
bool extensionIsNamespace() const
void setExtensionTypeName(const QString &name)
void setExtensionIsJavaScript(bool v)
void setElementTypeName(const QString &name)
void setExtensionIsNamespace(bool v)
const QList< int > & metaRevisions() const &
const QList< Export > & exports() const &
void setExports(const QList< Export > &exports)
void addExport(const Export &exportedEntry)
const QStringList & interfaceNames() const &
QmltypesComponent(const Path &pathFromOwner=Path())
DomType kind() const override
Use this to contain any script element.
void replaceKindForGenericChildren(DomType oldType, DomType newType)
QStringView loc2Str(const SourceLocation &) const
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
DomType kind() const override
std::shared_ptr< AstComments > astComments() const
std::shared_ptr< QQmlJS::Engine > engine() const
ScriptExpression(const QString &code, ExpressionType expressionType)
static constexpr DomType kindValue
SourceLocation locationToLocal(const SourceLocation &x) const
std::shared_ptr< ScriptExpression > makeCopy(const DomItem &self) const
ScriptExpression(const ScriptExpression &e)
ExpressionType expressionType() const
void writeOut(const DomItem &self, OutWriter &lw) const override
SourceLocation globalLocation(const DomItem &self) const
ScriptExpression(QStringView code, const std::shared_ptr< QQmlJS::Engine > &engine, AST::Node *ast, const std::shared_ptr< AstComments > &comments, ExpressionType expressionType, const SourceLocation &localOffset=SourceLocation())
QString astRelocatableDump() const
void setScriptElement(const ScriptElementVariant &p)
std::shared_ptr< OwningItem > doCopy(const DomItem &) const override
ScriptElementVariant scriptElement()
void astDumper(const Sink &s, AstDumperOptions options) const
SourceLocation localOffset() const
Path canonicalPath(const DomItem &self) const override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const
QString majorString() const
static constexpr DomType kindValue
Version(qint32 majorVersion=Undefined, qint32 minorVersion=Undefined)
QString minorString() const
int compare(Version o) const
static Version fromString(QStringView v)
QString stringValue() const
static constexpr qint32 Undefined
static constexpr qint32 Latest
QString majorSymbolicString() const
Provides entities to maintain mappings between elements and their location in a file.
Tree ensure(const Tree &base, const Path &basePath)
std::shared_ptr< Node > Tree
Path lookupTypePath(const QString &name)
Path loadInfoPath(const Path &el)
Path moduleScopePath(const QString &uri, const ErrorHandler &errorHandler=nullptr)
Path qmltypesFilePath(const QString &path)
Path jsFilePath(const QString &path)
Path lookupCppTypePath(const QString &name)
Path qmlFileInfoPath(const QString &canonicalFilePath)
Path moduleIndexPath(const QString &uri, int majorVersion, const ErrorHandler &errorHandler=nullptr)
Path qmlFilePath(const QString &canonicalFilePath)
Path globalScopePath(const QString &name)
Path moduleScopePath(const QString &uri, const QString &version, const ErrorHandler &errorHandler=nullptr)
Path lookupSymbolPath(const QString &name)
Path jsFileInfoPath(const QString &path)
Path lookupPropertyPath(const QString &name)
Path moduleScopePath(const QString &uri, Version version, const ErrorHandler &errorHandler=nullptr)
Path qmlDirPath(const QString &path)
Path qmlDirectoryPath(const QString &path)
Path qmldirFilePath(const QString &path)
Path qmlDirectoryInfoPath(const QString &path)
Path qmltypesFileInfoPath(const QString &path)
Path qmldirFileInfoPath(const QString &path)
Path qmlDirInfoPath(const QString &path)
Path qmlFileObjectPath(const QString &canonicalFilePath)
Path globalScopeInfoPath(const QString &name)
bool operator>(Version v1, Version v2)
bool operator==(Version v1, Version v2)
std::disjunction< std::is_same< U, V >... > IsInList
bool operator<(Version v1, Version v2)
bool operator<=(Version v1, Version v2)
bool operator!=(Version v1, Version v2)
bool operator>=(Version v1, Version v2)
bool visitWithCustomListIteration(T *t, AST::Visitor *visitor)
std::function< void(const ErrorMessage &)> ErrorHandler
@ ScriptVariableDeclarationEntry
@ ScriptContinueStatement
@ ScriptLabelledStatement
@ ScriptTemplateExpressionPart
@ ScriptParenthesizedExpression
@ ScriptNewMemberExpression
@ ScriptConditionalExpression
@ ScriptIdentifierExpression
@ ScriptTryCatchStatement
@ ScriptFunctionExpression
@ ScriptVariableDeclaration
@ ScriptTemplateStringPart
static ErrorGroups importErrors
Q_STATIC_LOGGING_CATEGORY(lcAccessibilityCore, "qt.accessibility.core")
#define Q_SCRIPTELEMENT_EXIT_IF(check)
#define Q_SCRIPTELEMENT_DISABLE()
#define NewErrorGroup(name)