diff options
Diffstat (limited to 'src/qdoc/qdoc/src/qdoc/propertynode.h')
-rw-r--r-- | src/qdoc/qdoc/src/qdoc/propertynode.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/qdoc/qdoc/src/qdoc/propertynode.h b/src/qdoc/qdoc/src/qdoc/propertynode.h new file mode 100644 index 000000000..9ae59932b --- /dev/null +++ b/src/qdoc/qdoc/src/qdoc/propertynode.h @@ -0,0 +1,93 @@ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#ifndef PROPERTYNODE_H +#define PROPERTYNODE_H + +#include "functionnode.h" +#include "node.h" + +#include <QtCore/qglobal.h> +#include <QtCore/qstring.h> + +QT_BEGIN_NAMESPACE + +class Aggregate; + +class PropertyNode : public Node +{ +public: + enum class PropertyType { StandardProperty, BindableProperty }; + enum class FunctionRole { Getter, Setter, Resetter, Notifier, Bindable, NumFunctionRoles }; + static QString roleName(FunctionRole role); + + PropertyNode(Aggregate *parent, const QString &name); + + void setDataType(const QString &dataType) override { m_type = dataType; } + void addFunction(FunctionNode *function, FunctionRole role); + void addSignal(FunctionNode *function, FunctionRole role); + void setStored(bool stored) { m_stored = toFlagValue(stored); } + void setWritable(bool writable) { m_writable = toFlagValue(writable); } + void setOverriddenFrom(const PropertyNode *baseProperty); + void setConstant() { m_const = true; } + void setRequired() { m_required = true; } + void setPropertyType(PropertyType type) { m_propertyType = type; } + + [[nodiscard]] const QString &dataType() const { return m_type; } + [[nodiscard]] QString qualifiedDataType() const; + [[nodiscard]] NodeList functions() const; + [[nodiscard]] const NodeList &functions(FunctionRole role) const + { + return m_functions[(int)role]; + } + [[nodiscard]] const NodeList &getters() const { return functions(FunctionRole::Getter); } + [[nodiscard]] const NodeList &setters() const { return functions(FunctionRole::Setter); } + [[nodiscard]] const NodeList &resetters() const { return functions(FunctionRole::Resetter); } + [[nodiscard]] const NodeList ¬ifiers() const { return functions(FunctionRole::Notifier); } + [[nodiscard]] bool hasAccessFunction(const QString &name) const; + FunctionRole role(const FunctionNode *functionNode) const; + [[nodiscard]] bool isStored() const { return fromFlagValue(m_stored, storedDefault()); } + [[nodiscard]] bool isWritable() const { return fromFlagValue(m_writable, writableDefault()); } + [[nodiscard]] bool isConstant() const { return m_const; } + [[nodiscard]] bool isRequired() const { return m_required; } + [[nodiscard]] PropertyType propertyType() const { return m_propertyType; } + [[nodiscard]] const PropertyNode *overriddenFrom() const { return m_overrides; } + + [[nodiscard]] bool storedDefault() const { return true; } + [[nodiscard]] bool writableDefault() const { return !setters().isEmpty(); } + +private: + QString m_type {}; + PropertyType m_propertyType { PropertyType::StandardProperty }; + NodeList m_functions[(qsizetype)FunctionRole::NumFunctionRoles] {}; + FlagValue m_stored { FlagValueDefault }; + FlagValue m_writable { FlagValueDefault }; + FlagValue m_user { FlagValueDefault }; + bool m_const { false }; + bool m_required { false }; + const PropertyNode *m_overrides { nullptr }; +}; + +inline void PropertyNode::addFunction(FunctionNode *function, FunctionRole role) +{ + m_functions[(int)role].append(function); + function->addAssociatedProperty(this); +} + +inline void PropertyNode::addSignal(FunctionNode *function, FunctionRole role) +{ + m_functions[(int)role].append(function); + function->addAssociatedProperty(this); +} + +inline NodeList PropertyNode::functions() const +{ + NodeList list; + for (qsizetype i{0}; i < (qsizetype)FunctionRole::NumFunctionRoles; ++i) + list += m_functions[i]; + return list; +} + +QT_END_NAMESPACE + +#endif // PROPERTYNODE_H |