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));
744 void writeOutArguments(
const DomItem &self, OutWriter &ow)
const;
745 void writeOutReturnType(
const DomItem &self, OutWriter &ow)
const;
746 void writeOutBody(
const DomItem &self, OutWriter &ow)
const;
758 :
m_name(
name), m_value(value), m_valueKind(valueKind)
765 double value()
const {
return m_value; }
783 EnumDecl(
const QString &name = QString(),
const QList<EnumItem> &values = QList<
EnumItem>(),
792 void setName(
const QString &name) { m_name = name; }
797 void setAlias(
const QString &aliasName) { m_alias = aliasName; }
798 void setValues(
const QList<EnumItem> &values) { m_values = values; }
801 m_values.append(value);
802 return Path::fromField(Fields::values).withIndex(index_type(m_values.size() - 1));
813 bool m_isFlag =
false;
815 QList<EnumItem> m_values;
816 QList<QmlObject> m_annotations;
836 function_ref<
bool(
const DomItem &owner)> visitor)
const;
849 void setName(
const QString &name) { m_name = name; }
851 void setPrototypePaths(
const QList<Path> &prototypePaths) { m_prototypePaths = prototypePaths; }
854 index_type idx = index_type(m_prototypePaths.indexOf(prototypePath));
856 idx = index_type(m_prototypePaths.size());
857 m_prototypePaths.append(prototypePath);
859 return Path::fromField(Fields::prototypes).withIndex(idx);
864 m_propertyDefs = propertyDefs;
866 void setBindings(
const QMultiMap<QString, Binding> &bindings) { m_bindings = bindings; }
867 void setMethods(
const QMultiMap<QString, MethodInfo> &functionDefs)
869 m_methods = functionDefs;
873 m_children = children;
879 m_annotations = annotations;
886 return insertUpdatableElementInMultiMap(
pathFromOwner().withField(Fields::propertyDefs),
887 m_propertyDefs, propertyDef.name, propertyDef,
895 return insertUpdatableElementInMultiMap(
pathFromOwner().withField(Fields::bindings), m_bindings,
896 binding.name(), binding, option, bPtr);
901 return insertUpdatableElementInMultiMap(
pathFromOwner().withField(Fields::methods), m_methods,
902 functionDef.name, functionDef, option, mPtr);
907 return appendUpdatableElementInQList(
pathFromOwner().withField(Fields::children), m_children,
917 return appendUpdatableElementInQList(
pathFromOwner().withField(Fields::annotations),
918 m_annotations, annotation, aPtr);
922 const DomItem &component)
const;
924 const QString &code)
const;
928 const DomItem &component)
const;
930 QSet<QString> &mergedDefBinding,
931 const QStringList &keys)
const;
934 void writeOut(
const DomItem &self, OutWriter &ow,
const QString &onTarget)
const;
951 QList<Path> m_prototypePaths;
952 Path m_nextScopePath;
953 QString m_defaultPropertyName;
954 QMultiMap<QString, PropertyDefinition> m_propertyDefs;
955 QMultiMap<QString, Binding> m_bindings;
956 QMultiMap<QString, MethodInfo> m_methods;
957 QList<QmlObject> m_children;
958 QList<QmlObject> m_annotations;
959 QQmlJSScope::ConstPtr m_scope;
975 cont = cont && self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::uri), uri);
976 cont = cont && self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::typeName), typeName);
977 cont = cont && self.invokeVisitorOnField(visitor, Fields::version, version);
979 cont = cont && self.invokeVisitorOnReference(visitor, Fields::type, typePath);
980 cont = cont && self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::isInternal),
982 cont = cont && self.invokeVisitorOnValue(visitor,
PathEls::Field(Fields::isSingleton),
984 if (exportSourcePath)
985 cont = cont && self.invokeVisitorOnReference(visitor, Fields::exportSource,
1020 void setName(
const QString &name) { m_name = name; }
1023 m_enumerations = enumerations;
1026 EnumDecl **ePtr =
nullptr)
1028 return insertUpdatableElementInMultiMap(
pathFromOwner().withField(Fields::enumerations),
1029 m_enumerations, enumeration.name(), enumeration,
1032 void setObjects(
const QList<QmlObject> &objects) { m_objects = objects; }
1043 QMultiMap<QString, EnumDecl> m_enumerations;
1044 QList<QmlObject> m_objects;
1045 bool m_isSingleton =
false;
1046 bool m_isCreatable =
true;
1047 bool m_isComposite =
true;
1048 QString m_attachedTypeName;
1049 Path m_attachedTypePath;
1076 void setExports(
const QList<Export> &exports) { m_exports = exports; }
1100 QList<Export> m_exports;
1101 QList<
int> m_metaRevisions;
1103 QStringList m_interfaceNames;
1104 bool m_hasCustomParser =
false;
1105 bool m_extensionIsJavaScript =
false;
1106 bool m_extensionIsNamespace =
false;
1107 QString m_elementTypeName;
1108 QString m_extensionTypeName;
1109 QQmlJSScope::AccessSemantics m_accessSemantics = QQmlJSScope::AccessSemantics::None;
1110 QQmlJSScope::ConstPtr m_semanticScope;
1129 void setIds(
const QMultiMap<QString, Id> &ids) { m_ids = ids; }
1135 return insertUpdatableElementInMultiMap(
pathFromOwner().withField(Fields::ids), m_ids, id.name,
1149 Path m_nextComponentPath;
1150 QMultiMap<QString, Id> m_ids;
1151 QQmlJSScope::ConstPtr m_semanticScope;
1185 const auto sources = allSources(self);
1186 for (
const Path &p : sources) {
1187 QSet<QString> ks = self.path(p.withField(Fields::exports), self.errorHandler()).keys();
1196 const auto sources = allSources(self);
1197 for (
const Path &p : sources) {
1198 DomItem source = self.path(p.withField(Fields::exports), self.errorHandler());
1199 DomItem els = source.key(name);
1200 int nEls = els.indexes();
1201 for (
int i = 0; i < nEls; ++i)
1202 res.append(els.index(i));
1203 if (nEls == 0 && els) {
1204 self.addError(importErrors.warning(
1205 tr(
"Looking up '%1' expected a list of exports, not %2")
1206 .arg(name, els.toString())));
1215 for (
const DomItem &i : importedItemsWithName(self, name))
1216 if (
const Export *e = i.as<Export>())
1219 self.addError(importErrors.warning(
1220 tr(
"Expected Export looking up '%1', not %2").arg(name, i.toString())));
1229 m_subImports[p.first()].addImport(p.mid(1), targetExports);
1230 else if (!m_importSourcePaths.contains(targetExports))
1231 m_importSourcePaths.append(targetExports);
1235 QList<Path> m_importSourcePaths;
1236 QMap<QString, ImportScope> m_subImports;
1257 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)
static constexpr DomType kindValue
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)
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.
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)