Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qqmljsregistercontent_p.h
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3// Qt-Security score:significant
4
5#ifndef QQMLJSREGISTERCONTENT_P_H
6#define QQMLJSREGISTERCONTENT_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17
18#include "qqmljsscope_p.h"
19#include <QtCore/qhash.h>
20#include <QtCore/qstring.h>
21
23
25class Q_QMLCOMPILER_EXPORT QQmlJSRegisterContent
26{
27public:
28 // ContentVariant determines the relation between this register content and its scope().
29 // For example, a property is always a property of a type. That type is given as scope.
30 // Most content variants can carry either a specific kind of content, as commented below,
31 // or a conversion. If two or more register contents of the same content variant are merged,
32 // they retain their content variant but become a conversion with the original register
33 // contents linked as conversion origins.
34
35 enum ContentVariant {
36 ObjectById, // type (scope is QML scope of binding/function)
37 TypeByName, // type (TODO: scope is not guaranteed to be useful)
38 Singleton, // type (scope is either import namespace or QML scope)
39 Script, // type (scope is either import namespace or QML scope)
40 MetaType, // type (always QMetaObject, scope is the type reprented by the metaobject)
41 Extension, // type (scope is the type being extended)
42 ScopeObject, // type (either QML scope of binding/function or JS global object)
43 ParentScope, // type (scope is the child scope)
44
45 Property, // property (scope is the owner (hasOwnProperty) of the property)
46 Method, // method (retrieved as property, including overloads), like property
47 Enum, // enumeration (scope is the type the enumeration belongs to)
48
49 Attachment, // type (scope is attacher; use attacher() and attachee() for clarity)
50 ModulePrefix, // import namespace (scope is either QML scope or type the prefix is used on)
51
52 MethodCall, // method call (resolved to specific overload), like property
53
54 ListValue, // property (scope is list retrieved from)
55 ListIterator, // property (scope is list being iterated)
56
57 Literal, // type (scope does not exist)
58 Operation, // type (scope does not exist)
59
60 BaseType, // type (scope is derived type)
61 Cast, // type (scope is type casted from)
62
63 Storage, // type (scope does not exist)
64
65 // Either a synthetic type or a merger of multiple different variants.
66 // In the latter case, look at conversion origins to find out more.
67 // Synthetic types should be short lived.
68 Unknown,
69 };
70
71 enum { InvalidLookupIndex = -1 };
72
73 QQmlJSRegisterContent() = default;
74
75
76 // General properties of the register content, (mostly) independent of kind or variant
77
78 bool isNull() const { return !d; }
79 bool isValid() const;
80
81 bool isList() const;
82 bool isWritable() const;
83
84 ContentVariant variant() const;
85
86 QString descriptiveName() const;
87 QString containedTypeName() const;
88
89 int resultLookupIndex() const;
90
91 QQmlJSScope::ConstPtr storedType() const;
92 QQmlJSScope::ConstPtr containedType() const;
93 QQmlJSScope::ConstPtr scopeType() const;
94
95 bool contains(const QQmlJSScope::ConstPtr &type) const { return type == containedType(); }
96 bool isStoredIn(const QQmlJSScope::ConstPtr &type) const { return type == storedType(); }
97
98
99 // Properties of specific kinds of register contents
100
101 bool isType() const;
102 QQmlJSScope::ConstPtr type() const;
103
104 bool isProperty() const;
105 QQmlJSMetaProperty property() const;
106 int baseLookupIndex() const;
107
108 bool isEnumeration() const;
109 QQmlJSMetaEnum enumeration() const;
110 QString enumMember() const;
111
112 bool isMethod() const;
113 QList<QQmlJSMetaMethod> method() const;
114 QQmlJSScope::ConstPtr methodType() const;
115
116 bool isImportNamespace() const;
117 uint importNamespace() const;
118 QQmlJSScope::ConstPtr importNamespaceType() const;
119
120 bool isConversion() const;
121 QQmlJSScope::ConstPtr conversionResultType() const;
122 QQmlJSRegisterContent conversionResultScope() const;
123 QList<QQmlJSRegisterContent> conversionOrigins() const;
124
125 bool isMethodCall() const;
126 QQmlJSMetaMethod methodCall() const;
127 bool isJavaScriptReturnValue() const;
128
129
130 // Linked register contents
131
132 QQmlJSRegisterContent attacher() const;
133 QQmlJSRegisterContent attachee() const;
134
135 QQmlJSRegisterContent scope() const;
136 QQmlJSRegisterContent storage() const;
137 QQmlJSRegisterContent original() const;
138 QQmlJSRegisterContent shadowed() const;
139
140 quintptr id() const { return quintptr(d); }
141
142private:
143 friend class QQmlJSRegisterContentPool;
144 // TODO: Constant string/number/bool/enumval
145
146 QQmlJSRegisterContent(QQmlJSRegisterContentPrivate *dd) : d(dd) {};
147
148 friend bool operator==(QQmlJSRegisterContent a, QQmlJSRegisterContent b)
149 {
150 return a.d == b.d;
151 }
152
153 friend bool operator!=(QQmlJSRegisterContent a, QQmlJSRegisterContent b)
154 {
155 return !(a == b);
156 }
157
158 friend size_t qHash(QQmlJSRegisterContent registerContent, size_t seed = 0)
159 {
160 return qHash(registerContent.d, seed);
161 }
162
163 QQmlJSRegisterContentPrivate *d = nullptr;
164};
165
166class Q_QMLCOMPILER_EXPORT QQmlJSRegisterContentPool
167{
168 Q_DISABLE_COPY_MOVE(QQmlJSRegisterContentPool)
169public:
170 using ContentVariant = QQmlJSRegisterContent::ContentVariant;
171
173 ~QQmlJSRegisterContentPool();
174
175
176 // Create new register contents of specific kinds
177
179 const QQmlJSScope::ConstPtr &type, int resultLookupIndex, ContentVariant variant,
180 QQmlJSRegisterContent scope = {});
181
183 const QQmlJSMetaProperty &property, int baseLookupIndex, int resultLookupIndex,
184 ContentVariant variant, QQmlJSRegisterContent scope);
185
187 const QQmlJSMetaEnum &enumeration, const QString &enumMember, ContentVariant variant,
188 QQmlJSRegisterContent scope);
189
191 const QList<QQmlJSMetaMethod> &methods, const QQmlJSScope::ConstPtr &methodType,
192 ContentVariant variant, QQmlJSRegisterContent scope);
193
195 const QQmlJSMetaMethod &method, const QQmlJSScope::ConstPtr &returnType,
196 QQmlJSRegisterContent scope);
197
199 uint importNamespaceStringId, const QQmlJSScope::ConstPtr &importNamespaceType,
200 ContentVariant variant, QQmlJSRegisterContent scope);
201
203 const QList<QQmlJSRegisterContent> &origins, const QQmlJSScope::ConstPtr &conversion,
204 QQmlJSRegisterContent conversionScope, ContentVariant variant,
205 QQmlJSRegisterContent scope);
206
207
208 // Clone and possibly adapt register contents. This leaves the original intact.
209
211 QQmlJSRegisterContent content, const QQmlJSScope::ConstPtr &newStoredType);
212
214 QQmlJSRegisterContent content, const QQmlJSScope::ConstPtr &newContainedType);
215
216 QQmlJSRegisterContent clone(QQmlJSRegisterContent from) { return clone(from.d); }
217
218
219 // Change the internals of the given register content. Adjusting and generalizing store a
220 // copy of the previous content as original() and shadowed(), respectively. Storing creates
221 // a new register content for storage(). All of those assume you only do this once per
222 // register content (although you can adjust and generalize the storage, for example).
223
224 void storeType(
225 QQmlJSRegisterContent content, const QQmlJSScope::ConstPtr &stored);
226 void adjustType(
227 QQmlJSRegisterContent content, const QQmlJSScope::ConstPtr &adjusted);
228 void generalizeType(
229 QQmlJSRegisterContent content, const QQmlJSScope::ConstPtr &generalized);
230
233 void clearTemporaries();
234
235private:
236 struct Deleter {
237 // It's a template so that we only need the QQmlJSRegisterContentPrivate dtor on usage.
238 template<typename Private>
239 constexpr void operator()(Private *d) const { delete d; }
240 };
241
242 using Pool = std::vector<std::unique_ptr<QQmlJSRegisterContentPrivate, Deleter>>;
243
245 QQmlJSRegisterContentPrivate *create() { return clone(nullptr); }
246 QQmlJSRegisterContentPrivate *create(QQmlJSRegisterContent scope, ContentVariant variant);
247
248 Pool m_pool;
249 qsizetype m_checkpoint = -1;
250};
251
252QT_END_NAMESPACE
253
254#endif // REGISTERCONTENT_H
friend bool operator==(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
Returns true if lhs and rhs are equal, otherwise returns false.
Definition qbytearray.h:801
friend bool operator!=(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
Returns true if lhs and rhs are different, otherwise returns false.
Definition qbytearray.h:812
QString fileName() const
If the currently assigned device is a QFile, or if setFileName() has been called, this function retur...
void setFileName(const QString &fileName)
Sets the file name of QImageReader to fileName.
virtual Type type() const =0
Reimplement this function to return the paint engine \l{Type}.
virtual bool isValid() const
virtual QString location() const
QString typeName() const
void setIsFlag(bool isFlag)
void setLineNumber(int lineNumber)
friend bool operator!=(const QQmlJSMetaEnum &a, const QQmlJSMetaEnum &b)
void setName(const QString &name)
QQmlJSMetaEnum()=default
int lineNumber() const
friend size_t qHash(const QQmlJSMetaEnum &e, size_t seed=0)
friend bool operator==(const QQmlJSMetaEnum &a, const QQmlJSMetaEnum &b)
void setTypeName(const QString &typeName)
bool hasKey(const QString &key) const
void setIsScoped(bool v)
void setType(const QSharedPointer< const QQmlJSScope > &type)
QSharedPointer< const QQmlJSScope > type() const
int value(const QString &key) const
bool isQml() const
void setIsQml(bool v)
void addValue(int value)
bool isScoped() const
QList< int > values() const
bool isFlag() const
QString alias() const
QStringList keys() const
bool isValid() const
void addKey(const QString &key)
void setAlias(const QString &alias)
QString name() const
QQmlJSMetaEnum(QString name)
bool hasValues() const
QQmlJSMetaReturnType returnValue() const
QQmlJSMetaMethod()=default
void setReturnType(QWeakPointer< const QQmlJSScope > type)
void setSourceLocation(QQmlJS::SourceLocation location)
QQmlJS::SourceLocation sourceLocation() const
QString methodName() const
QQmlJSMetaMethodType MethodType
void setMethodName(const QString &name)
void setReturnTypeName(const QString &typeName)
QString returnTypeName() const
QQmlJSMetaMethod(QString name, QString returnType=QString())
QList< QQmlJSMetaParameter > parameters() const
void setReturnValue(const QQmlJSMetaReturnType returnValue)
QSharedPointer< const QQmlJSScope > returnType() const
void setIsPointer(bool isPointer)
void setType(QWeakPointer< const QQmlJSScope > type)
void setIsList(bool isList)
friend bool operator!=(const QQmlJSMetaParameter &a, const QQmlJSMetaParameter &b)
friend size_t qHash(const QQmlJSMetaParameter &e, size_t seed=0)
void setName(const QString &name)
void setTypeName(const QString &typeName)
void setTypeQualifier(Constness typeQualifier)
Constness typeQualifier() const
QString typeName() const
QQmlJSMetaParameter(QString name=QString(), QString typeName=QString(), Constness typeQualifier=NonConst, QWeakPointer< const QQmlJSScope > type={})
friend bool operator==(const QQmlJSMetaParameter &a, const QQmlJSMetaParameter &b)
QSharedPointer< const QQmlJSScope > type() const
friend bool operator!=(const QQmlJSMetaProperty &a, const QQmlJSMetaProperty &b)
QString notify() const
QSharedPointer< const QQmlJSScope > aliasTargetScope() const
QString aliasExpression() const
friend bool operator==(const QQmlJSMetaProperty &a, const QQmlJSMetaProperty &b)
void setPropertyName(const QString &propertyName)
QString aliasTargetName() const
void setAnnotations(const QList< QQmlJSAnnotation > &annotation)
void setIsList(bool isList)
QString bindable() const
QSharedPointer< const QQmlJSScope > type() const
void setPrivateClass(const QString &privateClass)
void setRead(const QString &read)
friend size_t qHash(const QQmlJSMetaProperty &prop, size_t seed=0)
void setBindable(const QString &bindable)
void setWrite(const QString &write)
void setIsPropertyConstant(bool isPropertyConstant)
QString reset() const
void setRevision(int revision)
void setIsFinal(bool isFinal)
QString typeName() const
void setAliasTargetScope(const QSharedPointer< const QQmlJSScope > &scope)
void setSourceLocation(const QQmlJS::SourceLocation &newSourceLocation)
QString write() const
void setIsTypeConstant(bool isTypeConstant)
const QList< QQmlJSAnnotation > & annotations() const
QQmlJS::SourceLocation sourceLocation() const
void setTypeName(const QString &typeName)
QQmlJSMetaProperty()=default
void setReset(const QString &reset)
QString privateClass() const
void setIsWritable(bool isWritable)
void setAliasExpression(const QString &aliasString)
void setAliasTargetName(const QString &name)
void setIndex(int index)
void setNotify(const QString &notify)
bool isPropertyConstant() const
bool isTypeConstant() const
void setType(const QSharedPointer< const QQmlJSScope > &type)
QString propertyName() const
void setIsPointer(bool isPointer)
QQmlJSRegisterContent createMethod(const QList< QQmlJSMetaMethod > &methods, const QQmlJSScope::ConstPtr &methodType, ContentVariant variant, QQmlJSRegisterContent scope)
QQmlJSRegisterContent createImportNamespace(uint importNamespaceStringId, const QQmlJSScope::ConstPtr &importNamespaceType, ContentVariant variant, QQmlJSRegisterContent scope)
QQmlJSRegisterContent createProperty(const QQmlJSMetaProperty &property, int baseLookupIndex, int resultLookupIndex, ContentVariant variant, QQmlJSRegisterContent scope)
void adjustType(QQmlJSRegisterContent content, const QQmlJSScope::ConstPtr &adjusted)
void generalizeType(QQmlJSRegisterContent content, const QQmlJSScope::ConstPtr &generalized)
void storeType(QQmlJSRegisterContent content, const QQmlJSScope::ConstPtr &stored)
QQmlJSRegisterContent castTo(QQmlJSRegisterContent content, const QQmlJSScope::ConstPtr &newContainedType)
QQmlJSRegisterContent createEnumeration(const QQmlJSMetaEnum &enumeration, const QString &enumMember, ContentVariant variant, QQmlJSRegisterContent scope)
void setAllocationMode(AllocationMode mode)
QQmlJSRegisterContent storedIn(QQmlJSRegisterContent content, const QQmlJSScope::ConstPtr &newStoredType)
QQmlJSRegisterContent clone(QQmlJSRegisterContent from)
QQmlJSRegisterContent createType(const QQmlJSScope::ConstPtr &type, int resultLookupIndex, ContentVariant variant, QQmlJSRegisterContent scope={})
QQmlJSRegisterContent createConversion(const QList< QQmlJSRegisterContent > &origins, const QQmlJSScope::ConstPtr &conversion, QQmlJSRegisterContent conversionScope, ContentVariant variant, QQmlJSRegisterContent scope)
QQmlJSRegisterContent createMethodCall(const QQmlJSMetaMethod &method, const QQmlJSScope::ConstPtr &returnType, QQmlJSRegisterContent scope)
virtual QQmlSourceLocation sourceLocation() const
\inmodule QtQmlCompiler
Definition qqmlsa.h:52
Element attachedType() const
Returns the attached type if the content type of this binding is AttachedProperty,...
Definition qqmlsa.cpp:384
BindingType bindingType() const
Returns the type of this binding.
Definition qqmlsa.cpp:350
Element bindingScope() const
Returns the Element scope in which the binding is defined.
Definition qqmlsa.cpp:342
friend bool operator!=(const Binding &lhs, const Binding &rhs)
Returns true if lhs and rhs are not equal, and false otherwise.
Definition qqmlsa.h:106
bool hasUndefinedScriptValue() const
Returns whether this binding has script value type undefined like when it is assigned undefined.
Definition qqmlsa.cpp:451
Binding(const Binding &)
Creates a copy of other.
Definition qqmlsa.cpp:254
Binding & operator=(const Binding &)
Assigns other to this Binding instance.
Definition qqmlsa.cpp:266
bool isAttached() const
Returns true if this type is attached to another one, false otherwise.
Definition qqmlsa.cpp:375
bool hasObject() const
Returns true if this binding has an objects, otherwise returns false.
Definition qqmlsa.cpp:432
friend bool operator==(const Binding &lhs, const Binding &rhs)
Returns true if lhs and rhs are equal, and false otherwise.
Definition qqmlsa.h:102
static bool isLiteralBinding(BindingType)
Returns true if bindingType is a literal type, and false otherwise.
Definition qqmlsa.cpp:475
QString propertyName() const
Returns the name of the property bound with this binding.
Definition qqmlsa.cpp:367
Binding()
Constructs a new Binding object.
Definition qqmlsa.cpp:247
QString stringValue() const
Returns the associated string literal if the content type of this binding is StringLiteral,...
Definition qqmlsa.cpp:359
Element objectType() const
Returns the type of the associated object if the content type of this binding is Object,...
Definition qqmlsa.cpp:441
Binding & operator=(Binding &&) noexcept
Move-assigns other to this Binding instance.
Definition qqmlsa.cpp:282
QQmlSA::SourceLocation sourceLocation() const
Returns the location in the QML code where this binding is defined.
Definition qqmlsa.cpp:405
ScriptBindingKind scriptKind() const
Returns the kind of the associated script if the content type of this binding is Script,...
Definition qqmlsa.cpp:424
double numberValue() const
Returns the associated number if the content type of this binding is NumberLiteral,...
Definition qqmlsa.cpp:415
Element groupType() const
Returns the type of the property of this binding if it is a group property, otherwise returns an inva...
Definition qqmlsa.cpp:334
bool hasFunctionScriptValue() const
Returns whether this binding has script value type function like when it is assigned a (lambda) metho...
Definition qqmlsa.cpp:464
\inmodule QtQmlCompiler
Definition qqmlsa.h:368
\inmodule QtQmlCompiler
Definition qqmlsa.h:202
\inmodule QtQmlCompiler
Definition qqmlsa.h:397
void setHint(const QString &)
Sets hint as the hint for this fix suggestion.
Definition qqmlsa.cpp:2193
FixSuggestion(const FixSuggestion &)
Creates a copy of other.
Definition qqmlsa.cpp:2107
QString hint() const
Returns the hint for this fix suggestion.
Definition qqmlsa.cpp:2201
QString replacement() const
Returns the fix that will replace the problematic source code.
Definition qqmlsa.cpp:2169
QString fixDescription() const
Returns the description of the fix.
Definition qqmlsa.cpp:2152
bool isAutoApplicable() const
Returns whether this suggested fix can be applied automatically.
Definition qqmlsa.cpp:2218
void setAutoApplicable(bool autoApplicable=true)
Sets autoApplicable to determine whether this suggested fix can be applied automatically.
Definition qqmlsa.cpp:2210
\inmodule QtQmlCompiler
Definition qqmlsa.h:283
void emitWarning(QAnyStringView diagnostic, LoggerWarningId id)
Emits a warning message diagnostic about an issue of type id.
Definition qqmlsa.cpp:1264
Element resolveLiteralType(const Binding &binding)
Returns the element representing the type of literal in binding.
Definition qqmlsa.cpp:1376
void emitWarning(QAnyStringView diagnostic, LoggerWarningId id, QQmlSA::SourceLocation srcLocation, const QQmlSA::FixSuggestion &fix)
Emits a warning message diagnostic about an issue of type id located at srcLocation and with suggeste...
Definition qqmlsa.cpp:1287
void emitWarning(QAnyStringView diagnostic, LoggerWarningId id, QQmlSA::SourceLocation srcLocation)
Emits warning message diagnostic about an issue of type id located at srcLocation.
Definition qqmlsa.cpp:1273
Element resolveBuiltinType(QAnyStringView typeName) const
Returns the type of the built-in type identified by typeName.
Definition qqmlsa.cpp:1348
Element resolveAttached(QAnyStringView moduleName, QAnyStringView typeName)
Returns the attached type of typeName defined in module moduleName.
Definition qqmlsa.cpp:1366
QString resolveElementToId(const Element &element, const Element &context)
Returns the id of element in a given context.
Definition qqmlsa.cpp:1399
Element resolveTypeInFileScope(QAnyStringView typeName)
Returns the type corresponding to typeName inside the currently analysed file.
Definition qqmlsa.cpp:1302
QString sourceCode(QQmlSA::SourceLocation location)
Returns the source code located within location.
Definition qqmlsa.cpp:1411
Element resolveAttachedInFileScope(QAnyStringView typeName)
Returns the attached type corresponding to typeName used inside the currently analysed file.
Definition qqmlsa.cpp:1314
Element resolveIdToElement(QAnyStringView id, const Element &context)
Returns the element in context that has id id.
Definition qqmlsa.cpp:1387
Element resolveType(QAnyStringView moduleName, QAnyStringView typeName)
Returns the type of typeName defined in module moduleName.
Definition qqmlsa.cpp:1332
\inmodule QtQmlCompiler
Definition qqmlsa.h:340
\inmodule QtQmlCompiler
Definition qqmlsa.h:120
Method & operator=(Method &&) noexcept
Move-assigns other to this Method instance.
Definition qqmlsa.cpp:624
MethodType methodType() const
Returns the type of this method.
Definition qqmlsa.cpp:651
Method(const Method &)
Creates a copy of other.
Definition qqmlsa.cpp:598
Method()
Constructs a new Method object.
Definition qqmlsa.cpp:593
Method & operator=(const Method &)
Assigns other to this Method instance.
Definition qqmlsa.cpp:611
QString methodName() const
Returns the name of the this method.
Definition qqmlsa.cpp:642
\inmodule QtQmlCompiler
Definition qqmlsa.h:314
void analyze(const Element &root)
Runs the element passes over root and all its children.
Definition qqmlsa.cpp:1600
bool isCategoryEnabled(LoggerWarningId category) const
Returns true if warnings of category are enabled, false otherwise.
Definition qqmlsa.cpp:1711
bool registerPropertyPass(std::shared_ptr< PropertyPass > pass, QAnyStringView moduleName, QAnyStringView typeName, QAnyStringView propertyName=QAnyStringView(), bool allowInheritance=true)
Registers a static analysis pass for properties.
Definition qqmlsa.cpp:1503
std::unordered_map< quint32, Binding > bindingsByLocation() const
Returns bindings by their source location.
Definition qqmlsa.cpp:2004
bool hasImportedModule(QAnyStringView name) const
Returns true if the module named module has been imported by the QML to be analyzed,...
Definition qqmlsa.cpp:1703
\inmodule QtQmlCompiler
Definition qqmlsa.h:351
\inmodule QtQmlCompiler
Definition qqmlsa.h:169
Property(const Property &)
Creates a copy of other.
Definition qqmlsa.cpp:774
QString typeName() const
Returns the name of the type of this property.
Definition qqmlsa.cpp:819
bool isReadonly() const
Returns true if this property is read-only, false otherwise.
Definition qqmlsa.cpp:837
\inmodule QtQmlCompiler
MethodType
Definition qqmlsa.h:48
AccessSemantics
Definition qqmlsa.h:49
Q_DECLARE_INTERFACE(QNetworkAccessBackendFactory, QNetworkAccessBackendFactory_iid)
static QString toNumericString(double value)
static QString messageTypeForMethod(const QString &method)
static QString derefContentPointer(const QString &contentPointer)
#define BYTECODE_UNIMPLEMENTED()
#define INJECT_TRACE_INFO(function)
#define REJECT
static QString registerName(int registerIndex, int offset)
static QString minExpression(int argc)
static QString maxExpression(int argc)
static bool isTypeStorable(const QQmlJSTypeResolver *resolver, const QQmlJSScope::ConstPtr &type)
QQmlSA::MethodType QQmlJSMetaMethodType
QQmlJSMetaParameter QQmlJSMetaReturnType
ScriptBindingValueType
@ ScriptValue_Function
@ ScriptValue_Unknown
@ ScriptValue_Undefined
#define QmlLintPluginInterface_iid
Definition qqmlsa.h:440