Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qqmlsa_p.h
Go to the documentation of this file.
1// Copyright (C) 2022 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 QQMLSA_P_H
5#define QQMLSA_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 <private/qqmljslogger_p.h>
20#include <QtCore/qset.h>
21#include "qqmljsmetatypes_p.h"
22
23#include <map>
24#include <unordered_map>
25#include <vector>
26#include <memory>
27
29
33
34namespace QQmlSA {
35
36class Bindings;
37class GenericPassPrivate;
38class PassManager;
39
41
42enum class Flag {
43 Creatable = 0x1,
44 Composite = 0x2,
45 Singleton = 0x4,
46 Script = 0x8,
47 CustomParser = 0x10,
48 Array = 0x20,
49 InlineComponent = 0x40,
51 HasBaseTypeError = 0x100,
53 IsListProperty = 0x400,
54};
55
57{
62};
63
65{
67 std::shared_ptr<QQmlSA::PropertyPass> pass;
68 bool allowInheritance = true;
69};
70
72{
73 friend class QT_PREPEND_NAMESPACE(QQmlJSMetaPropertyBinding);
74 Q_DECLARE_PUBLIC(QQmlSA::Binding::Bindings)
75
76public:
80 ~BindingsPrivate() = default;
81
84
90
91private:
94};
95
97{
98 friend class QT_PREPEND_NAMESPACE(QQmlJSMetaPropertyBinding);
99 Q_DECLARE_PUBLIC(Binding)
100
101public:
102 explicit BindingPrivate(Binding *);
104
106 static QQmlJSMetaPropertyBinding binding(QQmlSA::Binding &binding);
107 static const QQmlJSMetaPropertyBinding binding(const QQmlSA::Binding &binding);
108
109private:
111 Binding *q_ptr;
112};
113
115{
116 friend class QT_PREPEND_NAMESPACE(QQmlJSMetaMethod);
117 Q_DECLARE_PUBLIC(Method)
118
119public:
120 explicit MethodPrivate(Method *);
122
123 QString methodName() const;
124 MethodType methodType() const;
125
126 static QQmlSA::Method createMethod(const QQmlJSMetaMethod &);
127 static QQmlJSMetaMethod method(const QQmlSA::Method &);
128
129private:
130 QQmlJSMetaMethod m_method;
131 Method *q_ptr;
132};
133
135{
136 friend class QT_PREPEND_NAMESPACE(QQmlJSMetaMethod);
137 Q_DECLARE_PUBLIC(QQmlSA::Method::Methods)
138
139public:
143 ~MethodsPrivate() = default;
144
147
149
150private:
153};
154
156{
157 friend class QT_PREPEND_NAMESPACE(QQmlJSMetaProperty);
158 Q_DECLARE_PUBLIC(QQmlSA::Property)
159
160public:
161 explicit PropertyPrivate(Property *);
164 ~PropertyPrivate() = default;
165
166 QString typeName() const;
167 bool isValid() const;
168
170 static QQmlSA::Property createProperty(const QQmlJSMetaProperty &);
171
172private:
173 QQmlJSMetaProperty m_property;
174 QQmlSA::Property *q_ptr;
175};
176
177class Q_QMLCOMPILER_EXPORT PassManagerPrivate
178{
179 friend class QT_PREPEND_NAMESPACE(QQmlJSScope);
180
181 Q_DECLARE_PUBLIC(PassManager)
182
183public:
184 Q_DISABLE_COPY_MOVE(PassManagerPrivate)
185
186 friend class GenericPass;
188 QQmlJSTypeResolver *resolver)
189 : m_visitor(visitor), m_typeResolver(resolver), q_ptr{ manager }
190 {
191 Q_UNUSED(m_typeResolver);
192 }
193 void registerElementPass(std::unique_ptr<ElementPass> pass);
194 bool registerPropertyPass(std::shared_ptr<PropertyPass> pass, QAnyStringView moduleName,
196 QAnyStringView propertyName = QAnyStringView(),
197 bool allowInheritance = true);
198 void analyze(const Element &root);
199
201
202 static QQmlJSImportVisitor *visitor(const QQmlSA::PassManager &);
203 static QQmlJSTypeResolver *resolver(const QQmlSA::PassManager &);
204
205private:
206 friend struct ::QQmlJSTypePropagator;
207
208 QSet<PropertyPass *> findPropertyUsePasses(const QQmlSA::Element &element,
209 const QString &propertyName);
210
211 void analyzeWrite(const QQmlSA::Element &element, QString propertyName,
212 const QQmlSA::Element &value, const QQmlSA::Element &writeScope,
214 void analyzeRead(const QQmlSA::Element &element, QString propertyName,
216 void analyzeBinding(const QQmlSA::Element &element, const QQmlSA::Element &value,
218
219 void addBindingSourceLocations(const QQmlSA::Element &element,
220 const QQmlSA::Element &scope = QQmlSA::Element(),
221 const QString prefix = QString(), bool isAttached = false);
222
223 std::vector<std::shared_ptr<ElementPass>> m_elementPasses;
224 std::multimap<QString, PropertyPassInfo> m_propertyPasses;
225 std::unordered_map<quint32, BindingInfo> m_bindingsByLocation;
226 QQmlJSImportVisitor *m_visitor;
227 QQmlJSTypeResolver *m_typeResolver;
228
229 PassManager *q_ptr;
230};
231
233{
234 Q_DECLARE_PUBLIC(FixSuggestion)
235 friend class QT_PREPEND_NAMESPACE(QQmlJSFixSuggestion);
236
237public:
239 FixSuggestionPrivate(FixSuggestion *, const QString &fixDescription,
240 const QQmlSA::SourceLocation &location, const QString &replacement);
244
245 QString fixDescription() const;
247 QString replacement() const;
248
249 void setFileName(const QString &);
250 QString fileName() const;
251
252 void setHint(const QString &);
253 QString hint() const;
254
255 void setAutoApplicable(bool autoApplicable = true);
256 bool isAutoApplicable() const;
257
258 static QQmlJSFixSuggestion &fixSuggestion(QQmlSA::FixSuggestion &);
259 static const QQmlJSFixSuggestion &fixSuggestion(const QQmlSA::FixSuggestion &);
260
261private:
262 QQmlJSFixSuggestion m_fixSuggestion;
263 QQmlSA::FixSuggestion *q_ptr;
264};
265
266} // namespace QQmlSA
267
269
270#endif
\inmodule QtCore
\inmodule QtCore
Definition qhash.h:1748
\inmodule QtCore
Definition qhash.h:1348
\inmodule QtQmlCompiler
Definition qqmlsa.h:63
\inmodule QtQmlCompiler
Definition qqmlsa.h:58
\inmodule QtQmlCompiler
Definition qqmlsa.h:197
\inmodule QtQmlCompiler
Definition qqmlsa.h:392
\inmodule QtQmlCompiler
Definition qqmlsa.h:278
\inmodule QtQmlCompiler
Definition qqmlsa.h:123
\inmodule QtQmlCompiler
Definition qqmlsa.h:118
bool hasImportedModule(QAnyStringView name) const
\inmodule QtQmlCompiler
Definition qqmlsa.h:309
\inmodule QtQmlCompiler
Definition qqmlsa.h:166
\inmodule QtQmlCompiler
Definition qset.h:18
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
\inmodule QtQmlCompiler
MethodType
Definition qqmlsa.h:55
AccessSemantics
Definition qqmlsa_p.h:40
@ WrappedInImplicitComponent
Combined button and popup list for selecting options.
std::pair< T1, T2 > QPair
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
static QString methodName(const QDBusIntrospection::Method &method)
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
const char * typeName
GLint location
GLuint name
static QQmlAnyBinding createBinding(const QQmlProperty &prop, const QV4::CompiledData::Binding *binding, const QQmlRefPointer< QV4::ExecutableCompilationUnit > &compilationUnit, const QQmlRefPointer< QQmlContextData > &contextData, QObject *scopeObject)
Definition qqmlbind.cpp:708
static QT_BEGIN_NAMESPACE QVariant hint(QPlatformIntegration::StyleHint h)
#define Q_UNUSED(x)
const char property[13]
Definition qwizard.cpp:101
#define explicit
file setFileName("readme.txt")
QNetworkAccessManager manager
QQmlSA::Binding binding
Definition qqmlsa_p.h:59
QString fullPropertyName
Definition qqmlsa_p.h:58
QQmlSA::Element bindingScope
Definition qqmlsa_p.h:60
std::shared_ptr< QQmlSA::PropertyPass > pass
Definition qqmlsa_p.h:67
QStringList properties
Definition qqmlsa_p.h:66