17#include <qtqmlcompilerexports.h>
25#include <QtQml/private/qqmljssourcelocation_p.h>
27#include <QtCore/qfileinfo.h>
28#include <QtCore/qhash.h>
29#include <QtCore/qset.h>
30#include <QtCore/qstring.h>
31#include <QtCore/qversionnumber.h>
45 using Ptr = QDeferredSharedPointer<QQmlJSScope>;
46 using ConstPtr = QDeferredSharedPointer<const QQmlJSScope>;
57 return a.m_iterator ==
b.m_iterator;
61 return a.m_iterator !=
b.m_iterator;
67 m_pointer = *m_iterator;
73 m_pointer = *m_iterator;
114template<
typename Po
inter>
120template<
typename Po
inter>
139 using Ptr = QDeferredSharedPointer<QQmlJSScope>;
140 using WeakPtr = QDeferredWeakPointer<QQmlJSScope>;
141 using ConstPtr = QDeferredSharedPointer<const QQmlJSScope>;
153 std::variant<InlineComponentNameType, RootDocumentNameType>;
162 InlineComponent = 0x40,
163 WrappedInImplicitComponent = 0x80,
164 HasBaseTypeError = 0x100,
165 ExtensionIsNamespace = 0x200,
166 IsListProperty = 0x400,
168 ExtensionIsJavaScript = 0x1000,
174 template <typename Pointer>
176 template <typename Pointer>
191 bool isConst =
false;
198 UnnamedPropertyTarget
201 template <
typename Key,
typename Value>
216 QHash<QString, JavaScriptIdentifier> ownJSIdentifiers()
const;
225 return m_methods.equal_range(
name);
227 QMultiHash<QString, QQmlJSMetaMethod>
ownMethods()
const {
return m_methods; }
232 QHash<QString, QQmlJSMetaMethod>
methods()
const;
243 bool hasOwnEnumerationKey(
const QString &
name)
const;
245 QHash<QString, QQmlJSMetaEnum> enumerations()
const;
247 void setAnnotations(
const QList<QQmlJSAnnotation> &annotation) { m_annotations = std::move(annotation); }
248 const QList<QQmlJSAnnotation> &
annotations()
const {
return m_annotations; }
257 QString augmentedInternalName()
const;
262 bool isComponentRootElement()
const;
282 void setBaseTypeName(
const QString &baseTypeName);
293 void setBaseTypeError(
const QString &baseTypeError);
297 QHash<QString, QQmlJSMetaProperty>
ownProperties()
const {
return m_properties; }
303 QHash<QString, QQmlJSMetaProperty>
properties()
const;
305 void setPropertyLocallyRequired(
const QString &
name,
bool isRequired);
306 bool isPropertyRequired(
const QString &
name)
const;
307 bool isPropertyLocallyRequired(
const QString &
name)
const;
309 void addOwnPropertyBinding(
311 BindingTargetSpecifier specifier = BindingTargetSpecifier::SimplePropertyTarget);
312 QMultiHash<QString, QQmlJSMetaPropertyBinding> ownPropertyBindings()
const;
313 QPair<QMultiHash<QString, QQmlJSMetaPropertyBinding>::const_iterator,
316 QList<QQmlJSMetaPropertyBinding> ownPropertyBindingsInQmlIROrder()
const;
317 bool hasOwnPropertyBindings(
const QString &
name)
const;
319 bool hasPropertyBindings(
const QString &
name)
const;
320 QList<QQmlJSMetaPropertyBinding> propertyBindings(
const QString &
name)
const;
322 struct AnnotatedScope;
325 bool isResolved()
const;
326 bool isFullyResolved()
const;
330 QString defaultPropertyName()
const;
334 QString parentPropertyName()
const;
340 QString attachedTypeName()
const;
385 bool isCreatable()
const;
386 bool isStructured()
const;
387 bool isReferenceType()
const {
return m_semantics == QQmlJSScope::AccessSemantics::Reference; }
388 bool isValueType()
const {
return m_semantics == QQmlJSScope::AccessSemantics::Value; }
395 void setHasCustomParser(
bool v);
406 std::optional<JavaScriptIdentifier> jsIdentifier(
const QString &
id)
const;
407 std::optional<JavaScriptIdentifier> ownJSIdentifier(
const QString &
id)
const;
412 void setInlineComponentName(
const QString &inlineComponentName);
413 std::optional<QString> inlineComponentName()
const;
414 InlineComponentOrDocumentRootName enclosingInlineComponentName()
const;
416 QVector<QQmlJSScope::Ptr> childScopes();
418 QVector<QQmlJSScope::ConstPtr> childScopes()
const;
422 QSet<QString> *usedTypes =
nullptr);
423 static void resolveNonEnumTypes(
425 QSet<QString> *usedTypes =
nullptr);
426 static void resolveEnums(
428 QSet<QString> *usedTypes =
nullptr);
429 static void resolveList(
431 static void resolveGeneralizedGroup(
434 QSet<QString> *usedTypes =
nullptr);
442 nonCompositeBaseRevision(
const ImportedScope<QQmlJSScope::ConstPtr> &scope);
448 bool isInCustomParserParent()
const;
451 static ImportedScope<QQmlJSScope::ConstPtr> findType(
const QString &
name,
453 QSet<QString> *usedTypes =
nullptr);
466 template <
typename T>
468 struct QmlIRCompatibilityBindingData
470 QmlIRCompatibilityBindingData() =
default;
472 : propertyName(
name), sourceLocationOffset(
offset)
476 quint32 sourceLocationOffset = 0;
484 QSet<QString> *usedTypes);
485 static void updateChildScope(
490 BindingTargetSpecifier specifier);
491 bool hasCreatableFlag()
const {
return m_flags &
Creatable; }
492 bool hasStructuredFlag()
const {
return m_flags &
Structured; }
494 QHash<QString, JavaScriptIdentifier> m_jsIdentifiers;
496 QMultiHash<QString, QQmlJSMetaMethod> m_methods;
497 QHash<QString, QQmlJSMetaProperty> m_properties;
498 QMultiHash<QString, QQmlJSMetaPropertyBinding> m_propertyBindings;
502 QList<QmlIRCompatibilityBindingData> m_propertyBindingsArray;
505 QList<QQmlJSMetaMethod::AbsoluteFunctionIndex> m_runtimeFunctionIndices;
507 QHash<QString, QQmlJSMetaEnum> m_enumerations;
509 QVector<QQmlJSAnnotation> m_annotations;
510 QVector<QQmlJSScope::Ptr> m_childScopes;
519 ImportedScope<QQmlJSScope::WeakConstPtr> m_baseType;
521 ScopeType m_scopeType = ScopeType::QMLScope;
562 std::optional<QString> m_inlineComponentName;
573#if defined(Q_CC_GNU_ONLY) && Q_CC_GNU < 1400 && Q_CC_GNU >= 1200
582 return m_propertyBindings;
597 const int i =
static_cast<int>(
index);
600 return m_runtimeFunctionIndices[
i];
616 return m_childScopes;
626 return m_sourceLocation;
632 if (!
base->isComposite())
647 m_filePath(filePath), m_importer(importer)
652 return !m_filePath.isEmpty() && m_importer !=
nullptr;
662 m_isSingleton = isSingleton;
665 void setModuleName(
const QString &moduleName) { m_moduleName = moduleName; }
674 void populate(
const QSharedPointer<QQmlJSScope> &scope)
const;
678 bool m_isSingleton =
false;
static JNINativeMethod methods[]
QDeferredFactory(QQmlJSImporter *importer, const QString &filePath)
QDeferredFactory()=default
void setIsSingleton(bool isSingleton)
QString internalName() const
QSharedPointer< T > toStrongRef() const
QString baseName() const
Returns the base name of the file without the path.
qsizetype size() const noexcept
std::pair< iterator, iterator > equal_range(const Key &key)
bool contains(const Key &key) const noexcept
Tracks the types for the QmlCompiler.
void setIsInlineComponent(bool v)
QQmlJSMetaProperty ownProperty(const QString &name) const
void setIsComposite(bool v)
bool isWrappedInImplicitComponent() const
bool hasOwnPropertyBindings(const QString &name) const
void setOwnDeferredNames(const QStringList &names)
void setExtensionTypeName(const QString &name)
void setExtensionIsJavaScript(bool v)
void setAnnotations(const QList< QQmlJSAnnotation > &annotation)
void setInterfaceNames(const QStringList &interfaces)
QQmlJSScope & operator=(QQmlJSScope &&)=default
static QQmlJSScope::Ptr create()
QString extensionTypeName() const
void setStructuredFlag(bool v)
const QList< QQmlJSAnnotation > & annotations() const
void setAccessSemantics(AccessSemantics semantics)
std::monostate RootDocumentNameType
QQmlJSMetaEnum ownEnumeration(const QString &name) const
void setOwnParentPropertyName(const QString &name)
QString ownModuleName() const
QQmlJSScope::Ptr listType()
QQmlJS::ConstPtrWrapperIterator childScopesEnd() const
QQmlJS::ConstPtrWrapperIterator childScopesBegin() const
QHash< QString, QQmlJSMetaEnum > ownEnumerations() const
QQmlJSScope::Ptr parentScope()
void setOwnAttachedTypeName(const QString &name)
ScopeType scopeType() const
void setInternalName(const QString &internalName)
QDeferredWeakPointer< const QQmlJSScope > WeakConstPtr
QString internalName() const
std::variant< InlineComponentNameType, RootDocumentNameType > InlineComponentOrDocumentRootName
A Hashable type to differentiate document roots from different inline components.
void setHasCustomParser(bool v)
void setIsSingleton(bool v)
QList< QQmlJSMetaMethod > ownMethods(const QString &name) const
void setScopeType(ScopeType type)
bool isReferenceType() const
QPair< typename QMultiHash< Key, Value >::iterator, typename QMultiHash< Key, Value >::iterator > QMultiHashRange
void addOwnProperty(const QQmlJSMetaProperty &prop)
QQmlJSMetaMethod::AbsoluteFunctionIndex ownRuntimeFunctionIndex(QQmlJSMetaMethod::RelativeFunctionIndex index) const
bool isInlineComponent() const
void setOwnModuleName(const QString &moduleName)
AccessSemantics accessSemantics() const
void setExtensionIsNamespace(bool v)
void setIsArrayScope(bool v)
QVector< QQmlJSScope::Ptr > childScopes()
void setAliases(const QStringList &aliases)
QString ownDefaultPropertyName() const
bool hasCustomParser() const
bool isListProperty() const
QStringList ownDeferredNames() const
void setSourceLocation(const QQmlJS::SourceLocation &sourceLocation)
QQmlJSScope(QQmlJSScope &&)=default
QQmlJSScope::ConstPtr listType() const
void setInlineComponentName(const QString &inlineComponentName)
QStringList ownImmediateNames() const
void setValueTypeName(const QString &name)
void setOwnImmediateNames(const QStringList &names)
static QQmlJSScope::ConstPtr nonCompositeBaseType(const QQmlJSScope::ConstPtr &type)
QString valueTypeName() const
void addOwnEnumeration(const QQmlJSMetaEnum &enumeration)
bool isArrayScope() const
QStringList interfaceNames() const
QMultiHashRange< QString, QQmlJSMetaMethod > mutableOwnMethodsRange(const QString &name)
bool hasOwnEnumeration(const QString &name) const
void setIsWrappedInImplicitComponent(bool v)
bool hasOwnProperty(const QString &name) const
bool hasOwnInterface(const QString &name) const
QQmlJSScope::ConstPtr baseType() const
bool extensionIsNamespace() const
void addOwnMethod(const QQmlJSMetaMethod &method)
QString ownParentPropertyName() const
void setCreatableFlag(bool v)
static constexpr qsizetype sizeofQQmlSAElement()
QStringList aliases() const
std::optional< QString > inlineComponentName() const
QHash< QString, QQmlJSMetaProperty > ownProperties() const
void setOwnDefaultPropertyName(const QString &name)
QQmlJSScope::ConstPtr ownAttachedType() const
QMultiHash< QString, QQmlJSMetaPropertyBinding > ownPropertyBindings() const
void setIsListProperty(bool v)
QQmlJS::SourceLocation sourceLocation() const
bool extensionIsJavaScript() const
void setFilePath(const QString &file)
QMultiHash< QString, QQmlJSMetaMethod > ownMethods() const
QTypeRevision baseTypeRevision() const
QQmlJSScope::ConstPtr valueType() const
bool hasOwnMethod(const QString &name) const
QString ownAttachedTypeName() const
std::ptrdiff_t difference_type
ConstPtrWrapperIterator(QList< Ptr >::const_iterator iterator)
QDeferredSharedPointer< const QQmlJSScope > ConstPtr
friend bool operator==(const ConstPtrWrapperIterator &a, const ConstPtrWrapperIterator &b)
ConstPtrWrapperIterator & operator++()
friend bool operator!=(const ConstPtrWrapperIterator &a, const ConstPtrWrapperIterator &b)
std::forward_iterator_tag iterator_category
ConstPtrWrapperIterator operator++(int)
QTypeRevision revision() const
QTypeRevision version() const
\macro QT_RESTRICTED_CAST_FROM_ASCII
Combined button and popup list for selecting options.
#define QT_WARNING_DISABLE_GCC(text)
static const QCssKnownValue properties[NumProperties - 1]
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char * method
#define Q_DECLARE_FLAGS(Flags, Enum)
GLboolean GLboolean GLboolean b
GLsizei const GLfloat * v
[13]
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLuint GLintptr offset
static QStringList aliases(const QQmlJSScope::ConstPtr &scope)
static QString internalName(const QQmlJSScope::ConstPtr &scope)
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
QQmlJSScope::ConstPtr scope
std::optional< QString > typeName
QQmlJS::SourceLocation location