4#ifndef QQMLDOMEXTERNALITEMS_P_H
5#define QQMLDOMEXTERNALITEMS_P_H
23#include <QtQml/private/qqmljsast_p.h>
24#include <QtQml/private/qqmljsengine_p.h>
25#include <QtQml/private/qqmldirparser_p.h>
26#include <QtQmlCompiler/private/qqmljstyperesolver_p.h>
27#include <QtCore/QMetaType>
28#include <QtCore/qregularexpression.h>
57 QString canonicalFilePath()
const;
62 bool cont = OwningItem::iterateDirectSubpaths(self, visitor);
63 cont = cont && self.dvValueLazyField(visitor, Fields::canonicalFilePath, [
this]() {
64 return canonicalFilePath();
67 && self.dvValueLazyField(visitor, Fields::isValid, [
this]() {
return isValid(); });
70 && self.dvValueLazyField(visitor, Fields::code, [
this]() {
return code(); });
76 bool cont = OwningItem::iterateSubOwners(self, visitor);
77 cont = cont && self.field(Fields::components).visitKeys([visitor](
const QString &,
const DomItem &comps) {
78 return comps.visitIndexes([visitor](
const DomItem &comp) {
79 return comp.field(Fields::objects).visitIndexes([visitor](
const DomItem &qmlObj) {
81 return qmlObjPtr->iterateSubOwners(qmlObj, visitor);
105 bool m_isValid =
false;
113 return std::make_shared<QmlDirectory>(*
this);
117 constexpr static DomType kindValue = DomType::QmlDirectory;
122 int derivedFrom = 0);
127 return std::static_pointer_cast<QmlDirectory>(doCopy(self));
132 const QMultiMap<QString, Export> &
exports() const & {
return m_exports; }
134 const QMultiMap<QString, QString> &
qmlFiles() const & {
return m_qmlFiles; }
136 bool addQmlFilePath(
const QString &relativePath);
139 QMultiMap<QString, Export> m_exports;
140 QMultiMap<QString, QString> m_qmlFiles;
149 auto copy = std::make_shared<QmldirFile>(*
this);
154 constexpr static DomType kindValue = DomType::QmldirFile;
169 static std::shared_ptr<QmldirFile> fromPathAndCode(
const QString &
path,
const QString &code);
173 return std::static_pointer_cast<QmldirFile>(doCopy(self));
182 const QMultiMap<QString, Export> &
exports() const & {
return m_exports; }
184 const QList<Import> &
imports() const & {
return m_imports; }
188 QMap<QString, QString> qmlFiles()
const;
194 QList<ModuleAutoExport> autoExports()
const;
195 void setAutoExports(
const QList<ModuleAutoExport> &autoExport);
197 void ensureInModuleIndex(
const DomItem &self,
const QString &uri)
const;
201 void setFromQmldir();
204 QSet<int> m_majorVersions;
206 QList<QQmlDirParser::Plugin> m_plugins;
207 QList<Import> m_imports;
208 QList<ModuleAutoExport> m_autoExports;
209 QMultiMap<QString, Export> m_exports;
210 QList<Path> m_qmltypesFilePaths;
218 auto copy = std::make_shared<JsFile>(*
this);
223 constexpr static DomType kindValue = DomType::JsFile;
227 const Path &pathFromTop =
Path(),
int derivedFrom = 0)
233 int derivedFrom = 0);
238 return std::static_pointer_cast<JsFile>(doCopy(self));
244 std::shared_ptr<QQmlJS::Engine>
engine()
const {
return m_engine; }
251 void setExpression(
const std::shared_ptr<ScriptExpression> &script) { m_script = script; }
258 void writeOutDirectives(
OutWriter &lw)
const;
278 struct LegacyPragmaLibrary
290 void writeOut(OutWriter &lw)
const;
296 LegacyDirectivesCollector(JsFile &
file) : m_file(
file){};
298 void pragmaLibrary()
override { m_file.initPragmaLibrary(); };
299 void importFile(
const QString &jsfile,
const QString &module,
int,
int)
override
301 m_file.addFileImport(jsfile, module);
306 m_file.addModuleImport(uri, version, module);
314 std::shared_ptr<QQmlJS::Engine> m_engine;
315 std::optional<LegacyPragmaLibrary> m_pragmaLibrary = std::nullopt;
316 QList<LegacyImport> m_imports;
317 std::shared_ptr<ScriptExpression> m_script;
319 FileLocations::Tree m_fileLocationsTree;
325 std::shared_ptr<OwningItem> doCopy(
const DomItem &self)
const override;
328 constexpr static DomType kindValue = DomType::QmlFile;
335 int derivedFrom = 0, RecoveryOption
option = DisableParserRecovery);
342 return std::static_pointer_cast<QmlFile>(doCopy(self));
348 return lazyMembers().m_components;
371 return lazyMembers().m_imports;
373 void setImports(
const QList<Import> &imports) { lazyMembers().m_imports = imports; }
379 if (
i.uri.isModule()) {
380 members.m_importScope.addImport((
i.importId.isEmpty()
382 :
i.importId.split(QChar::fromLatin1(
'.'))),
385 QString path =
i.uri.absoluteLocalPath(canonicalFilePath());
387 members.m_importScope.addImport(
389 :
i.importId.split(QChar::fromLatin1(
'.'))),
390 Paths::qmlDirPath(
path));
392 return Path::Field(Fields::imports).index(idx);
394 std::shared_ptr<QQmlJS::Engine>
engine()
const {
return m_engine; }
396 std::shared_ptr<AstComments>
astComments()
const {
return lazyMembers().m_astComments; }
397 void setAstComments(
const std::shared_ptr<AstComments> &comm) { lazyMembers().m_astComments = comm; }
400 const QList<Pragma> &
pragmas() const & {
return lazyMembers().m_pragmas; }
401 void setPragmas(QList<Pragma> pragmas) { lazyMembers().m_pragmas = pragmas; }
405 int idx =
members.m_pragmas.size();
406 members.m_pragmas.append(pragma);
407 return Path::Field(Fields::pragmas).index(idx);
414 return lazyMembers().m_typeResolver;
420 members.m_typeResolver = typeResolver;
421 members.m_typeResolverDependencies = dependencies;
424 DomCreationOptions
creationOptions()
const {
return lazyMembers().m_creationOptions; }
428 m_handleForPopulation = scope;
437 : m_fileLocationsTree(fileLocationsTree), m_astComments(astComments)
440 RegionComments m_comments;
441 QMultiMap<QString, QmlComponent> m_components;
442 QList<Pragma> m_pragmas;
443 QList<Import> m_imports;
444 ImportScope m_importScope;
445 FileLocations::Tree m_fileLocationsTree;
446 std::shared_ptr<AstComments> m_astComments;
447 DomCreationOptions m_creationOptions;
448 std::shared_ptr<QQmlJSTypeResolver> m_typeResolver;
453 std::shared_ptr<Engine> m_engine;
455 mutable std::optional<QmlFileLazy> m_lazyMembers;
457 void ensurePopulated()
const
465 if (m_handleForPopulation.
factory()) {
470 const QmlFileLazy &lazyMembers()
const
473 return *m_lazyMembers;
475 QmlFileLazy &lazyMembers()
478 return *m_lazyMembers;
487 auto res = std::make_shared<QmltypesFile>(*
this);
492 constexpr static DomType kindValue = DomType::QmltypesFile;
506 void ensureInModuleIndex(
const DomItem &self)
const;
511 return std::static_pointer_cast<QmltypesFile>(doCopy(self));
518 const QList<Import> &
imports() const & {
return m_imports; }
519 const QMultiMap<QString, QmltypesComponent> &
components() const & {
return m_components; }
520 void setComponents(QMultiMap<QString, QmltypesComponent>
c) { m_components = std::move(
c); }
524 for (
const Export &e : comp.exports())
527 comp.name(), comp,
option, cPtr);
529 const QMultiMap<QString, Export> &
exports() const & {
return m_exports; }
530 void setExports(QMultiMap<QString, Export> e) { m_exports = e; }
539 const QMap<QString, QSet<int>> &
uris() const & {
return m_uris; }
542 QSet<int> &
v = m_uris[uri];
543 if (!
v.contains(majorVersion)) {
544 v.insert(majorVersion);
549 QList<Import> m_imports;
550 QMultiMap<QString, QmltypesComponent> m_components;
551 QMultiMap<QString, Export> m_exports;
552 QMap<QString, QSet<int>> m_uris;
558 std::shared_ptr<OwningItem> doCopy(
const DomItem &)
const override;
561 constexpr static DomType kindValue = DomType::GlobalScope;
577 return std::static_pointer_cast<GlobalScope>(doCopy(self));
586 m_rootComponent = ob;
587 m_rootComponent.updatePathFromOwner(Path::Field(Fields::rootComponent));
\inmodule QtCore\reentrant
static QDateTime fromMSecsSinceEpoch(qint64 msecs, const QTimeZone &timeZone)
Factory * factory() const
Represents a set of tags grouping a set of related error messages.
Represents an error message connected to the dom.
A OwningItem that refers to an external resource (file,...)
const QString & code() const
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
QString m_canonicalFilePath
void setIsValid(bool val)
bool iterateSubOwners(const DomItem &self, function_ref< bool(const DomItem &owner)> visitor) override
ExternalOwningItem(const ExternalOwningItem &o)=default
std::shared_ptr< AttachedInfoT< FileLocations > > Tree
void setLanguage(Language language)
void setName(const QString &name)
Language language() const
void setRootComponent(const GlobalComponent &ob)
DomType kind() const override
std::shared_ptr< GlobalScope > makeCopy(const DomItem &self) const
GlobalComponent rootComponent() const
GlobalScope(const QString &filePath=QString(), const QDateTime &lastDataUpdateAt=QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC), int derivedFrom=0)
DomType kind() const override
std::shared_ptr< OwningItem > doCopy(const DomItem &) const override
void setFileLocationsTree(const FileLocations::Tree &v)
std::shared_ptr< JsFile > makeCopy(const DomItem &self) const
JsFile(const JsFile &o)=default
JsResource rootComponent() const
void setExpression(const std::shared_ptr< ScriptExpression > &script)
std::shared_ptr< QQmlJS::Engine > engine() const
JsFile(const QString &filePath=QString(), const QDateTime &lastDataUpdateAt=QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC), const Path &pathFromTop=Path(), int derivedFrom=0)
DomType kind() const override
const QMultiMap< QString, QString > & qmlFiles() const &
const QMultiMap< QString, Export > & exports() const &
QmlDirectory(const QmlDirectory &o)=default
std::shared_ptr< OwningItem > doCopy(const DomItem &) const override
std::shared_ptr< QmlDirectory > makeCopy(const DomItem &self) const
A QmlFile, when loaded in a DomEnvironment that has the DomCreationOption::WithSemanticAnalysis,...
void setTypeResolverWithDependencies(const std::shared_ptr< QQmlJSTypeResolver > &typeResolver, const QQmlJSTypeResolverDependencies &dependencies)
const QMultiMap< QString, QmlComponent > & components() const &
std::shared_ptr< QQmlJS::Engine > engine() const
std::shared_ptr< AstComments > astComments() const
std::shared_ptr< QmlFile > makeCopy(const DomItem &self) const
Path addImport(const Import &i)
void setAstComments(const std::shared_ptr< AstComments > &comm)
void setComponents(const QMultiMap< QString, QmlComponent > &components)
ImportScope & importScope()
const QList< Import > & imports() const &
std::shared_ptr< QQmlJSTypeResolver > typeResolver() const
DomCreationOptions creationOptions() const
const QList< Pragma > & pragmas() const &
void setImports(const QList< Import > &imports)
AST::UiProgram * ast() const
void setFileLocationsTree(const FileLocations::Tree &v)
RegionComments & comments()
DomType kind() const override
Path addPragma(const Pragma &pragma)
Path addComponent(const QmlComponent &component, AddOption option=AddOption::Overwrite, QmlComponent **cPtr=nullptr)
void setHandleForPopulation(const QQmlJSScope::ConstPtr &scope)
const ImportScope & importScope() const
void setPragmas(QList< Pragma > pragmas)
FileLocations::Tree fileLocationsTree() const
const QSet< int > & majorVersions() const &
const QList< Import > & imports() const &
DomType kind() const override
std::shared_ptr< OwningItem > doCopy(const DomItem &) const override
QmldirFile(const QmldirFile &o)=default
QStringList classNames() const
bool designerSupported() const
std::shared_ptr< QmldirFile > makeCopy(const DomItem &self) const
const QMultiMap< QString, Export > & exports() const &
const QList< Path > & qmltypesFilePaths() const &
QmldirFile(const QString &filePath=QString(), const QString &code=QString(), const QDateTime &lastDataUpdateAt=QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC), int derivedFrom=0)
std::shared_ptr< OwningItem > doCopy(const DomItem &) const override
void addUri(const QString &uri, int majorVersion)
DomType kind() const override
QmltypesFile(const QmltypesFile &o)=default
const QList< Import > & imports() const &
const QMultiMap< QString, QmltypesComponent > & components() const &
void setExports(QMultiMap< QString, Export > e)
void setComponents(QMultiMap< QString, QmltypesComponent > c)
Path addComponent(const QmltypesComponent &comp, AddOption option=AddOption::Overwrite, QmltypesComponent **cPtr=nullptr)
QmltypesFile(const QString &filePath=QString(), const QString &code=QString(), const QDateTime &lastDataUpdateAt=QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC), int derivedFrom=0)
std::shared_ptr< QmltypesFile > makeCopy(const DomItem &self) const
const QMultiMap< QString, Export > & exports() const &
const QMap< QString, QSet< int > > & uris() const &
Path addExport(const Export &e)
void addImport(const Import i)
\macro QT_RESTRICTED_CAST_FROM_ASCII
QString mid(qsizetype position, qsizetype n=-1) const &
bool isNull() const
Returns true if this string is null; otherwise returns false.
Path insertUpdatableElementInMultiMap(const Path &mapPathFromOwner, QMultiMap< K, T > &mmap, K key, const T &value, AddOption option=AddOption::KeepExisting, T **valuePtr=nullptr)
Combined button and popup list for selecting options.
static jboolean copy(JNIEnv *, jobject)
QList< QString > QStringList
Constructs a string list that contains the given string, str.
#define Q_DECLARE_TR_FUNCTIONS(context)
GLsizei const GLfloat * v
[13]
GLint GLenum GLint components
GLsizei const GLchar *const * path
static qreal component(const QPointF &point, unsigned int i)
Members members(const Members &candidates, QTypeRevision maxMajorVersion, Postprocess &&process)
static QString canonicalPath(const QString &rootPath)