1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4#ifndef QQMLJSLINTERCODEGEN_P_H
5#define QQMLJSLINTERCODEGEN_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16
17#include <QString>
18#include <QFile>
19#include <QList>
20
21#include <variant>
22#include <private/qqmljsdiagnosticmessage_p.h>
23#include <private/qqmlirbuilder_p.h>
24#include <private/qqmljsscope_p.h>
25#include <private/qqmljscompiler_p.h>
26
27#include <QtQmlCompiler/private/qqmljstyperesolver_p.h>
28#include <QtQmlCompiler/private/qqmljslogger_p.h>
29#include <QtQmlCompiler/private/qqmljscompilepass_p.h>
30#include <QtQmlCompiler/private/qqmljscontextproperties_p.h>
31
32QT_BEGIN_NAMESPACE
33
34namespace QQmlSA {
35class PassManager;
36};
37
38class QQmlJSLinterCodegen : public QQmlJSAotCompiler
39{
40public:
41 QQmlJSLinterCodegen(QQmlJSImporter *importer, const QString &fileName,
42 const QStringList &qmldirFiles, QQmlJSLogger *logger,
43 const QQmlJS::ContextProperties &knownContextProperties);
44
45 void setDocument(const QmlIR::JSCodeGen *codegen, const QmlIR::Document *document) override;
46 std::variant<QQmlJSAotFunction, QList<QQmlJS::DiagnosticMessage>>
47 compileBinding(const QV4::Compiler::Context *context, const QmlIR::Binding &irBinding,
48 QQmlJS::AST::Node *astNode) override;
49 std::variant<QQmlJSAotFunction, QList<QQmlJS::DiagnosticMessage>>
50 compileFunction(const QV4::Compiler::Context *context, const QString &name,
51 QQmlJS::AST::Node *astNode) override;
52
53 void setTypeResolver(QQmlJSTypeResolver typeResolver)
54 {
55 m_typeResolver = std::move(typeResolver);
56 }
57
58 QQmlJSTypeResolver *typeResolver() { return &m_typeResolver; }
59
60 void setPassManager(QQmlSA::PassManager *passManager);
61
62 QQmlSA::PassManager *passManager() { return m_passManager; }
63
64private:
65 QQmlSA::PassManager *m_passManager = nullptr;
66
67 void analyzeFunction(const QV4::Compiler::Context *context,
68 QQmlJSCompilePass::Function *function);
69 QQmlJS::ContextProperties m_knownContextProperties;
70};
71
72QT_END_NAMESPACE
73
74#endif
75

source code of qtdeclarative/src/qmlcompiler/qqmljslintercodegen_p.h