File indexing completed on 2024-05-19 04:41:21

0001 /*
0002     SPDX-FileCopyrightText: 2019 Daniel Mensinger <daniel@mensinger-ka.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "mesonactionbase.h"
0010 
0011 class MesonKWARGSModify;
0012 class MesonKWARGSProjectModify;
0013 class MesonKWARGSTargetModify;
0014 class MesonKWARGSDependencyModify;
0015 
0016 using MesonKWARGSModifyPtr = std::shared_ptr<MesonKWARGSModify>;
0017 using MesonKWARGSProjectModifyPtr = std::shared_ptr<MesonKWARGSProjectModify>;
0018 using MesonKWARGSTargetModifyPtr = std::shared_ptr<MesonKWARGSTargetModify>;
0019 using MesonKWARGSDependencyModifyPtr = std::shared_ptr<MesonKWARGSDependencyModify>;
0020 
0021 class MesonKWARGSModify : public MesonRewriterActionBase
0022 {
0023 public:
0024     enum Function { PROJECT, TARGET, DEPENDENCY };
0025     enum Operation { SET, DELETE };
0026 
0027 public:
0028     explicit MesonKWARGSModify(Function fn, Operation op, const QString& id);
0029     virtual ~MesonKWARGSModify();
0030 
0031     QJsonObject command() override;
0032 
0033     Function function() const;
0034     Operation operation() const;
0035     QString id() const;
0036 
0037     void set(const QString& kwarg, const QJsonValue& value);
0038     void unset(const QString& kwarg);
0039     void clear();
0040 
0041     bool isSet(const QString& kwarg);
0042 
0043 private:
0044     Function m_func;
0045     Operation m_op;
0046     QString m_id;
0047 
0048     QJsonObject m_kwargs = QJsonObject();
0049 };
0050 
0051 class MesonKWARGSProjectModify : public MesonKWARGSModify
0052 {
0053 public:
0054     explicit MesonKWARGSProjectModify(Operation op);
0055     virtual ~MesonKWARGSProjectModify();
0056 };
0057 
0058 class MesonKWARGSTargetModify : public MesonKWARGSModify
0059 {
0060 public:
0061     explicit MesonKWARGSTargetModify(Operation op, const QString& id);
0062     virtual ~MesonKWARGSTargetModify();
0063 };
0064 
0065 class MesonKWARGSDependencyModify : public MesonKWARGSModify
0066 {
0067 public:
0068     explicit MesonKWARGSDependencyModify(Operation op, const QString& id);
0069     virtual ~MesonKWARGSDependencyModify();
0070 };