aboutsummaryrefslogtreecommitdiffstats
path: root/src/qmlcompiler/qqmljsmetatypes_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/qmlcompiler/qqmljsmetatypes_p.h')
-rw-r--r--src/qmlcompiler/qqmljsmetatypes_p.h200
1 files changed, 200 insertions, 0 deletions
diff --git a/src/qmlcompiler/qqmljsmetatypes_p.h b/src/qmlcompiler/qqmljsmetatypes_p.h
new file mode 100644
index 0000000000..fdd93ed71a
--- /dev/null
+++ b/src/qmlcompiler/qqmljsmetatypes_p.h
@@ -0,0 +1,200 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $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$
+**
+****************************************************************************/
+
+#ifndef QQMLJSMETATYPES_P_H
+#define QQMLJSMETATYPES_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 <QtCore/qstring.h>
+#include <QtCore/qstringlist.h>
+#include <QtCore/qsharedpointer.h>
+
+// MetaMethod and MetaProperty have both type names and actual QQmlJSScope types.
+// When parsing the information from the relevant QML or qmltypes files, we only
+// see the names and don't have a complete picture of the types, yet. In a second
+// pass we typically fill in the types. The types may have multiple exported names
+// and the the name property of MetaProperty and MetaMethod still carries some
+// significance regarding which name was chosen to refer to the type. In a third
+// pass we may further specify the type if the context provides additional information.
+// The parent of an Item, for example, is typically not just a QtObject, but rather
+// some other Item with custom properties.
+
+class QQmlJSScope;
+class QQmlJSMetaEnum
+{
+ QStringList m_keys;
+ QString m_name;
+ QString m_alias;
+ bool m_isFlag = false;
+
+public:
+ QQmlJSMetaEnum() = default;
+ explicit QQmlJSMetaEnum(QString name) : m_name(std::move(name)) {}
+
+ bool isValid() const { return !m_name.isEmpty(); }
+
+ QString name() const { return m_name; }
+ void setName(const QString &name) { m_name = name; }
+
+ QString alias() const { return m_alias; }
+ void setAlias(const QString &alias) { m_alias = alias; }
+
+ bool isFlag() const { return m_isFlag; }
+ void setIsFlag(bool isFlag) { m_isFlag = isFlag; }
+
+ void addKey(const QString &key) { m_keys.append(key); }
+ QStringList keys() const { return m_keys; }
+};
+
+class QQmlJSMetaMethod
+{
+public:
+ enum Type {
+ Signal,
+ Slot,
+ Method
+ };
+
+ enum Access {
+ Private,
+ Protected,
+ Public
+ };
+
+ QQmlJSMetaMethod() = default;
+ explicit QQmlJSMetaMethod(QString name, QString returnType = QString())
+ : m_name(std::move(name))
+ , m_returnTypeName(std::move(returnType))
+ , m_methodType(Method)
+ , m_methodAccess(Public)
+ {}
+
+ QString methodName() const { return m_name; }
+ void setMethodName(const QString &name) { m_name = name; }
+
+ QString returnTypeName() const { return m_returnTypeName; }
+ QSharedPointer<const QQmlJSScope> returnType() const { return m_returnType.toStrongRef(); }
+ void setReturnTypeName(const QString &type) { m_returnTypeName = type; }
+ void setReturnType(const QSharedPointer<const QQmlJSScope> &type)
+ {
+ m_returnType = type;
+ }
+
+ QStringList parameterNames() const { return m_paramNames; }
+ QStringList parameterTypeNames() const { return m_paramTypeNames; }
+ QList<QSharedPointer<const QQmlJSScope>> parameterTypes() const
+ {
+ QList<QSharedPointer<const QQmlJSScope>> result;
+ for (const auto &type : m_paramTypes)
+ result.append(type.toStrongRef());
+ return result;
+ }
+ void setParameterTypes(const QList<QSharedPointer<const QQmlJSScope>> &types)
+ {
+ Q_ASSERT(types.length() == m_paramNames.length());
+ m_paramTypes.clear();
+ for (const auto &type : types)
+ m_paramTypes.append(type);
+ }
+ void addParameter(const QString &name, const QString &typeName,
+ const QSharedPointer<const QQmlJSScope> &type = {})
+ {
+ m_paramNames.append(name);
+ m_paramTypeNames.append(typeName);
+ m_paramTypes.append(type);
+ }
+
+ int methodType() const { return m_methodType; }
+ void setMethodType(Type methodType) { m_methodType = methodType; }
+
+ Access access() const { return m_methodAccess; }
+
+ int revision() const { return m_revision; }
+ void setRevision(int r) { m_revision = r; }
+
+private:
+ QString m_name;
+ QString m_returnTypeName;
+ QWeakPointer<const QQmlJSScope> m_returnType;
+
+ QStringList m_paramNames;
+ QStringList m_paramTypeNames;
+ QList<QWeakPointer<const QQmlJSScope>> m_paramTypes;
+
+ Type m_methodType = Signal;
+ Access m_methodAccess = Private;
+ int m_revision = 0;
+};
+
+class QQmlJSMetaProperty
+{
+ QString m_propertyName;
+ QString m_typeName;
+ QWeakPointer<const QQmlJSScope> m_type;
+ bool m_isList;
+ bool m_isWritable;
+ bool m_isPointer;
+ bool m_isAlias;
+ int m_revision;
+
+public:
+ QQmlJSMetaProperty(QString propertyName, QString typeName,
+ bool isList, bool isWritable, bool isPointer, bool isAlias,
+ int revision)
+ : m_propertyName(std::move(propertyName))
+ , m_typeName(std::move(typeName))
+ , m_isList(isList)
+ , m_isWritable(isWritable)
+ , m_isPointer(isPointer)
+ , m_isAlias(isAlias)
+ , m_revision(revision)
+ {}
+
+ QString propertyName() const { return m_propertyName; }
+ QString typeName() const { return m_typeName; }
+
+ void setType(const QSharedPointer<const QQmlJSScope> &type) { m_type = type; }
+ QSharedPointer<const QQmlJSScope> type() const { return m_type.toStrongRef(); }
+
+ bool isList() const { return m_isList; }
+ bool isWritable() const { return m_isWritable; }
+ bool isPointer() const { return m_isPointer; }
+ bool isAlias() const { return m_isAlias; }
+ int revision() const { return m_revision; }
+};
+
+#endif // QQMLJSMETATYPES_P_H