aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken6/ApiExtractor/modifications.h
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken6/ApiExtractor/modifications.h')
-rw-r--r--sources/shiboken6/ApiExtractor/modifications.h342
1 files changed, 342 insertions, 0 deletions
diff --git a/sources/shiboken6/ApiExtractor/modifications.h b/sources/shiboken6/ApiExtractor/modifications.h
new file mode 100644
index 000000000..27a38f1aa
--- /dev/null
+++ b/sources/shiboken6/ApiExtractor/modifications.h
@@ -0,0 +1,342 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef MODIFICATIONS_H
+#define MODIFICATIONS_H
+
+#include "typesystem_enums.h"
+#include "modifications_typedefs.h"
+
+#include <QtCore/QList>
+#include <QtCore/QSharedDataPointer>
+#include <QtCore/QString>
+
+class ArgumentModificationData;
+class CodeSnip;
+class FunctionModificationData;
+class ModificationData;
+class FieldModificationData;
+
+QT_BEGIN_NAMESPACE
+class QDebug;
+QT_END_NAMESPACE
+
+struct ReferenceCount
+{
+ enum Action { // 0x01 - 0xff
+ Add = 0x01,
+ AddAll = 0x02,
+ Remove = 0x04,
+ Set = 0x08,
+ Ignore = 0x10,
+
+ ActionsMask = 0xff,
+
+ Padding = 0xffffffff
+ };
+
+ QString varName;
+ Action action;
+};
+
+struct ArgumentOwner
+{
+ enum Action {
+ Invalid = 0x00,
+ Add = 0x01,
+ Remove = 0x02
+ };
+ enum {
+ InvalidIndex = -2,
+ ThisIndex = -1,
+ ReturnIndex = 0,
+ FirstArgumentIndex = 1
+ };
+
+ Action action = Invalid;
+ int index = InvalidIndex;
+};
+
+class ArgumentModification
+{
+public:
+ ArgumentModification();
+ explicit ArgumentModification(int idx);
+ ArgumentModification(const ArgumentModification &);
+ ArgumentModification &operator=(const ArgumentModification &);
+ ArgumentModification(ArgumentModification &&) noexcept;
+ ArgumentModification &operator=(ArgumentModification &&) noexcept;
+ ~ArgumentModification();
+
+ // Reference count flags for this argument
+ const QList<ReferenceCount> &referenceCounts() const;
+ void addReferenceCount(const ReferenceCount &value);
+
+ // The text given for the new type of the argument
+ const QString &modifiedType() const;
+ void setModifiedType(const QString &value);
+ bool isTypeModified() const;
+
+ QString pyiType() const;
+ void setPyiType(const QString &value);
+
+ // The text of the new default expression of the argument
+ QString replacedDefaultExpression() const;
+ void setReplacedDefaultExpression(const QString &value);
+
+ // The new definition of ownership for a specific argument
+
+ TypeSystem::Ownership targetOwnerShip() const;
+ void setTargetOwnerShip(TypeSystem::Ownership o);
+ TypeSystem::Ownership nativeOwnership() const;
+ void setNativeOwnership(TypeSystem::Ownership o);
+
+ // Different conversion rules
+ const QList<CodeSnip> &conversionRules() const;
+ QList<CodeSnip> &conversionRules();
+
+ // QObject parent(owner) of this argument
+ ArgumentOwner owner() const;
+ void setOwner(const ArgumentOwner &value);
+
+ // New name
+ QString renamedToName() const;
+ void setRenamedToName(const QString &value);
+
+ int index() const;
+ void setIndex(int value);
+
+ bool removedDefaultExpression() const;
+ void setRemovedDefaultExpression(const uint &value);
+
+ bool isRemoved() const;
+ void setRemoved(bool value);
+
+ bool noNullPointers() const;
+ void setNoNullPointers(bool value);
+
+ bool resetAfterUse() const;
+ void setResetAfterUse(bool value);
+
+ // consider "int*" to be "int[]"
+ bool isArray() const;
+ void setArray(bool value);
+
+private:
+ QSharedDataPointer<ArgumentModificationData> d;
+};
+
+class FunctionModification
+{
+public:
+ using AllowThread = TypeSystem::AllowThread;
+
+ FunctionModification();
+ FunctionModification(const FunctionModification &);
+ FunctionModification &operator=(const FunctionModification &);
+ FunctionModification(FunctionModification &&) noexcept;
+ FunctionModification &operator=(FunctionModification &&) noexcept;
+ ~FunctionModification();
+
+ enum ModifierFlag {
+ Private = 0x0001,
+ Protected = 0x0002,
+ Public = 0x0004,
+ AccessModifierMask = 0x000f,
+
+ Final = 0x0010,
+ NonFinal = 0x0020,
+ FinalMask = Final | NonFinal,
+
+ Readable = 0x0100,
+ Writable = 0x0200,
+
+ CodeInjection = 0x1000,
+ Rename = 0x2000,
+ Deprecated = 0x4000,
+ Undeprecated = 0x8000,
+ ReplaceExpression = 0x10000
+ };
+
+ Q_DECLARE_FLAGS(Modifiers, ModifierFlag);
+
+ QString renamedToName() const;
+ void setRenamedToName(const QString &value);
+
+ Modifiers modifiers() const;
+ void setModifiers(Modifiers m);
+ void setModifierFlag(ModifierFlag f);
+ void clearModifierFlag(ModifierFlag f);
+ bool isRemoved() const;
+ void setRemoved(bool r);
+
+ bool isAccessModifier() const
+ {
+ return (modifiers() & AccessModifierMask) != 0;
+ }
+ Modifiers accessModifier() const
+ {
+ return modifiers() & AccessModifierMask;
+ }
+ bool isPrivate() const
+ {
+ return accessModifier() == Private;
+ }
+ bool isProtected() const
+ {
+ return accessModifier() == Protected;
+ }
+ bool isPublic() const
+ {
+ return accessModifier() == Public;
+ }
+ bool isFinal() const
+ {
+ return modifiers().testFlag(Final);
+ }
+ bool isNonFinal() const
+ {
+ return modifiers().testFlag(NonFinal);
+ }
+
+ bool isDeprecated() const
+ {
+ return modifiers().testFlag(Deprecated);
+ }
+
+ bool isRenameModifier() const
+ {
+ return modifiers().testFlag(Rename);
+ }
+
+ bool isRemoveModifier() const { return isRemoved(); }
+
+
+
+ bool isCodeInjection() const
+ {
+ return modifiers().testFlag(CodeInjection);
+ }
+
+ AllowThread allowThread() const;
+ void setAllowThread(AllowThread allow);
+
+ bool matches(const QStringList &functionSignatures) const;
+
+ bool setSignature(const QString &s, QString *errorMessage = nullptr);
+ QString signature() const;
+
+ void setOriginalSignature(const QString &s);
+ QString originalSignature() const;
+
+ TypeSystem::ExceptionHandling exceptionHandling() const;
+ void setExceptionHandling(TypeSystem::ExceptionHandling e);
+
+ int overloadNumber() const;
+ void setOverloadNumber(int overloadNumber);
+
+ const QList<CodeSnip> &snips() const;
+ QList<CodeSnip> &snips();
+ void appendSnip(const CodeSnip &snip);
+ void setSnips(const QList<CodeSnip> &snips);
+
+ const QList<ArgumentModification> &argument_mods() const;
+ QList<ArgumentModification> &argument_mods();
+ void setArgument_mods(const QList<ArgumentModification> &argument_mods);
+
+ TypeSystem::SnakeCase snakeCase() const;
+ void setSnakeCase(TypeSystem::SnakeCase s);
+
+#ifndef QT_NO_DEBUG_STREAM
+ void formatDebug(QDebug &d) const;
+#endif
+
+private:
+ QSharedDataPointer<FunctionModificationData> d;
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(FunctionModification::Modifiers)
+
+#ifndef QT_NO_DEBUG_STREAM
+QDebug operator<<(QDebug d, const ReferenceCount &);
+QDebug operator<<(QDebug d, const CodeSnip &s);
+QDebug operator<<(QDebug d, const ArgumentOwner &a);
+QDebug operator<<(QDebug d, const ArgumentModification &a);
+QDebug operator<<(QDebug d, const FunctionModification &fm);
+#endif
+
+class FieldModification
+{
+public:
+ FieldModification();
+ FieldModification(const FieldModification &);
+ FieldModification &operator=(const FieldModification &);
+ FieldModification(FieldModification &&) noexcept;
+ FieldModification &operator=(FieldModification &&) noexcept;
+ ~FieldModification();
+
+ QString name() const;
+ void setName(const QString &value);
+
+ bool isRenameModifier() const;
+ QString renamedToName() const;
+ void setRenamedToName(const QString &value);
+
+ bool isReadable() const;
+ void setReadable(bool e);
+
+ bool isWritable() const;
+ void setWritable(bool e);
+
+ bool isRemoved() const;
+ void setRemoved(bool r);
+
+ bool isOpaqueContainer() const;
+ void setOpaqueContainer(bool r);
+
+ TypeSystem::SnakeCase snakeCase() const;
+ void setSnakeCase(TypeSystem::SnakeCase s);
+
+private:
+ QSharedDataPointer<FieldModificationData> d;
+};
+
+class DocModification
+{
+public:
+ DocModification() = default;
+ explicit DocModification(const QString& xpath, const QString& signature);
+ explicit DocModification(TypeSystem::DocModificationMode mode, const QString& signature);
+
+ void setCode(const QString& code);
+ void setCode(QStringView code) { setCode(code.toString()); }
+
+ QString code() const
+ {
+ return m_code;
+ }
+ QString xpath() const
+ {
+ return m_xpath;
+ }
+ QString signature() const
+ {
+ return m_signature;
+ }
+ TypeSystem::DocModificationMode mode() const
+ {
+ return m_mode;
+ }
+
+ TypeSystem::Language format() const { return m_format; }
+ void setFormat(TypeSystem::Language f) { m_format = f; }
+
+private:
+ QString m_code;
+ QString m_xpath;
+ QString m_signature;
+ TypeSystem::DocModificationMode m_mode = TypeSystem::DocModificationXPathReplace;
+ TypeSystem::Language m_format = TypeSystem::NativeCode;
+};
+
+#endif // MODIFICATIONS_H