29 Q_DECLARE_TR_FUNCTIONS(QQmlTypeData)
36 QQmlRefPointer<QQmlTypeData> typeData;
37 QV4::CompiledData::Location location;
38 QTypeRevision version = QTypeRevision::zero();
39 bool selfReference =
false;
40 bool needsCreation =
true;
42 QString qualifiedName()
const;
45 struct ScriptReference
48 QQmlRefPointer<QQmlScriptBlob> script;
49 QV4::CompiledData::Location location;
53 friend class QQmlTypeLoader;
56 QQmlTypeData(
const QUrl &, QQmlTypeLoader *);
57 ~QQmlTypeData() override;
59 QV4::CompiledData::CompilationUnit *compilationUnit()
const;
61 QQmlType qmlType(
const QString &inlineComponentName = QString())
const;
62 QByteArray typeClassName()
const {
return m_typeClassName; }
63 SourceCodeData backupSourceCode()
const {
return m_backupSourceCode; }
68 void dataReceived(
const SourceCodeData &) override;
69 void initializeFromCachedUnit(
const QQmlPrivate::CachedQmlUnit *unit) override;
70 void allDependenciesDone() override;
72 QString stringAt(
int index)
const override;
75 using InlineComponentData = QV4::CompiledData::InlineComponentData;
77 bool tryLoadFromDiskCache();
78 bool loadFromDiskCache(
const QQmlRefPointer<QV4::CompiledData::CompilationUnit> &unit);
79 bool loadFromSource();
80 void restoreIR(
const QQmlRefPointer<QV4::CompiledData::CompilationUnit> &unit);
81 void continueLoadFromIR();
83 QQmlError buildTypeResolutionCaches(
84 QQmlRefPointer<QQmlTypeNameCache> *typeNameCache,
85 QV4::CompiledData::ResolvedTypeReferenceMap *resolvedTypeCache
87 void compile(
const QQmlRefPointer<QQmlTypeNameCache> &typeNameCache,
88 QV4::CompiledData::ResolvedTypeReferenceMap *resolvedTypeCache,
89 const QV4::CompiledData::DependentTypesHasher &dependencyHasher);
90 QQmlError createTypeAndPropertyCaches(
91 const QQmlRefPointer<QQmlTypeNameCache> &typeNameCache,
92 const QV4::CompiledData::ResolvedTypeReferenceMap &resolvedTypeCache);
93 bool resolveType(
const QString &typeName, QTypeRevision &version,
94 TypeReference &ref,
int lineNumber = -1,
int columnNumber = -1,
95 bool reportErrors =
true,
96 QQmlType::RegistrationType registrationType = QQmlType::AnyRegistrationType,
97 bool *typeRecursionDetected =
nullptr);
100 const QQmlRefPointer<QQmlScriptBlob> &blob,
const QV4::CompiledData::Location &location,
101 const QString &nameSpace,
const QString &qualifier) override;
103 SourceCodeData m_backupSourceCode;
104 QScopedPointer<QmlIR::Document> m_document;
105 QV4::CompiledData::TypeReferenceMap m_typeReferences;
107 QList<ScriptReference> m_scripts;
109 QSet<QString> m_namespaces;
110 QList<TypeReference> m_compositeSingletons;
115 QMap<
int, TypeReference> m_resolvedTypes;
116 bool m_typesResolved:1;
120 QByteArray m_typeClassName;
122 using CompilationUnitPtr = QQmlRefPointer<QV4::CompiledData::CompilationUnit>;
124 QHash<QString, InlineComponentData> m_inlineComponentData;
126 CompilationUnitPtr m_compiledData;
128 bool m_implicitImportLoaded;
129 bool loadImplicitImport();
131 bool checkDependencies();
133 template<
typename Reference>
134 void createError(
const Reference &ref,
const QString &message, QList<QQmlError> errors)
138 error.setLine(qmlConvertSourceCoordinate<quint32,
int>(ref.location.line()));
139 error.setColumn(qmlConvertSourceCoordinate<quint32,
int>(ref.location.column()));
140 error.setDescription(message);
141 errors.prepend(std::move(error));
145 void createError(
const TypeReference &type,
const QString &message);
146 void createError(
const ScriptReference &script,
const QString &message);
148 bool checkCompositeSingletons();
149 void createQQmlType();
150 bool rebuildFromSource();