5#ifndef QQMLDIRPARSER_P_H
6#define QQMLDIRPARSER_P_H
20#include <QtCore/QHash>
21#include <QtCore/QDebug>
22#include <QtCore/QTypeRevision>
23#include <private/qtqmlcompilerglobal_p.h>
24#include <private/qqmljsdiagnosticmessage_p.h>
33 bool parse(
const QString &source);
34 void disambiguateFileSelectors();
36 bool hasError()
const {
return !_errors.isEmpty(); }
37 void setError(
const QQmlJS::DiagnosticMessage &);
38 QList<QQmlJS::DiagnosticMessage> errors(
const QString &uri)
const;
40 bool hasTypeNamespace()
const {
return !_typeNamespace.isEmpty(); }
41 QString typeNamespace()
const {
return _typeNamespace; }
42 void setTypeNamespace(
const QString &s) { _typeNamespace = s; }
44 static void checkNonRelative(
const char *item,
const QString &typeName,
const QString &fileName)
46 if (fileName.startsWith(QLatin1Char(
'/'))) {
47 qWarning() << item << typeName
48 <<
"is specified with non-relative URL" << fileName <<
"in a qmldir file."
49 <<
"URLs in qmldir files should be relative to the qmldir file's directory.";
57 Plugin(
const QString &name,
const QString &path,
bool optional)
58 : name(name), path(path), optional(optional)
60 checkNonRelative(
"Plugin", name, path);
65 bool optional =
false;
70 Component() =
default;
72 Component(
const QString &typeName,
const QString &fileName, QTypeRevision version)
73 : typeName(typeName), fileName(fileName), version(version),
74 internal(
false), singleton(
false)
76 checkNonRelative(
"Component", typeName, fileName);
81 QTypeRevision version = QTypeRevision::zero();
82 bool internal =
false;
83 bool singleton =
false;
90 Script(
const QString &nameSpace,
const QString &fileName, QTypeRevision version)
91 : nameSpace(nameSpace), fileName(fileName), version(version)
93 checkNonRelative(
"Script", nameSpace, fileName);
98 QTypeRevision version = QTypeRevision::zero();
110 Q_DECLARE_FLAGS(Flags, Flag)
113 Import(QString module, QTypeRevision version, Flags flags)
114 : module(module), version(version), flags(flags)
119 QTypeRevision version;
122 friend bool operator==(
const Import &a,
const Import &b)
124 return a.module == b.module && a.version == b.version && a.flags == b.flags;
128 QMultiHash<QString,Component> components()
const {
return _components; }
129 QList<Import> dependencies()
const {
return _dependencies; }
130 QList<Import> imports()
const {
return _imports; }
131 QList<Script> scripts()
const {
return _scripts; }
132 QList<Plugin> plugins()
const {
return _plugins; }
133 bool designerSupported()
const {
return _designerSupported; }
137 bool isStaticModule()
const {
return _isStaticModule; }
140 bool isSystemModule()
const {
return _isSystemModule; }
142 QStringList typeInfos()
const {
return _typeInfos; }
143 QStringList classNames()
const {
return _classNames; }
144 QString preferredPath()
const {
return _preferredPath; }
145 QString linkTarget()
const {
return _linkTarget; }
148 bool maybeAddComponent(
const QString &typeName,
const QString &fileName,
const QString &version, QHash<QString,Component> &hash,
int lineNumber = -1,
bool multi =
true);
149 void reportError(quint16 line, quint16 column,
const QString &message);
150 QString scanQuotedWord(
const QChar *&ch, quint16 lineNumber, quint16 columnNumber);
151 void insertComponentOrScript(
152 const QString &name,
const QString &fileName, QTypeRevision version);
155 QList<QQmlJS::DiagnosticMessage> _errors;
156 QString _typeNamespace;
157 QString _preferredPath;
158 QMultiHash<QString,Component> _components;
159 QList<Import> _dependencies;
160 QList<Import> _imports;
161 QList<Script> _scripts;
162 QList<Plugin> _plugins;
163 bool _designerSupported =
false;
164 bool _isStaticModule =
false;
165 bool _isSystemModule =
false;
166 QStringList _typeInfos;
167 QStringList _classNames;
171using QQmlDirComponents = QMultiHash<QString,QQmlDirParser::Component>;
172using QQmlDirScripts = QList<QQmlDirParser::Script>;
173using QQmlDirPlugins = QList<QQmlDirParser::Plugin>;
174using QQmlDirImports = QList<QQmlDirParser::Import>;
Combined button and popup list for selecting options.
static void scanSpace(const QChar *&ch)
static void disambiguateFileSelectedScripts(QQmlDirScripts *scripts)
static QString scanWord(const QChar *&ch)
static QString pathWithoutFileSelectors(QString path, qsizetype firstPlus)
static void disambiguateFileSelectedComponents(QQmlDirComponents *components)
static void scanToEnd(const QChar *&ch)
static QTypeRevision parseVersion(const QString &str)
static bool canDisambiguate(const QString &fileName1, const QString &fileName2, QString *correctedFileName)
static QT_BEGIN_NAMESPACE int parseInt(QStringView str, bool *ok)
QDataStream & operator<<(QDataStream &stream, const QImage &image)
[0]