/**************************************************************************** ** ** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt for Python. ** ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "abstractmetafield.h" #include "abstractmetalang.h" #include "abstractmetatype.h" #include "documentation.h" #include "modifications.h" #include "typesystem.h" #include class AbstractMetaFieldData : public QSharedData { public: QString m_originalName; QString m_name; AbstractMetaType m_type; bool m_hasName = false; Documentation m_doc; }; AbstractMetaField::AbstractMetaField() : d(new AbstractMetaFieldData) { } AbstractMetaField::AbstractMetaField(const AbstractMetaField &) = default; AbstractMetaField &AbstractMetaField::operator=(const AbstractMetaField &) = default; AbstractMetaField::AbstractMetaField(AbstractMetaField &&) = default; AbstractMetaField &AbstractMetaField::operator=(AbstractMetaField &&) = default; AbstractMetaField::~AbstractMetaField() = default; // returned->setEnclosingClass(nullptr); std::optional AbstractMetaField::find(const AbstractMetaFieldList &haystack, const QString &needle) { for (const auto &f : haystack) { if (f.name() == needle) return f; } return {}; } /******************************************************************************* * Indicates that this field has a modification that removes it */ bool AbstractMetaField::isModifiedRemoved(int types) const { const FieldModificationList &mods = modifications(); for (const FieldModification &mod : mods) { if (!mod.isRemoveModifier()) continue; if ((mod.removal() & types) == types) return true; } return false; } const AbstractMetaType &AbstractMetaField::type() const { return d->m_type; } void AbstractMetaField::setType(const AbstractMetaType &type) { if (d->m_type != type) d->m_type = type; } QString AbstractMetaField::name() const { return d->m_name; } void AbstractMetaField::setName(const QString &name, bool realName) { if (d->m_name != name || d->m_hasName != realName) { d->m_name = name; d->m_hasName = realName; } } bool AbstractMetaField::hasName() const { return d->m_hasName; } QString AbstractMetaField::qualifiedCppName() const { return enclosingClass()->qualifiedCppName() + QLatin1String("::") + d->m_name; } QString AbstractMetaField::originalName() const { return d->m_originalName; } void AbstractMetaField::setOriginalName(const QString &name) { if (d->m_originalName != name) d->m_originalName = name; } const Documentation &AbstractMetaField::documentation() const { return d->m_doc; } void AbstractMetaField::setDocumentation(const Documentation &doc) { if (d->m_doc != doc) d->m_doc = doc; } FieldModificationList AbstractMetaField::modifications() const { const FieldModificationList &mods = enclosingClass()->typeEntry()->fieldModifications(); FieldModificationList returned; for (const FieldModification &mod : mods) { if (mod.name == name()) returned += mod; } return returned; } #ifndef QT_NO_DEBUG_STREAM void AbstractMetaField::formatDebug(QDebug &d) const { AbstractMetaAttributes::formatMetaAttributes(d, attributes()); d << ' ' << type().name() << " \"" << name() << '"'; } QDebug operator<<(QDebug d, const AbstractMetaField *af) { QDebugStateSaver saver(d); d.noquote(); d.nospace(); d << "AbstractMetaField("; if (af) af->formatDebug(d); else d << '0'; d << ')'; return d; } QDebug operator<<(QDebug d, const AbstractMetaField &af) { QDebugStateSaver saver(d); d.noquote(); d.nospace(); d << "AbstractMetaField("; af.formatDebug(d); d << ')'; return d; } #endif // !QT_NO_DEBUG_STREAM