diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-09-20 12:45:17 +0200 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-09-21 15:45:49 +0200 |
| commit | c5f2631bdfc1ba4e5fd87375c59227681964654c (patch) | |
| tree | 161d4277a40a0642227148889e433b49ad38c23f | |
| parent | a03ac672ade3492e6cbefc875e5911c0ec2a5ac9 (diff) | |
shiboken6: Clean up header generator.h
- Split classes GeneratorContext and DefaultValue out
- Rearrange forward declarations
Change-Id: I72e69468ce3726e2c75a4a66c75cc5bf421da055
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
| -rw-r--r-- | sources/shiboken6/generator/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | sources/shiboken6/generator/defaultvalue.cpp | 120 | ||||
| -rw-r--r-- | sources/shiboken6/generator/defaultvalue.h | 46 | ||||
| -rw-r--r-- | sources/shiboken6/generator/generator.cpp | 146 | ||||
| -rw-r--r-- | sources/shiboken6/generator/generator.h | 104 | ||||
| -rw-r--r-- | sources/shiboken6/generator/generatorcontext.cpp | 38 | ||||
| -rw-r--r-- | sources/shiboken6/generator/generatorcontext.h | 56 | ||||
| -rw-r--r-- | sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp | 1 | ||||
| -rw-r--r-- | sources/shiboken6/generator/shiboken/cppgenerator.cpp | 2 | ||||
| -rw-r--r-- | sources/shiboken6/generator/shiboken/cppgenerator.h | 1 | ||||
| -rw-r--r-- | sources/shiboken6/generator/shiboken/headergenerator.cpp | 1 | ||||
| -rw-r--r-- | sources/shiboken6/generator/shiboken/shibokengenerator.cpp | 2 | ||||
| -rw-r--r-- | sources/shiboken6/generator/shiboken/shibokengenerator.h | 3 |
13 files changed, 276 insertions, 246 deletions
diff --git a/sources/shiboken6/generator/CMakeLists.txt b/sources/shiboken6/generator/CMakeLists.txt index 276661ab9..d0c5cdeb3 100644 --- a/sources/shiboken6/generator/CMakeLists.txt +++ b/sources/shiboken6/generator/CMakeLists.txt @@ -8,6 +8,8 @@ endif() set(shiboken6_SRC generator.cpp +generatorcontext.cpp +defaultvalue.cpp shiboken/cppgenerator.cpp shiboken/cppgenerator_container.cpp shiboken/headergenerator.cpp diff --git a/sources/shiboken6/generator/defaultvalue.cpp b/sources/shiboken6/generator/defaultvalue.cpp new file mode 100644 index 000000000..c3983a2e3 --- /dev/null +++ b/sources/shiboken6/generator/defaultvalue.cpp @@ -0,0 +1,120 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#include "defaultvalue.h" + +#include "qtcompat.h" + +#include <QtCore/QDebug> + +using namespace Qt::StringLiterals; + +// DefaultValue is used for storing default values of types for which code is +// generated in different contexts: +// +// Context | Example: "Class *" | Example: "Class" with default Constructor +// --------------------+-------------------------------+------------------------------------------ +// Variable | var{nullptr}; | var; +// initializations | | +// --------------------+-------------------------------+------------------------------------------ +// Return values | return nullptr; | return {} +// --------------------+-------------------------------+------------------------------------------ +// constructor | static_cast<Class *>(nullptr) | Class() +// arguments lists | | +// (recursive, precise | | +// matching). | | + +DefaultValue::DefaultValue(Type t, QString value) : + m_type(t), m_value(std::move(value)) +{ +} + +DefaultValue::DefaultValue(QString customValue) : + m_type(Custom), m_value(std::move(customValue)) +{ +} + +QString DefaultValue::returnValue() const +{ + switch (m_type) { + case DefaultValue::Boolean: + return u"false"_s; + case DefaultValue::CppScalar: + return u"0"_s; + case DefaultValue::Custom: + case DefaultValue::Enum: + return m_value; + case DefaultValue::Pointer: + return u"nullptr"_s; + case DefaultValue::Void: + return QString(); + case DefaultValue::DefaultConstructorWithDefaultValues: + return m_value + u"()"_s; + case DefaultValue::DefaultConstructor: + break; + } + return u"{}"_s; +} + +QString DefaultValue::initialization() const +{ + switch (m_type) { + case DefaultValue::Boolean: + return u"{false}"_s; + case DefaultValue::CppScalar: + return u"{0}"_s; + case DefaultValue::Custom: + return u" = "_s + m_value; + case DefaultValue::Enum: + return u'{' + m_value + u'}'; + case DefaultValue::Pointer: + return u"{nullptr}"_s; + case DefaultValue::Void: + Q_ASSERT(false); + break; + case DefaultValue::DefaultConstructor: + case DefaultValue::DefaultConstructorWithDefaultValues: + break; + } + return QString(); +} + +QString DefaultValue::constructorParameter() const +{ + switch (m_type) { + case DefaultValue::Boolean: + return u"false"_s; + case DefaultValue::CppScalar: { + // PYSIDE-846: Use static_cast in case of "unsigned long" and similar + const QString cast = m_value.contains(u' ') + ? u"static_cast<"_s + m_value + u'>' + : m_value; + return cast + u"(0)"_s; + } + case DefaultValue::Custom: + case DefaultValue::Enum: + return m_value; + case DefaultValue::Pointer: + // Be precise here to be able to differentiate between constructors + // taking different pointer types, cf + // QTreeWidgetItemIterator(QTreeWidget *) and + // QTreeWidgetItemIterator(QTreeWidgetItemIterator *). + return u"static_cast<"_s + m_value + u"*>(nullptr)"_s; + case DefaultValue::Void: + Q_ASSERT(false); + break; + case DefaultValue::DefaultConstructor: + case DefaultValue::DefaultConstructorWithDefaultValues: + break; + } + return m_value + u"()"_s; +} + +QDebug operator<<(QDebug debug, const DefaultValue &v) +{ + QDebugStateSaver saver(debug); + debug.noquote(); + debug.nospace(); + debug << "DefaultValue(" << v.type() << ", \"" << v.value() << "\")"; + return debug; +} diff --git a/sources/shiboken6/generator/defaultvalue.h b/sources/shiboken6/generator/defaultvalue.h new file mode 100644 index 000000000..d518d134f --- /dev/null +++ b/sources/shiboken6/generator/defaultvalue.h @@ -0,0 +1,46 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#ifndef DEFAULTVALUE_H +#define DEFAULTVALUE_H + +#include <QtCore/QString> + +QT_FORWARD_DECLARE_CLASS(QDebug); + +class DefaultValue +{ +public: + enum Type + { + Boolean, + CppScalar, // A C++ scalar type (int,..) specified by value() + Custom, // A custom constructor/expression, uses value() as is + DefaultConstructor, // For classes named value() + DefaultConstructorWithDefaultValues, // as DefaultConstructor, but can't return {} though. + Enum, // Enum value as specified by value() + Pointer, // Pointer of type value() + Void // "", for return values only + }; + + explicit DefaultValue(Type t, QString value = QString()); + explicit DefaultValue(QString customValue); + + QString returnValue() const; + QString initialization() const; + QString constructorParameter() const; + + QString value() const { return m_value; } + void setValue(const QString &value) { m_value = value; } + + Type type() const { return m_type; } + void setType(Type type) { m_type = type; } + +private: + Type m_type; + QString m_value; +}; + +QDebug operator<<(QDebug debug, const DefaultValue &v); + +#endif // DEFAULTVALUE_H diff --git a/sources/shiboken6/generator/generator.cpp b/sources/shiboken6/generator/generator.cpp index 348d25425..6cfcf6c86 100644 --- a/sources/shiboken6/generator/generator.cpp +++ b/sources/shiboken6/generator/generator.cpp @@ -2,6 +2,8 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "generator.h" +#include "defaultvalue.h" +#include "generatorcontext.h" #include "apiextractorresult.h" #include "abstractmetaargument.h" #include "abstractmetaenum.h" @@ -30,150 +32,6 @@ using namespace Qt::StringLiterals; static const char ENABLE_PYSIDE_EXTENSIONS[] = "enable-pyside-extensions"; static const char AVOID_PROTECTED_HACK[] = "avoid-protected-hack"; -/** - * DefaultValue is used for storing default values of types for which code is - * generated in different contexts: - * - * Context | Example: "Class *" | Example: "Class" with default Constructor - * --------------------+-------------------------------+------------------------------------------ - * Variable | var{nullptr}; | var; - * initializations | | - * --------------------+-------------------------------+------------------------------------------ - * Return values | return nullptr; | return {} - * --------------------+-------------------------------+------------------------------------------ - * constructor | static_cast<Class *>(nullptr) | Class() - * arguments lists | | - * (recursive, precise | | - * matching). | | - */ - -DefaultValue::DefaultValue(Type t, QString value) : - m_type(t), m_value(std::move(value)) -{ -} - -DefaultValue::DefaultValue(QString customValue) : - m_type(Custom), m_value(std::move(customValue)) -{ -} - -QString DefaultValue::returnValue() const -{ - switch (m_type) { - case DefaultValue::Boolean: - return u"false"_s; - case DefaultValue::CppScalar: - return u"0"_s; - case DefaultValue::Custom: - case DefaultValue::Enum: - return m_value; - case DefaultValue::Pointer: - return u"nullptr"_s; - case DefaultValue::Void: - return QString(); - case DefaultValue::DefaultConstructorWithDefaultValues: - return m_value + u"()"_s; - case DefaultValue::DefaultConstructor: - break; - } - return u"{}"_s; -} - -QString DefaultValue::initialization() const -{ - switch (m_type) { - case DefaultValue::Boolean: - return u"{false}"_s; - case DefaultValue::CppScalar: - return u"{0}"_s; - case DefaultValue::Custom: - return u" = "_s + m_value; - case DefaultValue::Enum: - return u'{' + m_value + u'}'; - case DefaultValue::Pointer: - return u"{nullptr}"_s; - case DefaultValue::Void: - Q_ASSERT(false); - break; - case DefaultValue::DefaultConstructor: - case DefaultValue::DefaultConstructorWithDefaultValues: - break; - } - return QString(); -} - -QString DefaultValue::constructorParameter() const -{ - switch (m_type) { - case DefaultValue::Boolean: - return u"false"_s; - case DefaultValue::CppScalar: { - // PYSIDE-846: Use static_cast in case of "unsigned long" and similar - const QString cast = m_value.contains(u' ') - ? u"static_cast<"_s + m_value + u'>' - : m_value; - return cast + u"(0)"_s; - } - case DefaultValue::Custom: - case DefaultValue::Enum: - return m_value; - case DefaultValue::Pointer: - // Be precise here to be able to differentiate between constructors - // taking different pointer types, cf - // QTreeWidgetItemIterator(QTreeWidget *) and - // QTreeWidgetItemIterator(QTreeWidgetItemIterator *). - return u"static_cast<"_s + m_value + u"*>(nullptr)"_s; - case DefaultValue::Void: - Q_ASSERT(false); - break; - case DefaultValue::DefaultConstructor: - case DefaultValue::DefaultConstructorWithDefaultValues: - break; - } - return m_value + u"()"_s; -} - -#ifndef QT_NO_DEBUG_STREAM -QDebug operator<<(QDebug debug, const DefaultValue &v) -{ - QDebugStateSaver saver(debug); - debug.noquote(); - debug.nospace(); - debug << "DefaultValue(" << v.type() << ", \"" << v.value() << "\")"; - return debug; -} - -QDebug operator<<(QDebug debug, const GeneratorContext &c) -{ - QDebugStateSaver saver(debug); - debug.noquote(); - debug.nospace(); - debug << "GeneratorContext(\"" << c.metaClass()->name() << "\" "; - if (c.useWrapper()) - debug << "[wrapper]"; - else if (c.forSmartPointer()) - debug << "[smart pointer] \"" << c.preciseType().cppSignature() << '"'; - else - debug << "[class]"; - debug << ')'; - return debug; -} - -#endif // !QT_NO_DEBUG_STREAM - -QString GeneratorContext::wrapperName() const -{ - Q_ASSERT(m_type == WrappedClass); - return m_wrappername; -} - -QString GeneratorContext::effectiveClassName() const -{ - if (m_type == SmartPointer) - return m_preciseClassType.cppSignature(); - return m_type == WrappedClass ? m_wrappername : m_metaClass->qualifiedCppName(); -} - struct Generator::GeneratorPrivate { ApiExtractorResult api; diff --git a/sources/shiboken6/generator/generator.h b/sources/shiboken6/generator/generator.h index 0020b3057..fbb4c7091 100644 --- a/sources/shiboken6/generator/generator.h +++ b/sources/shiboken6/generator/generator.h @@ -4,7 +4,7 @@ #ifndef GENERATOR_H #define GENERATOR_H -#include <abstractmetatype.h> +#include <abstractmetalang_typedefs.h> #include <typedatabase_typedefs.h> #include <QtCore/QSharedPointer> #include <QtCore/QList> @@ -12,111 +12,14 @@ #include <optional> class ApiExtractorResult; -class AbstractMetaFunction; -class AbstractMetaClass; -class AbstractMetaEnum; -class TypeEntry; -class ComplexTypeEntry; -class AbstractMetaType; -class EnumTypeEntry; -class FlagsTypeEntry; +class GeneratorContext; +class DefaultValue; class TextStream; -QT_BEGIN_NAMESPACE -class QFile; -class QDebug; -QT_END_NAMESPACE - -class PrimitiveTypeEntry; -class ContainerTypeEntry; - QString getClassTargetFullName(const AbstractMetaClass *metaClass, bool includePackageName = true); QString getClassTargetFullName(const AbstractMetaEnum &metaEnum, bool includePackageName = true); QString getFilteredCppSignatureString(QString signature); -class DefaultValue -{ -public: - enum Type - { - Boolean, - CppScalar, // A C++ scalar type (int,..) specified by value() - Custom, // A custom constructor/expression, uses value() as is - DefaultConstructor, // For classes named value() - DefaultConstructorWithDefaultValues, // as DefaultConstructor, but can't return {} though. - Enum, // Enum value as specified by value() - Pointer, // Pointer of type value() - Void // "", for return values only - }; - - explicit DefaultValue(Type t, QString value = QString()); - explicit DefaultValue(QString customValue); - - QString returnValue() const; - QString initialization() const; - QString constructorParameter() const; - - QString value() const { return m_value; } - void setValue(const QString &value) { m_value = value; } - - Type type() const { return m_type; } - void setType(Type type) { m_type = type; } - -private: - Type m_type; - QString m_value; -}; - -#ifndef QT_NO_DEBUG_STREAM -QDebug operator<<(QDebug debug, const DefaultValue &v); -#endif - -/** - * A GeneratorContext object contains a pointer to an AbstractMetaClass and/or a specialized - * AbstractMetaType, for which code is currently being generated. - * - * The main case is when the context contains only an AbstractMetaClass pointer, which is used - * by different methods to generate appropriate expressions, functions, type names, etc. - * - * The second case is for generation of code for smart pointers. In this case the m_metaClass member - * contains the generic template class of the smart pointer, and the m_preciseClassType member - * contains the instantiated template type, e.g. a concrete shared_ptr<int>. To - * distinguish this case, the member m_forSmartPointer is set to true. - * - * In the future the second case might be generalized for all template type instantiations. - */ -class GeneratorContext { - friend class ShibokenGenerator; - friend class Generator; -public: - enum Type { Class, WrappedClass, SmartPointer }; - - GeneratorContext() = default; - - const AbstractMetaClass *metaClass() const { return m_metaClass; } - const AbstractMetaType &preciseType() const { return m_preciseClassType; } - const AbstractMetaClass *pointeeClass() const { return m_pointeeClass; } - - bool forSmartPointer() const { return m_type == SmartPointer; } - bool useWrapper() const { return m_type == WrappedClass; } - - QString wrapperName() const; - /// Returns the wrapper name in case of useWrapper(), the qualified class - /// name or the smart pointer specialization. - QString effectiveClassName() const; - -private: - const AbstractMetaClass *m_metaClass = nullptr; - const AbstractMetaClass *m_pointeeClass = nullptr; - AbstractMetaType m_preciseClassType; - QString m_wrappername; - Type m_type = Class; -}; - -#ifndef QT_NO_DEBUG_STREAM -QDebug operator<<(QDebug debug, const GeneratorContext &c); -#endif - /** * Base class for all generators. The default implementations does nothing, * you must subclass this to create your own generators. @@ -318,4 +221,3 @@ using GeneratorPtr = QSharedPointer<Generator>; using Generators = QList<GeneratorPtr>; #endif // GENERATOR_H - diff --git a/sources/shiboken6/generator/generatorcontext.cpp b/sources/shiboken6/generator/generatorcontext.cpp new file mode 100644 index 000000000..b50c2effb --- /dev/null +++ b/sources/shiboken6/generator/generatorcontext.cpp @@ -0,0 +1,38 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#include "generatorcontext.h" +#include <abstractmetalang.h> + +#include <QtCore/QDebug> + +using namespace Qt::StringLiterals; + +QString GeneratorContext::wrapperName() const +{ + Q_ASSERT(m_type == WrappedClass); + return m_wrappername; +} + +QString GeneratorContext::effectiveClassName() const +{ + if (m_type == SmartPointer) + return m_preciseClassType.cppSignature(); + return m_type == WrappedClass ? m_wrappername : m_metaClass->qualifiedCppName(); +} + +QDebug operator<<(QDebug debug, const GeneratorContext &c) +{ + QDebugStateSaver saver(debug); + debug.noquote(); + debug.nospace(); + debug << "GeneratorContext(\"" << c.metaClass()->name() << "\" "; + if (c.useWrapper()) + debug << "[wrapper]"; + else if (c.forSmartPointer()) + debug << "[smart pointer] \"" << c.preciseType().cppSignature() << '"'; + else + debug << "[class]"; + debug << ')'; + return debug; +} diff --git a/sources/shiboken6/generator/generatorcontext.h b/sources/shiboken6/generator/generatorcontext.h new file mode 100644 index 000000000..573f98758 --- /dev/null +++ b/sources/shiboken6/generator/generatorcontext.h @@ -0,0 +1,56 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#ifndef GENERATORCONTEXT_H +#define GENERATORCONTEXT_H + +#include <abstractmetalang_typedefs.h> +#include <abstractmetatype.h> +#include <QtCore/QList> + +QT_FORWARD_DECLARE_CLASS(QDebug); + +// A GeneratorContext object contains a pointer to an AbstractMetaClass and/or a specialized +// AbstractMetaType, for which code is currently being generated. +// +// The main case is when the context contains only an AbstractMetaClass pointer, which is used +// by different methods to generate appropriate expressions, functions, type names, etc. +// +// The second case is for generation of code for smart pointers. In this case the m_metaClass +// member contains the generic template class of the smart pointer, and the m_preciseClassType +// member contains the instantiated template type, e.g. a concrete shared_ptr<int>. To +// distinguish this case, the member m_forSmartPointer is set to true. +// +// In the future the second case might be generalized for all template type instantiations. + +class GeneratorContext { + friend class ShibokenGenerator; + friend class Generator; +public: + enum Type { Class, WrappedClass, SmartPointer }; + + GeneratorContext() = default; + + const AbstractMetaClass *metaClass() const { return m_metaClass; } + const AbstractMetaType &preciseType() const { return m_preciseClassType; } + const AbstractMetaClass *pointeeClass() const { return m_pointeeClass; } + + bool forSmartPointer() const { return m_type == SmartPointer; } + bool useWrapper() const { return m_type == WrappedClass; } + + QString wrapperName() const; + /// Returns the wrapper name in case of useWrapper(), the qualified class + /// name or the smart pointer specialization. + QString effectiveClassName() const; + +private: + const AbstractMetaClass *m_metaClass = nullptr; + const AbstractMetaClass *m_pointeeClass = nullptr; + AbstractMetaType m_preciseClassType; + QString m_wrappername; + Type m_type = Class; +}; + +QDebug operator<<(QDebug debug, const GeneratorContext &c); + +#endif // GENERATORCONTEXT_H diff --git a/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp b/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp index c1e206362..5c81be1a5 100644 --- a/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp +++ b/sources/shiboken6/generator/qtdoc/qtdocgenerator.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "qtdocgenerator.h" +#include "generatorcontext.h" #include "codesnip.h" #include "exception.h" #include "abstractmetaargument.h" diff --git a/sources/shiboken6/generator/shiboken/cppgenerator.cpp b/sources/shiboken6/generator/shiboken/cppgenerator.cpp index c67b50107..57c6bc95b 100644 --- a/sources/shiboken6/generator/shiboken/cppgenerator.cpp +++ b/sources/shiboken6/generator/shiboken/cppgenerator.cpp @@ -2,6 +2,8 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "cppgenerator.h" +#include "defaultvalue.h" +#include "generatorcontext.h" #include "codesnip.h" #include "customconversion.h" #include "headergenerator.h" diff --git a/sources/shiboken6/generator/shiboken/cppgenerator.h b/sources/shiboken6/generator/shiboken/cppgenerator.h index 49caf0b84..914a73ec3 100644 --- a/sources/shiboken6/generator/shiboken/cppgenerator.h +++ b/sources/shiboken6/generator/shiboken/cppgenerator.h @@ -10,6 +10,7 @@ #include "typesystem_typedefs.h" #include <QtCore/QFlags> +#include <QtCore/QHash> #include <QtCore/QSharedPointer> class OverloadDataNode; diff --git a/sources/shiboken6/generator/shiboken/headergenerator.cpp b/sources/shiboken6/generator/shiboken/headergenerator.cpp index 80fb826c4..9d1ac0ae5 100644 --- a/sources/shiboken6/generator/shiboken/headergenerator.cpp +++ b/sources/shiboken6/generator/shiboken/headergenerator.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "headergenerator.h" +#include "generatorcontext.h" #include <apiextractorresult.h> #include <abstractmetaargument.h> #include <abstractmetaenum.h> diff --git a/sources/shiboken6/generator/shiboken/shibokengenerator.cpp b/sources/shiboken6/generator/shiboken/shibokengenerator.cpp index 271d06f79..7f1aafefa 100644 --- a/sources/shiboken6/generator/shiboken/shibokengenerator.cpp +++ b/sources/shiboken6/generator/shiboken/shibokengenerator.cpp @@ -2,6 +2,8 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "shibokengenerator.h" +#include "defaultvalue.h" +#include "generatorcontext.h" #include "apiextractorresult.h" #include "codesnip.h" #include "customconversion.h" diff --git a/sources/shiboken6/generator/shiboken/shibokengenerator.h b/sources/shiboken6/generator/shiboken/shibokengenerator.h index daad0b0aa..507d0cdef 100644 --- a/sources/shiboken6/generator/shiboken/shibokengenerator.h +++ b/sources/shiboken6/generator/shiboken/shibokengenerator.h @@ -13,12 +13,13 @@ #include <array> +class EnumTypeEntry; +class FlagsTypeEntry; class DocParser; class CodeSnip; class QPropertySpec; class OverloadData; class TargetToNativeConversion; -class TextStream; struct GeneratorClassInfoCacheEntry; QT_FORWARD_DECLARE_CLASS(TextStream) |
