diff options
Diffstat (limited to 'src/qmltyperegistrar/qqmltypesclassdescription_p.h')
-rw-r--r-- | src/qmltyperegistrar/qqmltypesclassdescription_p.h | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/src/qmltyperegistrar/qqmltypesclassdescription_p.h b/src/qmltyperegistrar/qqmltypesclassdescription_p.h new file mode 100644 index 0000000000..60aafb948f --- /dev/null +++ b/src/qmltyperegistrar/qqmltypesclassdescription_p.h @@ -0,0 +1,125 @@ +// Copyright (C) 2019 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#ifndef QMLTYPESCLASSDESCRIPTION_P_H +#define QMLTYPESCLASSDESCRIPTION_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <private/qmetatypesjsonprocessor_p.h> + +#include <QtCore/qstring.h> +#include <QtCore/qcbormap.h> +#include <QtCore/qvector.h> +#include <QtCore/qset.h> +#include <QtCore/qversionnumber.h> + +QT_BEGIN_NAMESPACE + +struct FoundType +{ + enum Origin { + Unknown, + OwnTypes, + ForeignTypes, + }; + + FoundType() = default; + FoundType(const MetaType &single, Origin origin); + + MetaType native; + MetaType javaScript; + + Origin nativeOrigin = Unknown; + Origin javaScriptOrigin = Unknown; + + operator bool() const { return !native.isEmpty() || !javaScript.isEmpty(); } + + MetaType select(const MetaType &category, QAnyStringView relation) const; + +}; + +struct QmlTypesClassDescription +{ + // All the string views in this class are based on string data in the JSON they are parsed from. + // You must keep the relevant QCborValues alive while the QmlTypesClassDescription exists. + + MetaType resolvedClass; + QAnyStringView file; + QAnyStringView className; + QList<QAnyStringView> primitiveAliases; + QList<QAnyStringView> elementNames; + QAnyStringView defaultProp; + QAnyStringView parentProp; + QAnyStringView superClass; + QAnyStringView attachedType; + QAnyStringView javaScriptExtensionType; + QAnyStringView nativeExtensionType; + QAnyStringView sequenceValueType; + QAnyStringView accessSemantics; + QList<QTypeRevision> revisions; + QTypeRevision addedInRevision; + QTypeRevision removedInRevision; + bool isCreatable = true; + bool isStructured = false; + bool isSingleton = false; + bool hasCustomParser = false; + bool isRootClass = false; + bool extensionIsJavaScript = false; + bool extensionIsNamespace = false; + bool registerEnumClassesScoped = false; + QList<QAnyStringView> implementsInterfaces; + QList<QAnyStringView> deferredNames; + QList<QAnyStringView> immediateNames; + + enum CollectMode { + TopLevel, + SuperClass, + RelatedType + }; + + void collect( + const MetaType &classDef, const QVector<MetaType> &types, + const QVector<MetaType> &foreign, CollectMode mode, QTypeRevision defaultRevision); + FoundType collectRelated( + QAnyStringView related, const QVector<MetaType> &types, + const QVector<MetaType> &foreign, QTypeRevision defaultRevision, + const QList<QAnyStringView> &namespaces); + + static FoundType findType( + const QVector<MetaType> &types, const QVector<MetaType> &foreign, + const QAnyStringView &name, const QList<QAnyStringView> &namespaces); + + void collectLocalAnonymous( + const MetaType &classDef, const QVector<MetaType> &types, + const QVector<MetaType> &foreign, QTypeRevision defaultRevision); + + +private: + void collectSuperClasses( + const MetaType &classDef, const QVector<MetaType> &types, + const QVector<MetaType> &foreign, CollectMode mode, QTypeRevision defaultRevision); + void collectInterfaces(const MetaType &classDef); +}; + +struct ResolvedTypeAlias +{ + ResolvedTypeAlias(QAnyStringView alias); + + QAnyStringView type; + bool isList = false; + bool isPointer = false; + bool isConstant = false; +}; + +QT_END_NAMESPACE +#endif // QMLTYPESCLASSDESCRIPTION_P_H |