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.invokeVisitorOnField(visitor, Fields::import, import);
327 cont = cont && self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::inheritVersion),
350 Pragma(
const QString &pragmaName = QString(),
const QStringList &pragmaValues = {})
357 bool cont = self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::name), name);
358 cont = cont && self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::values), values);
359 cont = cont && self.invokeVisitorOnField(visitor, Fields::comments, comments);
375 Id(
const QString &idName = QString(),
const Path &referredObject =
Path());
409 explicit ScriptExpression(QStringView code,
const std::shared_ptr<QQmlJS::Engine> &engine,
411 ExpressionType expressionType,
412 const SourceLocation &localOffset = SourceLocation());
440 void astDumper(
const Sink &s, AstDumperOptions options)
const;
447 QMutexLocker l(mutex());
453 QMutexLocker l(mutex());
454 return m_expressionType;
459 QMutexLocker l(mutex());
460 return m_code.isNull();
464 QMutexLocker l(mutex());
483 return SourceLocation(
484 x.offset - m_localOffset.offset, x.length, x.startLine - m_localOffset.startLine,
485 ((x.startLine == m_localOffset.startLine)
486 ? x.startColumn - m_localOffset.startColumn
491 void setCode(
const QString &code);
492 [[nodiscard]] AST::Node *parse();
494 ExpressionType m_expressionType;
497 mutable std::shared_ptr<QQmlJS::Engine> m_engine;
498 mutable AST::Node *m_ast;
500 SourceLocation m_localOffset;
511 Binding(
const QString &m_name = QString());
512 Binding(
const QString &m_name, std::unique_ptr<BindingValue> &&value,
516 Binding(
const QString &m_name,
const QString &scriptCode,
520 Binding(
const QString &m_name,
const QList<QmlObject> &value,
540 void setAnnotations(
const QList<QmlObject> &annotations) { m_annotations = annotations; }
541 void setValue(std::unique_ptr<BindingValue> &&value);
550 QString baseName = m_name.split(QLatin1Char(
'.')).last();
551 return QQmlSignalNames::isHandlerName(baseName);
555 return QStringLiteral(u"QtObject{\n %1: ").arg(n.split(u'.').last());
568 std::unique_ptr<BindingValue> m_value;
569 QList<QmlObject> m_annotations;
626 bool cont = AttributeInfo::iterateDirectSubpaths(self, visitor);
627 cont = cont && self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::isPointer),
isPointer);
629 cont = cont && self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::isFinal),
isFinal);
630 cont = cont && self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::isAlias),
isAlias());
631 cont = cont && self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::isDefaultMember),
633 cont = cont && self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::isRequired),
635 cont = cont && self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::read), read);
636 cont = cont && self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::write), write);
637 cont = cont && self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::bindable), bindable);
638 cont = cont && self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::notify), notify);
639 cont = cont && self.invokeVisitorOnReference(visitor, Fields::type,
typePath());
640 if (m_nameIdentifiers) {
641 cont = cont && visitor(
PathEls::Field(Fields::nameIdentifiers), [
this, &self]() {
642 return self.subScriptElementWrapperItem(m_nameIdentifiers);
650 bool isAlias()
const {
return typeName == u"alias"; }
726 return (typeName.isEmpty() ? Path() : Paths::lookupTypePath(typeName));
745 void writeOutArguments(
const DomItem &self, OutWriter &ow)
const;
746 void writeOutReturnType(
const DomItem &self, OutWriter &ow)
const;
747 void writeOutBody(
const DomItem &self, OutWriter &ow)
const;
759 :
m_name(
name), m_value(value), m_valueKind(valueKind)
766 double value()
const {
return m_value; }
784 EnumDecl(
const QString &name = QString(),
const QList<EnumItem> &values = QList<
EnumItem>(),
793 void setName(
const QString &name) { m_name = name; }
798 void setAlias(
const QString &aliasName) { m_alias = aliasName; }
799 void setValues(
const QList<EnumItem> &values) { m_values = values; }
802 m_values.append(value);
803 return Path::fromField(Fields::values).withIndex(index_type(m_values.size() - 1));
814 bool m_isFlag =
false;
816 QList<EnumItem> m_values;
817 QList<QmlObject> m_annotations;
837 function_ref<
bool(
const DomItem &owner)> visitor)
const;
850 void setName(
const QString &name) { m_name = name; }
852 void setPrototypePaths(
const QList<Path> &prototypePaths) { m_prototypePaths = prototypePaths; }
855 index_type idx = index_type(m_prototypePaths.indexOf(prototypePath));
857 idx = index_type(m_prototypePaths.size());
858 m_prototypePaths.append(prototypePath);
860 return Path::fromField(Fields::prototypes).withIndex(idx);
865 m_propertyDefs = propertyDefs;
867 void setBindings(
const QMultiMap<QString, Binding> &bindings) { m_bindings = bindings; }
868 void setMethods(
const QMultiMap<QString, MethodInfo> &functionDefs)
870 m_methods = functionDefs;
874 m_children = children;
880 m_annotations = annotations;
887 return insertUpdatableElementInMultiMap(
pathFromOwner().withField(Fields::propertyDefs),
888 m_propertyDefs, propertyDef.name, propertyDef,
896 return insertUpdatableElementInMultiMap(
pathFromOwner().withField(Fields::bindings), m_bindings,
897 binding.name(), binding, option, bPtr);
902 return insertUpdatableElementInMultiMap(
pathFromOwner().withField(Fields::methods), m_methods,
903 functionDef.name, functionDef, option, mPtr);
908 return appendUpdatableElementInQList(
pathFromOwner().withField(Fields::children), m_children,
918 return appendUpdatableElementInQList(
pathFromOwner().withField(Fields::annotations),
919 m_annotations, annotation, aPtr);
923 const DomItem &component)
const;
925 void writeOutAttributes(OutWriter &ow,
const Attributes &attribs,
const QString &code)
const;
929 const Attributes &attribs)
const;
931 QSet<QString> &mergedDefBinding,
932 const QStringList &keys)
const;
935 void writeOut(
const DomItem &self, OutWriter &ow,
const QString &onTarget)
const;
952 QList<Path> m_prototypePaths;
953 Path m_nextScopePath;
954 QString m_defaultPropertyName;
955 QMultiMap<QString, PropertyDefinition> m_propertyDefs;
956 QMultiMap<QString, Binding> m_bindings;
957 QMultiMap<QString, MethodInfo> m_methods;
958 QList<QmlObject> m_children;
959 QList<QmlObject> m_annotations;
960 QQmlJSScope::ConstPtr m_scope;
976 cont = cont && self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::uri), uri);
977 cont = cont && self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::typeName), typeName);
978 cont = cont && self.invokeVisitorOnField(visitor, Fields::version, version);
980 cont = cont && self.invokeVisitorOnReference(visitor, Fields::type, typePath);
981 cont = cont && self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::isInternal),
983 cont = cont && self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::isSingleton),
985 if (exportSourcePath)
986 cont = cont && self.invokeVisitorOnReference(visitor, Fields::exportSource,
1021 void setName(
const QString &name) { m_name = name; }
1024 m_enumerations = enumerations;
1027 EnumDecl **ePtr =
nullptr)
1029 return insertUpdatableElementInMultiMap(
pathFromOwner().withField(Fields::enumerations),
1030 m_enumerations, enumeration.name(), enumeration,
1033 void setObjects(
const QList<QmlObject> &objects) { m_objects = objects; }
1044 QMultiMap<QString, EnumDecl> m_enumerations;
1045 QList<QmlObject> m_objects;
1046 bool m_isSingleton =
false;
1047 bool m_isCreatable =
true;
1048 bool m_isComposite =
true;
1049 QString m_attachedTypeName;
1050 Path m_attachedTypePath;
1077 void setExports(
const QList<Export> &exports) { m_exports = exports; }
1101 QList<Export> m_exports;
1102 QList<
int> m_metaRevisions;
1104 QStringList m_interfaceNames;
1105 bool m_hasCustomParser =
false;
1106 bool m_extensionIsJavaScript =
false;
1107 bool m_extensionIsNamespace =
false;
1108 QString m_elementTypeName;
1109 QString m_extensionTypeName;
1110 QQmlJSScope::AccessSemantics m_accessSemantics = QQmlJSScope::AccessSemantics::None;
1111 QQmlJSScope::ConstPtr m_semanticScope;
1130 void setIds(
const QMultiMap<QString, Id> &ids) { m_ids = ids; }
1136 return insertUpdatableElementInMultiMap(
pathFromOwner().withField(Fields::ids), m_ids, id.name,
1150 Path m_nextComponentPath;
1151 QMultiMap<QString, Id> m_ids;
1152 QQmlJSScope::ConstPtr m_semanticScope;
1186 const auto sources = allSources(self);
1187 for (
const Path &p : sources) {
1188 QSet<QString> ks = self.path(p.withField(Fields::exports), self.errorHandler()).keys();
1197 const auto sources = allSources(self);
1198 for (
const Path &p : sources) {
1199 DomItem source = self.path(p.withField(Fields::exports), self.errorHandler());
1200 DomItem els = source.key(name);
1201 int nEls = els.indexes();
1202 for (
int i = 0; i < nEls; ++i)
1203 res.append(els.index(i));
1204 if (nEls == 0 && els) {
1205 self.addError(importErrors.warning(
1206 tr(
"Looking up '%1' expected a list of exports, not %2")
1207 .arg(name, els.toString())));
1216 for (
const DomItem &i : importedItemsWithName(self, name))
1217 if (
const Export *e = i.as<Export>())
1220 self.addError(importErrors.warning(
1221 tr(
"Expected Export looking up '%1', not %2").arg(name, i.toString())));
1230 m_subImports[p.first()].addImport(p.mid(1), targetExports);
1231 else if (!m_importSourcePaths.contains(targetExports))
1232 m_importSourcePaths.append(targetExports);
1236 QList<Path> m_importSourcePaths;
1237 QMap<QString, ImportScope> m_subImports;
1258 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 writeOutSortedEnumerations(const QList< DomItem > &descs, OutWriter &ow) const
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)
Path addAnnotation(const QmlObject &annotation, QmlObject **aPtr=nullptr)
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 QStringList &keys) const
Path addPropertyDef(const PropertyDefinition &propertyDef, AddOption option, PropertyDefinition **pDef=nullptr)
void writeOutSortedAttributes(const DomItem &self, OutWriter &ow, const DomItem &component, const Attributes &attribs) const
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 writeOutAttributes(OutWriter &ow, const Attributes &attribs, const QString &code) const
MutableDomItem addMethod(MutableDomItem &self, const MethodInfo &functionDef, AddOption option)
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
QList< std::pair< SourceLocation, DomItem > > Attributes
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.
void addRegion(const Tree &fLoc, FileLocationRegion region, SourceLocation loc)
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
Combined button and popup list for selecting options.
QT_BEGIN_NAMESPACE Q_STATIC_LOGGING_CATEGORY(lcSynthesizedIterableAccess, "qt.iterable.synthesized", QtWarningMsg)
#define Q_SCRIPTELEMENT_EXIT_IF(check)
#define Q_SCRIPTELEMENT_DISABLE()
#define NewErrorGroup(name)