15#include <QtQmlCompiler/private/qqmlsasourcelocation_p.h>
71 return d->constBegin();
76 return m_bindings.constBegin();
90 return m_bindings.constEnd();
114 d_func()->m_binding =
other.d_func()->m_binding;
115 d_func()->q_ptr =
this;
124 d_func()->m_binding = std::move(
other.d_func()->m_binding);
125 d_func()->q_ptr =
this;
131bool Binding::operatorEqualsImpl(
const Binding &lhs,
const Binding &rhs)
133 return lhs.d_func()->m_binding == rhs.d_func()->m_binding;
144 saBinding.d_func()->m_binding =
binding;
150 return binding.d_func()->m_binding;
155 return binding.d_func()->m_binding;
250 return jsBinding.bindingType() ==
Script
261 return QQmlJSMetaPropertyBinding::isLiteralBinding(bindingType);
279 return d->constBegin();
284 return m_methods.constBegin();
293 return d->constEnd();
297 return m_methods.constEnd();
350 d_func()->m_method =
other.d_func()->m_method;
351 d_func()->q_ptr =
this;
360 d_func()->m_method = std::move(
other.d_func()->m_method);
361 d_func()->q_ptr =
this;
373 return d->methodName();
383 return d->methodType();
386bool Method::operatorEqualsImpl(
const Method &lhs,
const Method &rhs)
388 return lhs.d_func()->m_method == rhs.d_func()->m_method;
394 auto &wrappedMethod = saMethod.d_func()->m_method;
395 wrappedMethod = jsMethod;
403 for (
const auto &[
key,
value] :
hash.asKeyValueRange()) {
408 methods.d_func()->m_methods = std::move(saMethods);
414 return method.d_func()->m_method;
441 return property.d_func()->m_property;
447 auto &wrappedProperty = saProperty.d_func()->m_property;
474 d_func()->m_property =
other.d_func()->m_property;
475 d_func()->q_ptr =
this;
484 d_func()->m_property = std::move(
other.d_func()->m_property);
485 d_func()->q_ptr =
this;
497 return d->typeName();
508 return lhs.d_func()->m_property == rhs.d_func()->m_property;
732 for (
const auto &jsBinding : bindings) {
742 for (
const auto &[
key,
value] :
hash.asKeyValueRange()) {
747 bindings.d_func()->m_bindings = std::move(saBindings);
756 for (
auto it = iterators.first;
it != iterators.second; ++
it) {
761 bindings.d_func()->m_bindings = std::move(saBindings);
781Element::operator bool()
const
801bool Element::operatorEqualsImpl(
const Element &lhs,
const Element &rhs)
919 const auto scope = module.
type(
typeName.toString()).scope;
934 auto typeNameString =
typeName.toString();
940 scope = builtins.
type(typeNameString).scope;
1022 d->registerElementPass(std::move(pass));
1033 m_elementPasses.push_back(std::move(pass));
1044 return u
"$INVALID$"_s;
1054 name += u
'@' + filePath;
1093 return d->registerPropertyPass(pass, moduleName,
typeName, propertyName, allowInheritance);
1101 qWarning() <<
"Both the moduleName and the typeName must be specified "
1102 "for the pass to be registered for a specific element.";
1107 auto typeImporter = m_visitor->
importer();
1111 if (element.isNull())
1119 std::move(pass), allowInheritance };
1120 m_propertyPasses.insert({
name, passInfo });
1125void PassManagerPrivate::addBindingSourceLocations(
const Element &element,
const Element &scope,
1126 const QString prefix,
bool isAttached)
1128 const Element ¤tScope = scope.
isNull() ? element : scope;
1130 for (
const auto &binding : ownBindings) {
1131 switch (binding.bindingType()) {
1133 addBindingSourceLocations(element,
Element{ binding.groupType() },
1134 prefix + binding.propertyName() + u
'.');
1137 addBindingSourceLocations(element, Element{ binding.attachingType() },
1138 prefix + binding.propertyName() + u
'.',
true);
1141 m_bindingsByLocation.insert({ binding.sourceLocation().
offset(),
1142 BindingInfo{ prefix + binding.propertyName(), binding,
1143 currentScope, isAttached } });
1165 auto element = runStack.
takeLast();
1166 addBindingSourceLocations(element);
1167 for (
auto &elementPass : m_elementPasses)
1168 if (elementPass->shouldRun(element))
1169 elementPass->run(element);
1178void PassManagerPrivate::analyzeWrite(
const Element &element,
QString propertyName,
1182 for (
PropertyPass *pass : findPropertyUsePasses(element, propertyName))
1183 pass->onWrite(element, propertyName,
value, writeScope,
location);
1186void PassManagerPrivate::analyzeRead(
const Element &element,
QString propertyName,
1189 for (PropertyPass *pass : findPropertyUsePasses(element, propertyName))
1190 pass->onRead(element, propertyName, readScope,
location);
1196 const auto info = m_bindingsByLocation.find(
location.offset());
1200 if (
info == m_bindingsByLocation.end())
1205 const QString &propertyName =
info->second.fullPropertyName;
1207 for (PropertyPass *pass : findPropertyUsePasses(element, propertyName))
1208 pass->onBinding(element, propertyName, binding, bindingScope,
value);
1213 for (PropertyPass *pass : findPropertyUsePasses(bindingScope.baseType(), propertyName))
1214 pass->onBinding(element, propertyName, binding, bindingScope,
value);
1248 return manager.d_func()->m_visitor;
1253 return manager.d_func()->m_typeResolver;
1273 { m_propertyPasses.equal_range(u
""_s), m_propertyPasses.equal_range(
typeName) }) {
1274 if (pass.first == pass.second)
1277 for (
auto it = pass.first;
it != pass.second;
it++) {
1278 if (
typeName != typeNames.constFirst() && !
it->second.allowInheritance)
1281 ||
it->second.properties.
contains(propertyName)) {
1282 passes.insert(
it->second.pass.get());
1292 if (
auto bindings = element.
propertyBindings(u
"objectName"_s); !bindings.isEmpty()) {
1297 + u
" elements to property "_s + defPropName,
1423 + u
"' property: '"_s + propertyName + u
"' value: '"_s
1424 + (
value.isNull() ? u
"NULL"_s
1426 ?
value.baseTypeName()
1428 + u
"' binding_scope: '"_s
1455 return d->m_elementPasses;
1464 return d->m_propertyPasses;
1473 return d->m_bindingsByLocation;
1530 return m_fixSuggestion.
hint();
1545 return saFixSuggestion.d_func()->m_fixSuggestion;
1550 return saFixSuggestion.d_func()->m_fixSuggestion;
1582 d_func()->m_fixSuggestion =
other.d_func()->m_fixSuggestion;
1591 d_func()->m_fixSuggestion = std::move(
other.d_func()->m_fixSuggestion);
1672 return lhs.d_func()->m_fixSuggestion == rhs.d_func()->m_fixSuggestion;
static JNINativeMethod methods[]
QString toString() const
Returns a deep copy of this string view's data as a QString.
constexpr bool isEmpty() const noexcept
Returns whether this string view is empty - that is, whether {size() == 0}.
bool isEmpty() const noexcept
void push_back(parameter_type t)
iterator insert(const Key &key, const T &value)
Inserts a new item with the key and a value of value.
void setFilename(const QString &filename)
QQmlJS::SourceLocation location() const
bool isAutoApplicable() const
QString replacement() const
QString fixDescription() const
void setHint(const QString &hint)
void setAutoApplicable(bool autoApply=true)
QQmlJSImporter::ImportedTypes imports() const
QQmlJSImporter * importer()
const QQmlJSLogger * logger() const
QQmlJSScopesById addressableScopes() const
ImportedTypes builtinInternalNames()
ImportedTypes importBuiltins()
Imports builtins.qmltypes and jsroot.qmltypes found in any of the import paths.
ImportedTypes importModule(const QString &module, const QString &prefix=QString(), QTypeRevision version=QTypeRevision(), QStringList *staticModuleList=nullptr)
bool isCategoryIgnored(QQmlJS::LoggerWarningId id) const
void log(const QString &message, QQmlJS::LoggerWarningId id, const QQmlJS::SourceLocation &srcLocation, bool showContext=true, bool showFileName=true, const std::optional< QQmlJSFixSuggestion > &suggestion={}, const QString overrideFileName=QString())
QList< QQmlJSMetaPropertyBinding > propertyBindings(const QString &name) const
bool hasOwnPropertyBindings(const QString &name) const
QString defaultPropertyName() const
bool hasPropertyBindings(const QString &name) const
QQmlJS::ConstPtrWrapperIterator childScopesEnd() const
QQmlJS::ConstPtrWrapperIterator childScopesBegin() const
QQmlJSScope::Ptr parentScope()
ScopeType scopeType() const
QString baseTypeName() const
QString internalName() const
AccessSemantics accessSemantics() const
static QQmlSA::Element createQQmlSAElement(const ConstPtr &)
bool hasMethod(const QString &name) const
static const QQmlJSScope::ConstPtr & scope(const QQmlSA::Element &)
bool isPropertyRequired(const QString &name) const
bool inherits(const QQmlJSScope::ConstPtr &base) const
QQmlJSMetaProperty property(const QString &name) const
static QString prettyName(QAnyStringView name)
QQmlJSScope::ConstPtr baseType() const
static constexpr qsizetype sizeofQQmlSAElement()
bool hasProperty(const QString &name) const
QMultiHash< QString, QQmlJSMetaPropertyBinding > ownPropertyBindings() const
QQmlJS::SourceLocation sourceLocation() const
QMultiHash< QString, QQmlJSMetaMethod > ownMethods() const
QString id(const QQmlJSScope::ConstPtr &scope, const QQmlJSScope::ConstPtr &referrer) const
QQmlJSScope::ConstPtr scope(const QString &id, const QQmlJSScope::ConstPtr &referrer) const
static QQmlJSMetaPropertyBinding binding(QQmlSA::Binding &binding)
static QQmlSA::Binding createBinding(const QQmlJSMetaPropertyBinding &)
BindingPrivate(Binding *)
QMultiHash< QString, Binding >::const_iterator constBegin() const
Returns an iterator to the beginning of the bindings.
QMultiHash< QString, Binding >::const_iterator constEnd() const
Returns an iterator to the end of the bindings.
BindingType bindingType() const
bool hasUndefinedScriptValue() const
Binding & operator=(const Binding &)
bool hasObject() const
Returns true if this binding has an objects, otherwise returns false.
Element attachingType() const
Returns the attached type if the content type of this binding is AttachedProperty,...
static bool isLiteralBinding(BindingType)
Returns true if bindingType is a literal type, and false otherwise.
Element literalType(const QQmlJSTypeResolver *) const
QString propertyName() const
Returns the name of the property using this binding.
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,...
QQmlSA::SourceLocation sourceLocation() const
Returns the location in the QML code where this binding is defined.
ScriptBindingKind scriptKind() const
Returns the kind of associated 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 if this element is a group property, otherwise returns an invalid El...
BindingsPrivate(QQmlSA::Binding::Bindings *)
QMultiHash< QString, Binding >::const_iterator constBegin() const
static QQmlSA::Binding::Bindings createBindings(const QMultiHash< QString, QQmlJSMetaPropertyBinding > &)
QMultiHash< QString, Binding >::const_iterator constEnd() const
void run(const Element &element) override
Executes if shouldRun() returns true.
void onWrite(const QQmlSA::Element &element, const QString &propertyName, const QQmlSA::Element &value, const QQmlSA::Element &writeScope, QQmlSA::SourceLocation location) override
Executes whenever a property is written to.
void onBinding(const QQmlSA::Element &element, const QString &propertyName, const QQmlSA::Binding &binding, const QQmlSA::Element &bindingScope, const QQmlSA::Element &value) override
Executes whenever a property gets bound to a value.
DebugPropertyPass(QQmlSA::PassManager *manager)
void onRead(const QQmlSA::Element &element, const QString &propertyName, const QQmlSA::Element &readScope, QQmlSA::SourceLocation location) override
Executes whenever a property is read.
virtual bool shouldRun(const Element &element)
Returns true if the run() function should be executed on the given element.
QString internalId() const
Element baseType() const
Returns the Element this Element derives from.
bool hasMethod(const QString &methodName) const
Returns whether this Element has a method with the name methodName.
QString defaultPropertyName() const
Returns the name of the default property of this Element.
QQmlJS::ConstPtrWrapperIterator childScopesBegin() const
Returns an iterator to the beginning of this Element's children.
bool isPropertyRequired(const QString &propertyName) const
Returns whether the property with the name propertyName resolved on this Element is required.
QQmlJS::ConstPtrWrapperIterator childScopesEnd() const
Returns an iterator to the end of this Element's children.
QString name() const
Returns the name of this Element.
Element & operator=(const Element &)
QQmlSA::SourceLocation sourceLocation() const
Returns the location in the QML code where this method is defined.
QString filePath() const
Returns the file path of the QML code that defines this method.
Binding::Bindings ownPropertyBindings() const
Returns this Element's property bindings which are not defined on its base or extension objects.
QList< Binding > propertyBindings(const QString &propertyName) const
Returns this Element's property bindings that have the name propertyName.
Method::Methods ownMethods() const
Returns this Elements's method which are not defined on its base or extension objects.
bool isComposite() const
Returns true for objects defined from Qml, and false for objects declared from C++.
Property property(const QString &propertyName) const
Returns the property with the name propertyName if it is found in this Element or its base and extens...
bool hasPropertyBindings(const QString &name) const
Returns whethe this Element has a property binding with the name name.
bool hasProperty(const QString &propertyName) const
Returns whether this Element has a property with the name propertyName.
Element parentScope() const
Returns the Element that encloses this Element.
bool inherits(const Element &) const
Returns whether this Element inherits from element.
AccessSemantics accessSemantics() const
Returns the access semantics of this Element.
QString baseTypeName() const
Returns the name of the Element this Element derives from.
bool hasOwnPropertyBindings(const QString &propertyName) const
Returns whether this Element has property bindings which are not defined in its base or extension obj...
ScopeType scopeType() const
Returns the type of Element's scope.
QQmlSA::SourceLocation location() const
void setHint(const QString &)
void setFileName(const QString &)
QString fixDescription() const
FixSuggestionPrivate(FixSuggestion *)
bool isAutoApplicable() const
void setAutoApplicable(bool autoApplicable=true)
QString replacement() const
static QQmlJSFixSuggestion & fixSuggestion(QQmlSA::FixSuggestion &)
FixSuggestion(const QString &fixDescription, const QQmlSA::SourceLocation &location, const QString &replacement=QString())
void setHint(const QString &)
Sets hint as the hint for this fix suggestion.
QString fileName() const
Returns the name of the file where this fix suggestion applies.
FixSuggestion & operator=(const FixSuggestion &)
void setFileName(const QString &)
Sets fileName as the name of the file where this fix suggestion applies.
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.
QQmlSA::SourceLocation location() const
Returns the location where the fix would be applied.
bool isAutoApplicable() const
Returns whether this suggested fix can be applied automatically.
void setAutoApplicable(bool autoApplicable=true)
Sets uses autoApplicable to set whtether this suggested fix can be applied automatically.
GenericPassPrivate(GenericPass *interface, PassManager *manager)
Element resolveLiteralType(const Binding &binding)
Returns the element representing the type of literal in binding.
void emitWarning(QAnyStringView diagnostic, QQmlJS::LoggerWarningId id)
Emits a warning message diagnostic about an issue of type id.
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.
GenericPass(PassManager *manager)
Creates a generic pass.
Element resolveType(QAnyStringView moduleName, QAnyStringView typeName)
Returns the type of typeName defined in module moduleName.
static QQmlSA::Method createMethod(const QQmlJSMetaMethod &)
MethodType methodType() const
static QQmlJSMetaMethod method(const QQmlSA::Method &)
QString methodName() const
QMultiHash< QString, Method >::const_iterator constBegin() const
Returns an iterator to the beginning of the methods.
QMultiHash< QString, Method >::const_iterator constEnd() const
Returns an iterator to the end of the methods.
QString methodName() const
Returns the name of the this method.
Method & operator=(const Method &)
MethodType methodType() const
Returns the type of this method.
static QQmlSA::Method::Methods createMethods(const QMultiHash< QString, QQmlJSMetaMethod > &)
QMultiHash< QString, Method >::const_iterator constEnd() const
MethodsPrivate(QQmlSA::Method::Methods *)
QMultiHash< QString, Method >::const_iterator constBegin() const
void analyze(const Element &root)
void registerElementPass(std::unique_ptr< ElementPass > pass)
PassManager::registerElementPass registers ElementPass with the pass manager.
static QQmlJSTypeResolver * resolver(const QQmlSA::PassManager &)
static QQmlJSImportVisitor * visitor(const QQmlSA::PassManager &)
bool registerPropertyPass(std::shared_ptr< PropertyPass > pass, QAnyStringView moduleName, QAnyStringView typeName, QAnyStringView propertyName=QAnyStringView(), bool allowInheritance=true)
void analyze(const Element &root)
Runs the element passes over root and all its children.
std::multimap< QString, PropertyPassInfo > propertyPasses() const
Returns the list of property passes.
bool registerPropertyPass(std::shared_ptr< PropertyPass > pass, QAnyStringView moduleName, QAnyStringView typeName, QAnyStringView propertyName=QAnyStringView(), bool allowInheritance=true)
Registers a static analysis pass for properties.
PassManager(QQmlJSImportVisitor *visitor, QQmlJSTypeResolver *resolver)
Constructs a pass manager given an import visitor and a type resolver.
void registerElementPass(std::unique_ptr< ElementPass > pass)
Registers a static analysis pass to be run on all elements.
std::unordered_map< quint32, BindingInfo > bindingsByLocation() const
Returns bindings by their source location.
bool isCategoryEnabled(QQmlJS::LoggerWarningId category) const
Returns true if warnings of category are enabled, false otherwise.
std::vector< std::shared_ptr< ElementPass > > elementPasses() const
Returns the list of element passes.
bool hasImportedModule(QAnyStringView name) const
Returns true if the module named module has been imported by the QML to be analyzed,...
PropertyPass(PassManager *manager)
virtual void onWrite(const QQmlSA::Element &element, const QString &propertyName, const QQmlSA::Element &value, const QQmlSA::Element &writeScope, QQmlSA::SourceLocation location)
Executes whenever a property is written to.
virtual void onRead(const QQmlSA::Element &element, const QString &propertyName, const QQmlSA::Element &readScope, QQmlSA::SourceLocation location)
Executes whenever a property is read.
virtual void onBinding(const QQmlSA::Element &element, const QString &propertyName, const QQmlSA::Binding &binding, const QQmlSA::Element &bindingScope, const QQmlSA::Element &value)
Executes whenever a property gets bound to a value.
static QQmlSA::Property createProperty(const QQmlJSMetaProperty &)
static QQmlJSMetaProperty property(const QQmlSA::Property &property)
PropertyPrivate(Property *)
QString typeName() const
Returns the name of the type of this property.
Property & operator=(const Property &)
static const QQmlJS::SourceLocation & sourceLocation(const QQmlSA::SourceLocation &sourceLocation)
static QQmlSA::SourceLocation createQQmlSASourceLocation(const QQmlJS::SourceLocation &jsLocation)
bool contains(const T &value) const
\macro QT_RESTRICTED_CAST_FROM_ASCII
bool isNull() const
Returns true if this string is null; otherwise returns false.
QString mid(qsizetype position, qsizetype n=-1) const
Returns a string that contains n characters of this string, starting at the specified position index.
bool endsWith(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Returns true if the string ends with s; otherwise returns false.
bool isEmpty() const
Returns true if the string has no characters; otherwise returns false.
static QString number(int, int base=10)
This is an overloaded member function, provided for convenience. It differs from the above function o...
const QLoggingCategory & category()
[1]
QHash< int, QWidget * > hash
[35multi]
QSet< QString >::iterator it
static QString lookupName(const QQmlSA::Element &element, LookupMode mode=Lookup)
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 return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
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 * interface
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]
size_t qHash(const QFileSystemWatcherPathKey &key, size_t seed=0)
GLenum GLuint GLintptr offset
static QString internalName(const QQmlJSScope::ConstPtr &scope)
const QQmlJS::LoggerWarningId qmlPlugin
static Q_CONSTINIT QBasicAtomicInteger< unsigned > seed
QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator begin(const QRegularExpressionMatchIterator &iterator)
static QT_BEGIN_NAMESPACE QVariant hint(QPlatformIntegration::StyleHint h)
QFileInfo info(fileName)
[8]
QNetworkAccessManager manager
char * toString(const MyType &t)
[31]
bool hasType(const QString &name) const
ImportedScope< ConstPtr > type(const QString &name) const
static bool searchBaseAndExtensionTypes(QQmlJSScopePtr type, const Action &check)