aboutsummaryrefslogtreecommitdiffstats
path: root/tools/shared/scopetree.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/shared/scopetree.h')
-rw-r--r--tools/shared/scopetree.h221
1 files changed, 0 insertions, 221 deletions
diff --git a/tools/shared/scopetree.h b/tools/shared/scopetree.h
deleted file mode 100644
index 1794b45373..0000000000
--- a/tools/shared/scopetree.h
+++ /dev/null
@@ -1,221 +0,0 @@
-/****************************************************************************
-**
-** 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 SCOPETREE_H
-#define SCOPETREE_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 "metatypes.h"
-
-#include <QtQml/private/qqmljssourcelocation_p.h>
-
-#include <QtCore/qset.h>
-#include <QtCore/qhash.h>
-#include <QtCore/qstring.h>
-#include <QtCore/qversionnumber.h>
-
-#include <optional>
-
-enum class ScopeType
-{
- JSFunctionScope,
- JSLexicalScope,
- QMLScope
-};
-
-struct JavaScriptIdentifier
-{
- enum Kind {
- Parameter,
- FunctionScoped,
- LexicalScoped,
- Injected
- };
-
- Kind kind = FunctionScoped;
- QQmlJS::SourceLocation location;
-};
-
-class ScopeTree
-{
- Q_DISABLE_COPY_MOVE(ScopeTree)
-public:
- using Ptr = QSharedPointer<ScopeTree>;
- using WeakPtr = QWeakPointer<ScopeTree>;
- using ConstPtr = QSharedPointer<const ScopeTree>;
- using WeakConstPtr = QWeakPointer<const ScopeTree>;
-
- enum class AccessSemantics {
- Reference,
- Value,
- None
- };
-
- enum Flag {
- Creatable = 0x1,
- Composite = 0x2,
- Singleton = 0x4
- };
- Q_DECLARE_FLAGS(Flags, Flag)
- Q_FLAGS(Flags);
-
- class Export {
- public:
- Export() = default;
- Export(QString package, QString type, const QTypeRevision &version,
- int metaObjectRevision);
-
- bool isValid() const;
-
- int metaObjectRevision() const { return m_metaObjectRevision; }
- void setMetaObjectRevision(int metaObjectRevision)
- {
- m_metaObjectRevision = metaObjectRevision;
- }
-
- QString package() const { return m_package; }
- QString type() const { return m_type; }
-
- private:
- QString m_package;
- QString m_type;
- QTypeRevision m_version;
- int m_metaObjectRevision = 0;
- };
-
- static ScopeTree::Ptr create(ScopeType type = ScopeType::QMLScope,
- const ScopeTree::Ptr &parentScope = ScopeTree::Ptr());
- static ScopeTree::ConstPtr findCurrentQMLScope(const ScopeTree::ConstPtr &scope);
-
- ScopeTree::Ptr parentScope() const { return m_parentScope.toStrongRef(); }
-
- void insertJSIdentifier(const QString &name, const JavaScriptIdentifier &identifier);
-
- // inserts property as qml identifier as well as the corresponding
- void insertPropertyIdentifier(const MetaProperty &prop);
-
- bool isIdInCurrentScope(const QString &id) const;
-
- ScopeType scopeType() const { return m_scopeType; }
-
- void addMethods(const QMultiHash<QString, MetaMethod> &methods) { m_methods.unite(methods); }
- void addMethod(const MetaMethod &method) { m_methods.insert(method.methodName(), method); }
- QMultiHash<QString, MetaMethod> methods() const { return m_methods; }
-
- void addEnum(const MetaEnum &fakeEnum) { m_enums.insert(fakeEnum.name(), fakeEnum); }
- QHash<QString, MetaEnum> enums() const { return m_enums; }
-
- QString fileName() const { return m_fileName; }
- void setFileName(const QString &file) { m_fileName = file; }
-
- // The name the type uses to refer to itself. Either C++ class name or base name of
- // QML file. isComposite tells us if this is a C++ or a QML name.
- QString internalName() const { return m_internalName; }
- void setInternalName(const QString &internalName) { m_internalName = internalName; }
-
- void addExport(const QString &name, const QString &package, const QTypeRevision &version);
- void setExportMetaObjectRevision(int exportIndex, int metaObjectRevision);
- QList<Export> exports() const { return m_exports; }
-
- // If isComposite(), this is the QML/JS name of the prototype. Otherwise it's the
- // relevant base class (in the hierarchy starting from QObject) of a C++ type.
- void setBaseTypeName(const QString &baseTypeName) { m_baseTypeName = baseTypeName; }
- QString baseTypeName() const { return m_baseTypeName; }
- ScopeTree::ConstPtr baseType() const { return m_baseType; }
-
- void addProperty(const MetaProperty &prop) { m_properties.insert(prop.propertyName(), prop); }
- QHash<QString, MetaProperty> properties() const { return m_properties; }
-
- QString defaultPropertyName() const { return m_defaultPropertyName; }
- void setDefaultPropertyName(const QString &name) { m_defaultPropertyName = name; }
-
- QString attachedTypeName() const { return m_attachedTypeName; }
- void setAttachedTypeName(const QString &name) { m_attachedTypeName = name; }
- ScopeTree::ConstPtr attachedType() const { return m_attachedType; }
-
- bool isSingleton() const { return m_flags & Singleton; }
- bool isCreatable() const { return m_flags & Creatable; }
- bool isComposite() const { return m_flags & Composite; }
- void setIsSingleton(bool v) { m_flags = v ? (m_flags | Singleton) : (m_flags & ~Singleton); }
- void setIsCreatable(bool v) { m_flags = v ? (m_flags | Creatable) : (m_flags & ~Creatable); }
- void setIsComposite(bool v) { m_flags = v ? (m_flags | Composite) : (m_flags & ~Composite); }
-
- void setAccessSemantics(AccessSemantics semantics) { m_semantics = semantics; }
- AccessSemantics accessSemantics() const { return m_semantics; }
-
- bool isIdInCurrentQMlScopes(const QString &id) const;
- bool isIdInCurrentJSScopes(const QString &id) const;
- bool isIdInjectedFromSignal(const QString &id) const;
-
- std::optional<JavaScriptIdentifier> findJSIdentifier(const QString &id) const;
-
- QVector<ScopeTree::Ptr> childScopes() const
- {
- return m_childScopes;
- }
-
- void resolveTypes(const QHash<QString, ConstPtr> &contextualTypes);
-
-private:
- ScopeTree(ScopeType type, const ScopeTree::Ptr &parentScope = ScopeTree::Ptr());
-
- QHash<QString, JavaScriptIdentifier> m_jsIdentifiers;
-
- QMultiHash<QString, MetaMethod> m_methods;
- QHash<QString, MetaProperty> m_properties;
- QHash<QString, MetaEnum> m_enums;
-
- QVector<ScopeTree::Ptr> m_childScopes;
- ScopeTree::WeakPtr m_parentScope;
-
- QString m_fileName;
- QString m_internalName;
- QString m_baseTypeName;
- ScopeTree::WeakConstPtr m_baseType;
-
- ScopeType m_scopeType = ScopeType::QMLScope;
- QList<Export> m_exports;
-
- QString m_defaultPropertyName;
- QString m_attachedTypeName;
- ScopeTree::WeakConstPtr m_attachedType;
-
- Flags m_flags;
- AccessSemantics m_semantics = AccessSemantics::Reference;
-};
-
-#endif // SCOPETREE_H