diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-10-07 10:54:49 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-10-08 11:39:38 +0200 |
commit | 9498d127aaf1a7888e46763ed7b8e39ee76e76da (patch) | |
tree | aeafdc9682c8491d83ec4ae1f3604f8178009bc6 | |
parent | 17d8d5ffa9a132d1ed3c92942605f3857e61ae7b (diff) |
shiboken2: Generate extra includes into wrapper header
For wrapper types, generate the class-related extra includes into
the wrapper header since they might be required for it (for
example, instantiation type of a typedef typesystem entry).
Task-number: PYSIDE-1202
Change-Id: I9f57bdfe54d6273e4a1ffa9570e3352959dea480
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
-rw-r--r-- | sources/shiboken2/ApiExtractor/typesystem.h | 2 | ||||
-rw-r--r-- | sources/shiboken2/generator/shiboken2/cppgenerator.cpp | 16 | ||||
-rw-r--r-- | sources/shiboken2/generator/shiboken2/headergenerator.cpp | 8 |
3 files changed, 18 insertions, 8 deletions
diff --git a/sources/shiboken2/ApiExtractor/typesystem.h b/sources/shiboken2/ApiExtractor/typesystem.h index 8c4f1dc0e..a68231f36 100644 --- a/sources/shiboken2/ApiExtractor/typesystem.h +++ b/sources/shiboken2/ApiExtractor/typesystem.h @@ -804,7 +804,7 @@ public: return m_docModifications; } - IncludeList extraIncludes() const + const IncludeList &extraIncludes() const { return m_extraIncludes; } diff --git a/sources/shiboken2/generator/shiboken2/cppgenerator.cpp b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp index 773001758..0ffc7908d 100644 --- a/sources/shiboken2/generator/shiboken2/cppgenerator.cpp +++ b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp @@ -393,14 +393,18 @@ void CppGenerator::generateClass(QTextStream &s, const GeneratorContext &classCo metaClass->getEnumsFromInvisibleNamespacesToBeGenerated(&classEnums); //Extra includes - s << "\n// Extra includes\n"; - QVector<Include> includes = metaClass->typeEntry()->extraIncludes(); + QVector<Include> includes; + if (!classContext.useWrapper()) + includes += metaClass->typeEntry()->extraIncludes(); for (AbstractMetaEnum *cppEnum : qAsConst(classEnums)) includes.append(cppEnum->typeEntry()->extraIncludes()); - std::sort(includes.begin(), includes.end()); - for (const Include &inc : qAsConst(includes)) - s << inc.toString() << Qt::endl; - s << Qt::endl; + if (!includes.isEmpty()) { + s << "\n// Extra includes\n"; + std::sort(includes.begin(), includes.end()); + for (const Include &inc : qAsConst(includes)) + s << inc.toString() << Qt::endl; + s << '\n'; + } s << "\n#include <cctype>\n#include <cstring>\n"; diff --git a/sources/shiboken2/generator/shiboken2/headergenerator.cpp b/sources/shiboken2/generator/shiboken2/headergenerator.cpp index 2d1b41443..36ccefb58 100644 --- a/sources/shiboken2/generator/shiboken2/headergenerator.cpp +++ b/sources/shiboken2/generator/shiboken2/headergenerator.cpp @@ -119,7 +119,13 @@ void HeaderGenerator::generateClass(QTextStream &s, const GeneratorContext &clas s << "#define protected public\n\n"; //Includes - s << metaClass->typeEntry()->include() << Qt::endl; + auto typeEntry = metaClass->typeEntry(); + s << typeEntry->include() << '\n'; + if (classContext.useWrapper() && !typeEntry->extraIncludes().isEmpty()) { + s << "\n// Extra includes\n"; + for (const Include &inc : typeEntry->extraIncludes()) + s << inc.toString() << '\n'; + } if (classContext.useWrapper() && usePySideExtensions() && metaClass->isQObject()) s << "namespace PySide { class DynamicQMetaObject; }\n\n"; |