Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qqmljsscope_p.h
Go to the documentation of this file.
1// Copyright (C) 2019 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4#ifndef QQMLJSSCOPE_P_H
5#define QQMLJSSCOPE_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16
17#include <qtqmlcompilerexports.h>
18
19#include "qqmljsmetatypes_p.h"
20#include "qdeferredpointer_p.h"
21#include "qqmljsannotation_p.h"
22#include "qqmlsaconstants.h"
23#include "qqmlsa_p.h"
24
25#include <QtQml/private/qqmljssourcelocation_p.h>
26
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>
32#include "qqmlsaconstants.h"
33
34#include <optional>
35
37
38class QQmlJSImporter;
39
40namespace QQmlJS {
41
43{
44public:
45 using Ptr = QDeferredSharedPointer<QQmlJSScope>;
46 using ConstPtr = QDeferredSharedPointer<const QQmlJSScope>;
47 using iterator_category = std::forward_iterator_tag;
48 using difference_type = std::ptrdiff_t;
52
53 ConstPtrWrapperIterator(QList<Ptr>::const_iterator iterator) : m_iterator(iterator) { }
54
56 {
57 return a.m_iterator == b.m_iterator;
58 }
60 {
61 return a.m_iterator != b.m_iterator;
62 }
63
65 {
66 if (!m_pointer)
67 m_pointer = *m_iterator;
68 return m_pointer;
69 }
71 {
72 if (!m_pointer)
73 m_pointer = *m_iterator;
74 return &m_pointer;
75 }
76
78 {
79 m_iterator++;
80 m_pointer = {};
81 return *this;
82 }
84 {
85 auto before = *this;
86 ++(*this);
87 return before;
88 }
89
90private:
92 ConstPtr m_pointer;
93};
94
95class Export {
96public:
97 Export() = default;
99
100 bool isValid() const;
101
102 QString package() const { return m_package; }
103 QString type() const { return m_type; }
104 QTypeRevision version() const { return m_version; }
105 QTypeRevision revision() const { return m_revision; }
106
107private:
108 QString m_package;
109 QString m_type;
110 QTypeRevision m_version;
111 QTypeRevision m_revision;
112};
113
114template<typename Pointer>
116 Pointer scope;
117 QList<Export> exports;
118};
119
120template<typename Pointer>
125
126struct ContextualTypes;
127
128} // namespace QQmlJS
129
130class Q_QMLCOMPILER_EXPORT QQmlJSScope
131{
132 friend QQmlSA::Element;
133
134public:
135 explicit QQmlJSScope(const QString &internalName);
138
139 using Ptr = QDeferredSharedPointer<QQmlJSScope>;
140 using WeakPtr = QDeferredWeakPointer<QQmlJSScope>;
141 using ConstPtr = QDeferredSharedPointer<const QQmlJSScope>;
142 using WeakConstPtr = QDeferredWeakPointer<const QQmlJSScope>;
143
146
148 using RootDocumentNameType = std::monostate; // an empty type that has std::hash
153 std::variant<InlineComponentNameType, RootDocumentNameType>;
154
155 enum Flag {
156 Creatable = 0x1,
157 Composite = 0x2,
159 Script = 0x8,
160 CustomParser = 0x10,
161 Array = 0x20,
162 InlineComponent = 0x40,
163 WrappedInImplicitComponent = 0x80,
164 HasBaseTypeError = 0x100,
165 ExtensionIsNamespace = 0x200,
166 IsListProperty = 0x400,
167 Structured = 0x800,
168 ExtensionIsJavaScript = 0x1000,
169 };
172
174 template <typename Pointer>
176 template <typename Pointer>
178
180 {
187
188 Kind kind = FunctionScoped;
190 std::optional<QString> typeName;
191 bool isConst = false;
193 };
194
196 SimplePropertyTarget, // e.g. `property int p: 42`
197 ListPropertyTarget, // e.g. `property list<Item> pList: [ Text {} ]`
198 UnnamedPropertyTarget // default property bindings, where property name is unspecified
199 };
200
201 template <typename Key, typename Value>
202 using QMultiHashRange = QPair<typename QMultiHash<Key, Value>::iterator,
204
205 static QQmlJSScope::Ptr create() { return QSharedPointer<QQmlJSScope>(new QQmlJSScope); }
207 static QQmlJSScope::Ptr clone(const QQmlJSScope::ConstPtr &origin);
208
209 static QQmlJSScope::ConstPtr findCurrentQMLScope(const QQmlJSScope::ConstPtr &scope);
210
211 QQmlJSScope::Ptr parentScope();
212 QQmlJSScope::ConstPtr parentScope() const;
213 static void reparent(const QQmlJSScope::Ptr &parentScope, const QQmlJSScope::Ptr &childScope);
214
215 void insertJSIdentifier(const QString &name, const JavaScriptIdentifier &identifier);
216 QHash<QString, JavaScriptIdentifier> ownJSIdentifiers() const;
217 void insertPropertyIdentifier(const QQmlJSMetaProperty &prop);
218
219 ScopeType scopeType() const { return m_scopeType; }
220 void setScopeType(ScopeType type) { m_scopeType = type; }
221
222 void addOwnMethod(const QQmlJSMetaMethod &method) { m_methods.insert(method.methodName(), method); }
223 QMultiHashRange<QString, QQmlJSMetaMethod> mutableOwnMethodsRange(const QString &name)
224 {
225 return m_methods.equal_range(name);
226 }
227 QMultiHash<QString, QQmlJSMetaMethod> ownMethods() const { return m_methods; }
228 QList<QQmlJSMetaMethod> ownMethods(const QString &name) const { return m_methods.values(name); }
229 bool hasOwnMethod(const QString &name) const { return m_methods.contains(name); }
230
231 bool hasMethod(const QString &name) const;
232 QHash<QString, QQmlJSMetaMethod> methods() const;
233 QList<QQmlJSMetaMethod> methods(const QString &name) const;
234 QList<QQmlJSMetaMethod> methods(const QString &name, QQmlJSMetaMethodType type) const;
235
236 void addOwnEnumeration(const QQmlJSMetaEnum &enumeration) { m_enumerations.insert(enumeration.name(), enumeration); }
237 QHash<QString, QQmlJSMetaEnum> ownEnumerations() const { return m_enumerations; }
238 QQmlJSMetaEnum ownEnumeration(const QString &name) const { return m_enumerations.value(name); }
239 bool hasOwnEnumeration(const QString &name) const { return m_enumerations.contains(name); }
240
241 bool hasEnumeration(const QString &name) const;
242 bool hasEnumerationKey(const QString &name) const;
243 bool hasOwnEnumerationKey(const QString &name) const;
244 QQmlJSMetaEnum enumeration(const QString &name) const;
245 QHash<QString, QQmlJSMetaEnum> enumerations() const;
246
247 void setAnnotations(const QList<QQmlJSAnnotation> &annotation) { m_annotations = std::move(annotation); }
248 const QList<QQmlJSAnnotation> &annotations() const { return m_annotations; }
249
250 QString filePath() const { return m_filePath; }
251 void setFilePath(const QString &file) { m_filePath = file; }
252
253 // The name the type uses to refer to itself. Either C++ class name or base name of
254 // QML file. isComposite tells us if this is a C++ or a QML name.
255 QString internalName() const { return m_internalName; }
256 void setInternalName(const QString &internalName) { m_internalName = internalName; }
257 QString augmentedInternalName() const;
258
259 // This returns a more user readable version of internalName / baseTypeName
260 static QString prettyName(QAnyStringView name);
261
262 bool isComponentRootElement() const;
263
264 void setAliases(const QStringList &aliases) { m_aliases = aliases; }
265 QStringList aliases() const { return m_aliases; }
266
267 void setInterfaceNames(const QStringList& interfaces) { m_interfaceNames = interfaces; }
268 QStringList interfaceNames() const { return m_interfaceNames; }
269
270 bool hasInterface(const QString &name) const;
271 bool hasOwnInterface(const QString &name) const { return m_interfaceNames.contains(name); }
272
273 void setOwnDeferredNames(const QStringList &names) { m_ownDeferredNames = names; }
274 QStringList ownDeferredNames() const { return m_ownDeferredNames; }
275 void setOwnImmediateNames(const QStringList &names) { m_ownImmediateNames = names; }
276 QStringList ownImmediateNames() const { return m_ownImmediateNames; }
277
278 bool isNameDeferred(const QString &name) const;
279
280 // If isComposite(), this is the QML/JS name of the prototype. Otherwise it's the
281 // relevant base class (in the hierarchy starting from QObject) of a C++ type.
282 void setBaseTypeName(const QString &baseTypeName);
283 QString baseTypeName() const;
284
285 QQmlJSScope::ConstPtr baseType() const { return m_baseType.scope; }
286 QTypeRevision baseTypeRevision() const { return m_baseType.revision; }
287
288 QString moduleName() const;
289 QString ownModuleName() const { return m_moduleName; }
290 void setOwnModuleName(const QString &moduleName) { m_moduleName = moduleName; }
291
292 void clearBaseType() { m_baseType = {}; }
293 void setBaseTypeError(const QString &baseTypeError);
294 QString baseTypeError() const;
295
296 void addOwnProperty(const QQmlJSMetaProperty &prop) { m_properties.insert(prop.propertyName(), prop); }
297 QHash<QString, QQmlJSMetaProperty> ownProperties() const { return m_properties; }
298 QQmlJSMetaProperty ownProperty(const QString &name) const { return m_properties.value(name); }
299 bool hasOwnProperty(const QString &name) const { return m_properties.contains(name); }
300
301 bool hasProperty(const QString &name) const;
303 QHash<QString, QQmlJSMetaProperty> properties() const;
304
305 void setPropertyLocallyRequired(const QString &name, bool isRequired);
306 bool isPropertyRequired(const QString &name) const;
307 bool isPropertyLocallyRequired(const QString &name) const;
308
309 void addOwnPropertyBinding(
310 const QQmlJSMetaPropertyBinding &binding,
311 BindingTargetSpecifier specifier = BindingTargetSpecifier::SimplePropertyTarget);
312 QMultiHash<QString, QQmlJSMetaPropertyBinding> ownPropertyBindings() const;
313 QPair<QMultiHash<QString, QQmlJSMetaPropertyBinding>::const_iterator,
315 ownPropertyBindings(const QString &name) const;
316 QList<QQmlJSMetaPropertyBinding> ownPropertyBindingsInQmlIROrder() const;
317 bool hasOwnPropertyBindings(const QString &name) const;
318
319 bool hasPropertyBindings(const QString &name) const;
320 QList<QQmlJSMetaPropertyBinding> propertyBindings(const QString &name) const;
321
322 struct AnnotatedScope; // defined later
323 static AnnotatedScope ownerOfProperty(const QQmlJSScope::ConstPtr &self, const QString &name);
324
325 bool isResolved() const;
326 bool isFullyResolved() const;
327
328 QString ownDefaultPropertyName() const { return m_defaultPropertyName; }
329 void setOwnDefaultPropertyName(const QString &name) { m_defaultPropertyName = name; }
330 QString defaultPropertyName() const;
331
332 QString ownParentPropertyName() const { return m_parentPropertyName; }
333 void setOwnParentPropertyName(const QString &name) { m_parentPropertyName = name; }
334 QString parentPropertyName() const;
335
336 QString ownAttachedTypeName() const { return m_attachedTypeName; }
337 void setOwnAttachedTypeName(const QString &name) { m_attachedTypeName = name; }
338 QQmlJSScope::ConstPtr ownAttachedType() const { return m_attachedType; }
339
340 QString attachedTypeName() const;
341 QQmlJSScope::ConstPtr attachedType() const;
342
343 QString extensionTypeName() const { return m_extensionTypeName; }
344 void setExtensionTypeName(const QString &name) { m_extensionTypeName = name; }
352 {
354 ExtensionKind extensionSpecifier = NotExtension;
355 };
356 AnnotatedScope extensionType() const;
357
358 QString valueTypeName() const { return m_valueTypeName; }
359 void setValueTypeName(const QString &name) { m_valueTypeName = name; }
360 QQmlJSScope::ConstPtr valueType() const { return m_valueType; }
361 QQmlJSScope::ConstPtr listType() const { return m_listType; }
362 QQmlJSScope::Ptr listType() { return m_listType; }
363
364 void addOwnRuntimeFunctionIndex(QQmlJSMetaMethod::AbsoluteFunctionIndex index);
366 ownRuntimeFunctionIndex(QQmlJSMetaMethod::RelativeFunctionIndex index) const;
367
368
374 bool isComposite() const { return m_flags & Composite; }
375 bool isScript() const { return m_flags & Script; }
376 bool hasCustomParser() const { return m_flags & CustomParser; }
377 bool isArrayScope() const { return m_flags & Array; }
378 bool isInlineComponent() const { return m_flags & InlineComponent; }
379 bool isWrappedInImplicitComponent() const { return m_flags & WrappedInImplicitComponent; }
380 bool extensionIsJavaScript() const { return m_flags & ExtensionIsJavaScript; }
381 bool extensionIsNamespace() const { return m_flags & ExtensionIsNamespace; }
382 bool isListProperty() const { return m_flags.testFlag(IsListProperty); }
383 void setIsListProperty(bool v) { m_flags.setFlag(IsListProperty, v); }
384 bool isSingleton() const { return m_flags & Singleton; }
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; }
389
390 void setIsSingleton(bool v) { m_flags.setFlag(Singleton, v); }
391 void setCreatableFlag(bool v) { m_flags.setFlag(Creatable, v); }
392 void setStructuredFlag(bool v) { m_flags.setFlag(Structured, v); }
393 void setIsComposite(bool v) { m_flags.setFlag(Composite, v); }
394 void setIsScript(bool v) { m_flags.setFlag(Script, v); }
395 void setHasCustomParser(bool v);
396 void setIsArrayScope(bool v) { m_flags.setFlag(Array, v); }
397 void setIsInlineComponent(bool v) { m_flags.setFlag(InlineComponent, v); }
398 void setIsWrappedInImplicitComponent(bool v) { m_flags.setFlag(WrappedInImplicitComponent, v); }
399 void setExtensionIsJavaScript(bool v) { m_flags.setFlag(ExtensionIsJavaScript, v); }
400 void setExtensionIsNamespace(bool v) { m_flags.setFlag(ExtensionIsNamespace, v); }
401
402
403 void setAccessSemantics(AccessSemantics semantics) { m_semantics = semantics; }
404 AccessSemantics accessSemantics() const { return m_semantics; }
405
406 std::optional<JavaScriptIdentifier> jsIdentifier(const QString &id) const;
407 std::optional<JavaScriptIdentifier> ownJSIdentifier(const QString &id) const;
408
409 QQmlJS::ConstPtrWrapperIterator childScopesBegin() const { return m_childScopes.constBegin(); }
410 QQmlJS::ConstPtrWrapperIterator childScopesEnd() const { return m_childScopes.constEnd(); }
411
412 void setInlineComponentName(const QString &inlineComponentName);
413 std::optional<QString> inlineComponentName() const;
414 InlineComponentOrDocumentRootName enclosingInlineComponentName() const;
415
416 QVector<QQmlJSScope::Ptr> childScopes();
417
418 QVector<QQmlJSScope::ConstPtr> childScopes() const;
419
420 static QTypeRevision resolveTypes(
421 const Ptr &self, const QQmlJS::ContextualTypes &contextualTypes,
422 QSet<QString> *usedTypes = nullptr);
423 static void resolveNonEnumTypes(
424 const QQmlJSScope::Ptr &self, const QQmlJS::ContextualTypes &contextualTypes,
425 QSet<QString> *usedTypes = nullptr);
426 static void resolveEnums(
427 const QQmlJSScope::Ptr &self, const QQmlJS::ContextualTypes &contextualTypes,
428 QSet<QString> *usedTypes = nullptr);
429 static void resolveList(
430 const QQmlJSScope::Ptr &self, const QQmlJSScope::ConstPtr &arrayType);
431 static void resolveGeneralizedGroup(
432 const QQmlJSScope::Ptr &self, const QQmlJSScope::ConstPtr &baseType,
433 const QQmlJS::ContextualTypes &contextualTypes,
434 QSet<QString> *usedTypes = nullptr);
435
436 void setSourceLocation(const QQmlJS::SourceLocation &sourceLocation);
437 QQmlJS::SourceLocation sourceLocation() const;
438
439 static QQmlJSScope::ConstPtr nonCompositeBaseType(const QQmlJSScope::ConstPtr &type);
440
441 static QTypeRevision
442 nonCompositeBaseRevision(const ImportedScope<QQmlJSScope::ConstPtr> &scope);
443
444 bool isSameType(const QQmlJSScope::ConstPtr &otherScope) const;
445 bool inherits(const QQmlJSScope::ConstPtr &base) const;
446 bool canAssign(const QQmlJSScope::ConstPtr &derived) const;
447
448 bool isInCustomParserParent() const;
449
450
451 static ImportedScope<QQmlJSScope::ConstPtr> findType(const QString &name,
452 const QQmlJS::ContextualTypes &contextualTypes,
453 QSet<QString> *usedTypes = nullptr);
454
455 static QQmlSA::Element createQQmlSAElement(const ConstPtr &);
456 static QQmlSA::Element createQQmlSAElement(ConstPtr &&);
457 static const QQmlJSScope::ConstPtr &scope(const QQmlSA::Element &);
458 static constexpr qsizetype sizeofQQmlSAElement() { return QQmlSA::Element::sizeofElement; }
459
460private:
466 template <typename T>
467 friend class QTypeInfo; // so that we can Q_DECLARE_TYPEINFO QmlIRCompatibilityBindingData
468 struct QmlIRCompatibilityBindingData
469 {
470 QmlIRCompatibilityBindingData() = default;
471 QmlIRCompatibilityBindingData(const QString &name, quint32 offset)
472 : propertyName(name), sourceLocationOffset(offset)
473 {
474 }
475 QString propertyName; // bound property name
476 quint32 sourceLocationOffset = 0; // binding's source location offset
477 };
478
479 QQmlJSScope() = default;
480 QQmlJSScope(const QQmlJSScope &) = default;
481 QQmlJSScope &operator=(const QQmlJSScope &) = default;
482 static QTypeRevision resolveType(
483 const QQmlJSScope::Ptr &self, const QQmlJS::ContextualTypes &contextualTypes,
484 QSet<QString> *usedTypes);
485 static void updateChildScope(
486 const QQmlJSScope::Ptr &childScope, const QQmlJSScope::Ptr &self,
487 const QQmlJS::ContextualTypes &contextualTypes, QSet<QString> *usedTypes);
488
489 void addOwnPropertyBindingInQmlIROrder(const QQmlJSMetaPropertyBinding &binding,
490 BindingTargetSpecifier specifier);
491 bool hasCreatableFlag() const { return m_flags & Creatable; }
492 bool hasStructuredFlag() const { return m_flags & Structured; }
493
494 QHash<QString, JavaScriptIdentifier> m_jsIdentifiers;
495
496 QMultiHash<QString, QQmlJSMetaMethod> m_methods;
497 QHash<QString, QQmlJSMetaProperty> m_properties;
498 QMultiHash<QString, QQmlJSMetaPropertyBinding> m_propertyBindings;
499
500 // a special QmlIR compatibility bindings array, ordered the same way as
501 // bindings in QmlIR::Object
502 QList<QmlIRCompatibilityBindingData> m_propertyBindingsArray;
503
504 // same as QmlIR::Object::runtimeFunctionIndices
505 QList<QQmlJSMetaMethod::AbsoluteFunctionIndex> m_runtimeFunctionIndices;
506
507 QHash<QString, QQmlJSMetaEnum> m_enumerations;
508
509 QVector<QQmlJSAnnotation> m_annotations;
510 QVector<QQmlJSScope::Ptr> m_childScopes;
511 QQmlJSScope::WeakPtr m_parentScope;
512
513 QString m_filePath;
514 QString m_internalName;
515 QString m_baseTypeNameOrError;
516
517 // We only need the revision for the base type as inheritance is
518 // the only relation between two types where the revisions matter.
519 ImportedScope<QQmlJSScope::WeakConstPtr> m_baseType;
520
521 ScopeType m_scopeType = ScopeType::QMLScope;
522 QStringList m_aliases;
523 QStringList m_interfaceNames;
524 QStringList m_ownDeferredNames;
525 QStringList m_ownImmediateNames;
526
527 QString m_defaultPropertyName;
528 QString m_parentPropertyName;
533 QString m_attachedTypeName;
534 QStringList m_requiredPropertyNames;
535 QQmlJSScope::WeakConstPtr m_attachedType;
536
541 QString m_valueTypeName;
542 QQmlJSScope::WeakConstPtr m_valueType;
543 QQmlJSScope::Ptr m_listType;
544
552 QString m_extensionTypeName;
553 QQmlJSScope::WeakConstPtr m_extensionType;
554
555 Flags m_flags = Creatable; // all types are marked as creatable by default.
556 AccessSemantics m_semantics = AccessSemantics::Reference;
557
558 QQmlJS::SourceLocation m_sourceLocation;
559
560 QString m_moduleName;
561
562 std::optional<QString> m_inlineComponentName;
563};
564
566{
567 return m_parentScope.toStrongRef();
568}
569
571{
573#if defined(Q_CC_GNU_ONLY) && Q_CC_GNU < 1400 && Q_CC_GNU >= 1200
574 QT_WARNING_DISABLE_GCC("-Wuse-after-free")
575#endif
576 return QQmlJSScope::WeakConstPtr(m_parentScope).toStrongRef();
578}
579
580inline QMultiHash<QString, QQmlJSMetaPropertyBinding> QQmlJSScope::ownPropertyBindings() const
581{
582 return m_propertyBindings;
583}
584
585inline QPair<QMultiHash<QString, QQmlJSMetaPropertyBinding>::const_iterator, QMultiHash<QString, QQmlJSMetaPropertyBinding>::const_iterator> QQmlJSScope::ownPropertyBindings(const QString &name) const
586{
587 return m_propertyBindings.equal_range(name);
588}
589
591{
592 return m_propertyBindings.contains(name);
593}
594
596{
597 const int i = static_cast<int>(index);
598 Q_ASSERT(i >= 0);
599 Q_ASSERT(i < int(m_runtimeFunctionIndices.size()));
600 return m_runtimeFunctionIndices[i];
601}
602
604{
605 m_flags.setFlag(CustomParser, v);;
606}
607
608inline void QQmlJSScope::setInlineComponentName(const QString &inlineComponentName)
609{
611 m_inlineComponentName = inlineComponentName;
612}
613
614inline QVector<QQmlJSScope::Ptr> QQmlJSScope::childScopes()
615{
616 return m_childScopes;
617}
618
620{
621 m_sourceLocation = sourceLocation;
622}
623
625{
626 return m_sourceLocation;
627}
628
630{
631 for (QQmlJSScope::ConstPtr base = type; base; base = base->baseType()) {
632 if (!base->isComposite())
633 return base;
634 }
635 return {};
636}
637
638Q_DECLARE_TYPEINFO(QQmlJSScope::QmlIRCompatibilityBindingData, Q_RELOCATABLE_TYPE);
639
640template<>
641class Q_QMLCOMPILER_EXPORT QDeferredFactory<QQmlJSScope>
642{
643public:
644 QDeferredFactory() = default;
645
646 QDeferredFactory(QQmlJSImporter *importer, const QString &filePath) :
647 m_filePath(filePath), m_importer(importer)
648 {}
649
650 bool isValid() const
651 {
652 return !m_filePath.isEmpty() && m_importer != nullptr;
653 }
654
656 {
657 return QFileInfo(m_filePath).baseName();
658 }
659
660 void setIsSingleton(bool isSingleton)
661 {
662 m_isSingleton = isSingleton;
663 }
664
665 void setModuleName(const QString &moduleName) { m_moduleName = moduleName; }
666
667private:
669 friend class QDeferredSharedPointer<const QQmlJSScope>;
670 friend class QDeferredWeakPointer<QQmlJSScope>;
671 friend class QDeferredWeakPointer<const QQmlJSScope>;
672
673 // Should only be called when lazy-loading the type in a deferred pointer.
674 void populate(const QSharedPointer<QQmlJSScope> &scope) const;
675
676 QString m_filePath;
677 QQmlJSImporter *m_importer = nullptr;
678 bool m_isSingleton = false;
679 QString m_moduleName;
680};
681
684
686
687#endif // QQMLJSSCOPE_P_H
static JNINativeMethod methods[]
\inmodule QtCore
QDeferredFactory(QQmlJSImporter *importer, const QString &filePath)
void setIsSingleton(bool isSingleton)
QSharedPointer< T > toStrongRef() const
QString baseName() const
Returns the base name of the file without the path.
qsizetype size() const noexcept
Definition qlist.h:397
\inmodule QtCore
Definition qhash.h:1840
\inmodule QtCore
Definition qhash.h:1788
std::pair< iterator, iterator > equal_range(const Key &key)
Definition qhash.h:2266
bool contains(const Key &key) const noexcept
Definition qhash.h:1658
int value(const QString &key) const
QString name() const
QString propertyName() const
Tracks the types for the QmlCompiler.
void setIsInlineComponent(bool v)
QQmlJSMetaProperty ownProperty(const QString &name) const
bool isComposite() const
void setIsComposite(bool v)
bool isWrappedInImplicitComponent() const
bool hasOwnPropertyBindings(const QString &name) const
void setOwnDeferredNames(const QStringList &names)
bool isScript() const
void clearBaseType()
void setIsScript(bool v)
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 filePath() const
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
bool isSingleton() 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
bool isValueType() 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
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
QString type() const
QTypeRevision version() const
bool isValid() const
QString package() const
Export()=default
\inmodule QtQmlCompiler
Definition qqmlsa.h:193
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
\inmodule QtCore
MethodType
Definition qqmlsa.h:49
AccessSemantics
Definition qqmlsa_p.h:40
Combined button and popup list for selecting options.
#define QT_WARNING_POP
#define QT_WARNING_DISABLE_GCC(text)
#define QT_WARNING_PUSH
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)
Definition qflags.h:174
Flags
GLboolean GLboolean GLboolean b
GLsizei const GLfloat * v
[13]
GLboolean GLboolean GLboolean GLboolean a
[7]
GLuint index
[2]
GLenum type
GLenum GLuint GLintptr offset
GLuint name
GLuint GLuint * names
static QStringList aliases(const QQmlJSScope::ConstPtr &scope)
static QString internalName(const QQmlJSScope::ConstPtr &scope)
@ JavaScriptIdentifier
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
#define Q_FLAGS(x)
@ Q_RELOCATABLE_TYPE
Definition qtypeinfo.h:158
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
Definition qtypeinfo.h:180
unsigned int quint32
Definition qtypes.h:50
ptrdiff_t qsizetype
Definition qtypes.h:165
static const uint base
Definition qurlidna.cpp:20
const char property[13]
Definition qwizard.cpp:101
QFile file
[0]
timer inherits("QTimer")
QExplicitlySharedDataPointer< Derived > derived(base)
view create()
QQmlJSScope::ConstPtr scope
std::optional< QString > typeName
QQmlJS::SourceLocation location
QList< Export > exports