29 Q_DECLARE_TR_FUNCTIONS(QQmlTypeData)
34 TypeReference() : version(QTypeRevision::zero()), needsCreation(
true) {}
36 QV4::CompiledData::Location location;
38 QTypeRevision version;
39 QQmlRefPointer<QQmlTypeData> typeData;
40 bool selfReference =
false;
42 QString qualifiedName()
const;
46 struct ScriptReference
48 QV4::CompiledData::Location location;
50 QQmlRefPointer<QQmlScriptBlob> script;
54 friend class QQmlTypeLoader;
57 QQmlTypeData(
const QUrl &, QQmlTypeLoader *);
58 ~QQmlTypeData() override;
60 QV4::CompiledData::CompilationUnit *compilationUnit()
const;
62 QQmlType qmlType(
const QString &inlineComponentName = QString())
const;
63 QByteArray typeClassName()
const {
return m_typeClassName; }
64 SourceCodeData backupSourceCode()
const {
return m_backupSourceCode; }
69 void dataReceived(
const SourceCodeData &) override;
70 void initializeFromCachedUnit(
const QQmlPrivate::CachedQmlUnit *unit) override;
71 void allDependenciesDone() override;
73 QString stringAt(
int index)
const override;
76 using InlineComponentData = QV4::CompiledData::InlineComponentData;
78 bool tryLoadFromDiskCache();
79 bool loadFromDiskCache(
const QQmlRefPointer<QV4::CompiledData::CompilationUnit> &unit);
80 bool loadFromSource();
81 void restoreIR(
const QQmlRefPointer<QV4::CompiledData::CompilationUnit> &unit);
82 void continueLoadFromIR();
84 QQmlError buildTypeResolutionCaches(
85 QQmlRefPointer<QQmlTypeNameCache> *typeNameCache,
86 QV4::CompiledData::ResolvedTypeReferenceMap *resolvedTypeCache
88 void compile(
const QQmlRefPointer<QQmlTypeNameCache> &typeNameCache,
89 QV4::CompiledData::ResolvedTypeReferenceMap *resolvedTypeCache,
90 const QV4::CompiledData::DependentTypesHasher &dependencyHasher);
91 QQmlError createTypeAndPropertyCaches(
92 const QQmlRefPointer<QQmlTypeNameCache> &typeNameCache,
93 const QV4::CompiledData::ResolvedTypeReferenceMap &resolvedTypeCache);
94 bool resolveType(
const QString &typeName, QTypeRevision &version,
95 TypeReference &ref,
int lineNumber = -1,
int columnNumber = -1,
96 bool reportErrors =
true,
97 QQmlType::RegistrationType registrationType = QQmlType::AnyRegistrationType,
98 bool *typeRecursionDetected =
nullptr);
101 const QQmlRefPointer<QQmlScriptBlob> &blob,
const QV4::CompiledData::Location &location,
102 const QString &nameSpace,
const QString &qualifier) override;
104 SourceCodeData m_backupSourceCode;
105 QScopedPointer<QmlIR::Document> m_document;
106 QV4::CompiledData::TypeReferenceMap m_typeReferences;
108 QList<ScriptReference> m_scripts;
110 QSet<QString> m_namespaces;
111 QList<TypeReference> m_compositeSingletons;
116 QMap<
int, TypeReference> m_resolvedTypes;
117 bool m_typesResolved:1;
121 QByteArray m_typeClassName;
123 using CompilationUnitPtr = QQmlRefPointer<QV4::CompiledData::CompilationUnit>;
125 QHash<QString, InlineComponentData> m_inlineComponentData;
127 CompilationUnitPtr m_compiledData;
129 bool m_implicitImportLoaded;
130 bool loadImplicitImport();
132 bool checkDependencies();
134 template<
typename Reference>
135 void createError(
const Reference &ref,
const QString &message, QList<QQmlError> errors)
139 error.setLine(qmlConvertSourceCoordinate<quint32,
int>(ref.location.line()));
140 error.setColumn(qmlConvertSourceCoordinate<quint32,
int>(ref.location.column()));
141 error.setDescription(message);
142 errors.prepend(std::move(error));
146 void createError(
const TypeReference &type,
const QString &message);
147 void createError(
const ScriptReference &script,
const QString &message);
149 bool checkCompositeSingletons();
150 void createQQmlType();
151 bool rebuildFromSource();