5#ifndef QQMLJSREGISTERCONTENT_P_H
6#define QQMLJSREGISTERCONTENT_P_H
19#include <QtCore/qhash.h>
20#include <QtCore/qstring.h>
71 enum { InvalidLookupIndex = -1 };
73 QQmlJSRegisterContent() =
default;
78 bool isNull()
const {
return !d; }
82 bool isWritable()
const;
84 ContentVariant variant()
const;
86 QString descriptiveName()
const;
87 QString containedTypeName()
const;
89 int resultLookupIndex()
const;
91 QQmlJSScope::ConstPtr storedType()
const;
92 QQmlJSScope::ConstPtr containedType()
const;
93 QQmlJSScope::ConstPtr scopeType()
const;
95 bool contains(
const QQmlJSScope::ConstPtr &type)
const {
return type == containedType(); }
96 bool isStoredIn(
const QQmlJSScope::ConstPtr &type)
const {
return type == storedType(); }
102 QQmlJSScope::ConstPtr type()
const;
104 bool isProperty()
const;
105 QQmlJSMetaProperty property()
const;
106 int baseLookupIndex()
const;
108 bool isEnumeration()
const;
109 QQmlJSMetaEnum enumeration()
const;
110 QString enumMember()
const;
112 bool isMethod()
const;
113 QList<QQmlJSMetaMethod> method()
const;
114 QQmlJSScope::ConstPtr methodType()
const;
116 bool isImportNamespace()
const;
117 uint importNamespace()
const;
118 QQmlJSScope::ConstPtr importNamespaceType()
const;
120 bool isConversion()
const;
121 QQmlJSScope::ConstPtr conversionResultType()
const;
122 QQmlJSRegisterContent conversionResultScope()
const;
123 QList<QQmlJSRegisterContent> conversionOrigins()
const;
125 bool isMethodCall()
const;
126 QQmlJSMetaMethod methodCall()
const;
127 bool isJavaScriptReturnValue()
const;
132 QQmlJSRegisterContent attacher()
const;
133 QQmlJSRegisterContent attachee()
const;
135 QQmlJSRegisterContent scope()
const;
136 QQmlJSRegisterContent storage()
const;
137 QQmlJSRegisterContent original()
const;
138 QQmlJSRegisterContent shadowed()
const;
140 quintptr id()
const {
return quintptr(d); }
143 friend class QQmlJSRegisterContentPool;
146 QQmlJSRegisterContent(QQmlJSRegisterContentPrivate *dd) : d(dd) {};
148 friend bool operator==(QQmlJSRegisterContent a, QQmlJSRegisterContent b)
153 friend bool operator!=(QQmlJSRegisterContent a, QQmlJSRegisterContent b)
158 friend size_t qHash(QQmlJSRegisterContent registerContent, size_t seed = 0)
160 return qHash(registerContent.d, seed);
163 QQmlJSRegisterContentPrivate *d =
nullptr;
168 Q_DISABLE_COPY_MOVE(QQmlJSRegisterContentPool)
170 using ContentVariant = QQmlJSRegisterContent::ContentVariant;
173 ~QQmlJSRegisterContentPool();
179 const QQmlJSScope::ConstPtr &type,
int resultLookupIndex, ContentVariant variant,
180 QQmlJSRegisterContent scope = {});
184 ContentVariant variant, QQmlJSRegisterContent scope);
187 const QQmlJSMetaEnum &enumeration,
const QString &enumMember, ContentVariant variant,
188 QQmlJSRegisterContent scope);
191 const QList<QQmlJSMetaMethod> &methods,
const QQmlJSScope::ConstPtr &methodType,
192 ContentVariant variant, QQmlJSRegisterContent scope);
196 QQmlJSRegisterContent scope);
199 uint importNamespaceStringId,
const QQmlJSScope::ConstPtr &importNamespaceType,
200 ContentVariant variant, QQmlJSRegisterContent scope);
203 const QList<QQmlJSRegisterContent> &origins,
const QQmlJSScope::ConstPtr &conversion,
204 QQmlJSRegisterContent conversionScope, ContentVariant variant,
205 QQmlJSRegisterContent scope);
211 QQmlJSRegisterContent content,
const QQmlJSScope::ConstPtr &newStoredType);
214 QQmlJSRegisterContent content,
const QQmlJSScope::ConstPtr &newContainedType);
225 QQmlJSRegisterContent content,
const QQmlJSScope::ConstPtr &stored);
227 QQmlJSRegisterContent content,
const QQmlJSScope::ConstPtr &adjusted);
229 QQmlJSRegisterContent content,
const QQmlJSScope::ConstPtr &generalized);
238 template<
typename Private>
239 constexpr void operator()(Private *d)
const {
delete d; }
242 using Pool = std::vector<std::unique_ptr<QQmlJSRegisterContentPrivate, Deleter>>;
249 qsizetype m_checkpoint = -1;
friend bool operator==(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
Returns true if lhs and rhs are equal, otherwise returns false.
friend bool operator!=(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
Returns true if lhs and rhs are different, otherwise returns false.
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
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)
QQmlJSRegisterContentPool()
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
Element attachedType() const
Returns the attached type if the content type of this binding is AttachedProperty,...
BindingType bindingType() const
Returns the type of this binding.
Element bindingScope() const
Returns the Element scope in which the binding is defined.
friend bool operator!=(const Binding &lhs, const Binding &rhs)
Returns true if lhs and rhs are not equal, and false otherwise.
bool hasUndefinedScriptValue() const
Returns whether this binding has script value type undefined like when it is assigned undefined.
Binding(const Binding &)
Creates a copy of other.
Binding & operator=(const Binding &)
Assigns other to this Binding instance.
bool isAttached() const
Returns true if this type is attached to another one, false otherwise.
bool hasObject() const
Returns true if this binding has an objects, otherwise returns false.
friend bool operator==(const Binding &lhs, const Binding &rhs)
Returns true if lhs and rhs are equal, and false otherwise.
static bool isLiteralBinding(BindingType)
Returns true if bindingType is a literal type, and false otherwise.
QString propertyName() const
Returns the name of the property bound with this binding.
Binding()
Constructs a new Binding object.
QString stringValue() const
Returns the associated string literal if the content type of this binding is StringLiteral,...
Element objectType() const
Returns the type of the associated object if the content type of this binding is Object,...
Binding & operator=(Binding &&) noexcept
Move-assigns other to this Binding instance.
QQmlSA::SourceLocation sourceLocation() const
Returns the location in the QML code where this binding is defined.
ScriptBindingKind scriptKind() const
Returns the kind of the associated script if the content type of this binding is Script,...
double numberValue() const
Returns the associated number if the content type of this binding is NumberLiteral,...
Element groupType() const
Returns the type of the property of this binding if it is a group property, otherwise returns an inva...
bool hasFunctionScriptValue() const
Returns whether this binding has script value type function like when it is assigned a (lambda) metho...
void setHint(const QString &)
Sets hint as the hint for this fix suggestion.
FixSuggestion(const FixSuggestion &)
Creates a copy of other.
QString hint() const
Returns the hint for this fix suggestion.
QString replacement() const
Returns the fix that will replace the problematic source code.
QString fixDescription() const
Returns the description of the fix.
bool isAutoApplicable() const
Returns whether this suggested fix can be applied automatically.
void setAutoApplicable(bool autoApplicable=true)
Sets autoApplicable to determine whether this suggested fix can be applied automatically.
void emitWarning(QAnyStringView diagnostic, LoggerWarningId id)
Emits a warning message diagnostic about an issue of type id.
Element resolveLiteralType(const Binding &binding)
Returns the element representing the type of literal in binding.
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...
void emitWarning(QAnyStringView diagnostic, LoggerWarningId id, QQmlSA::SourceLocation srcLocation)
Emits warning message diagnostic about an issue of type id located at srcLocation.
Element resolveBuiltinType(QAnyStringView typeName) const
Returns the type of the built-in type identified by typeName.
Element resolveAttached(QAnyStringView moduleName, QAnyStringView typeName)
Returns the attached type of typeName defined in module moduleName.
QString resolveElementToId(const Element &element, const Element &context)
Returns the id of element in a given context.
Element resolveTypeInFileScope(QAnyStringView typeName)
Returns the type corresponding to typeName inside the currently analysed file.
QString sourceCode(QQmlSA::SourceLocation location)
Returns the source code located within location.
Element resolveAttachedInFileScope(QAnyStringView typeName)
Returns the attached type corresponding to typeName used inside the currently analysed file.
Element resolveIdToElement(QAnyStringView id, const Element &context)
Returns the element in context that has id id.
Element resolveType(QAnyStringView moduleName, QAnyStringView typeName)
Returns the type of typeName defined in module moduleName.
Method & operator=(Method &&) noexcept
Move-assigns other to this Method instance.
MethodType methodType() const
Returns the type of this method.
Method(const Method &)
Creates a copy of other.
Method()
Constructs a new Method object.
Method & operator=(const Method &)
Assigns other to this Method instance.
QString methodName() const
Returns the name of the this method.
void analyze(const Element &root)
Runs the element passes over root and all its children.
bool isCategoryEnabled(LoggerWarningId category) const
Returns true if warnings of category are enabled, false otherwise.
bool registerPropertyPass(std::shared_ptr< PropertyPass > pass, QAnyStringView moduleName, QAnyStringView typeName, QAnyStringView propertyName=QAnyStringView(), bool allowInheritance=true)
Registers a static analysis pass for properties.
std::unordered_map< quint32, Binding > bindingsByLocation() const
Returns bindings by their source location.
bool hasImportedModule(QAnyStringView name) const
Returns true if the module named module has been imported by the QML to be analyzed,...
Property(const Property &)
Creates a copy of other.
QString typeName() const
Returns the name of the type of this property.
bool isReadonly() const
Returns true if this property is read-only, false otherwise.
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)
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)
#define QmlLintPluginInterface_iid