Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qqmljstypereader.cpp
Go to the documentation of this file.
1// Copyright (C) 2020 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
6
7#include <QtQml/private/qqmljsast_p.h>
8#include <QtQml/private/qqmljsengine_p.h>
9#include <QtQml/private/qqmljslexer_p.h>
10#include <QtQml/private/qqmljsparser_p.h>
11#include <QtQml/private/qqmlimportresolver_p.h>
12
13#include <QtCore/qfileinfo.h>
14#include <QtCore/qdebug.h>
15
17
19{
20 using namespace QQmlJS::AST;
21 const QFileInfo info { m_file };
22 const QString baseName = info.baseName();
23 scope->setInternalName(baseName.endsWith(QStringLiteral(".ui")) ? baseName.chopped(3)
24 : baseName);
25
27 QQmlJS::Lexer lexer(&engine);
28
29 const QString lowerSuffix = info.suffix().toLower();
30 const bool isESModule = lowerSuffix == QLatin1String("mjs");
31 const bool isJavaScript = isESModule || lowerSuffix == QLatin1String("js");
32
33
34 QFile file(m_file);
36 return false;
37
39 file.close();
40
41 lexer.setCode(code, /*line = */ 1, /*qmlMode=*/ !isJavaScript);
42 QQmlJS::Parser parser(&engine);
43
44 const bool success = isJavaScript ? (isESModule ? parser.parseModule()
45 : parser.parseProgram())
46 : parser.parse();
47 if (!success)
48 return false;
49
50 QQmlJS::AST::Node *rootNode = parser.rootNode();
51 if (!rootNode)
52 return false;
53
54 QQmlJSLogger logger;
55 logger.setFileName(m_file);
56 logger.setCode(code);
57 logger.setSilent(true);
58
59 auto membersVisitor = m_importer->makeImportVisitor(
60 scope, m_importer, &logger,
62 rootNode->accept(membersVisitor.get());
63 return true;
64}
65
void close() override
Calls QFileDevice::flush() and closes the file.
\inmodule QtCore \reentrant
Definition qfileinfo.h:22
QString baseName() const
Returns the base name of the file without the path.
QString suffix() const
Returns the suffix (extension) of the file.
\inmodule QtCore
Definition qfile.h:93
bool open(OpenMode flags) override
Opens the file using OpenMode mode, returning true if successful; otherwise false.
Definition qfile.cpp:881
QByteArray readAll()
Reads all remaining data from the device, and returns it as a byte array.
static QString implicitImportDirectory(const QString &localFile, QQmlJSResourceFileMapper *mapper)
std::unique_ptr< QQmlJSImportVisitor > makeImportVisitor(const QQmlJSScope::Ptr &target, QQmlJSImporter *importer, QQmlJSLogger *logger, const QString &implicitImportDirectory, const QStringList &qmldirFiles=QStringList())
QQmlJSResourceFileMapper * resourceFileMapper() const
void setCode(const QString &code)
void setSilent(bool silent)
void setFileName(const QString &fileName)
bool operator()(const QSharedPointer< QQmlJSScope > &scope)
void accept(BaseVisitor *visitor)
void setCode(const QString &code, int lineno, bool qmlMode=true, CodeContinuation codeContinuation=CodeContinuation::Reset)
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:5857
bool endsWith(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Returns true if the string ends with s; otherwise returns false.
Definition qstring.cpp:5350
QString toLower() const &
Definition qstring.h:368
QString chopped(qsizetype n) const
Definition qstring.h:345
Combined button and popup list for selecting options.
QLatin1StringView QLatin1String
Definition qstringfwd.h:31
#define QStringLiteral(str)
QFile file
[0]
QFileInfo info(fileName)
[8]
QJSEngine engine
[0]