diff options
Diffstat (limited to 'sources/shiboken6/ApiExtractor/abstractmetabuilder.h')
-rw-r--r-- | sources/shiboken6/ApiExtractor/abstractmetabuilder.h | 96 |
1 files changed, 63 insertions, 33 deletions
diff --git a/sources/shiboken6/ApiExtractor/abstractmetabuilder.h b/sources/shiboken6/ApiExtractor/abstractmetabuilder.h index 4fe6741b1..cbd8c7034 100644 --- a/sources/shiboken6/ApiExtractor/abstractmetabuilder.h +++ b/sources/shiboken6/ApiExtractor/abstractmetabuilder.h @@ -1,41 +1,18 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt for Python. -** -** $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$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #ifndef ABSTRACTMETABUILDER_H #define ABSTRACTMETABUILDER_H #include "abstractmetalang_typedefs.h" +#include "apiextractorflags.h" #include "header_paths.h" #include "typesystem_enums.h" +#include "typesystem_typedefs.h" #include "clangparser/compilersupport.h" -#include <QFileInfoList> +#include <QtCore/QFileInfoList> #include <optional> @@ -45,19 +22,22 @@ class AbstractMetaBuilderPrivate; class AbstractMetaClass; class AbstractMetaType; class AbstractMetaEnumValue; +class ComplexTypeEntry; class TypeInfo; class TypeEntry; class AbstractMetaBuilder { public: + Q_DISABLE_COPY_MOVE(AbstractMetaBuilder) + enum RejectReason { NotInTypeSystem, GenerationDisabled, RedefinedToNotClass, UnmatchedArgumentType, UnmatchedReturnType, - ApiIncompatible, + UnmatchedOperator, Deprecated, NoReason }; @@ -66,13 +46,18 @@ public: virtual ~AbstractMetaBuilder(); const AbstractMetaClassList &classes() const; + AbstractMetaClassList takeClasses(); const AbstractMetaClassList &templates() const; + AbstractMetaClassList takeTemplates(); const AbstractMetaClassList &smartPointers() const; + AbstractMetaClassList takeSmartPointers(); const AbstractMetaFunctionCList &globalFunctions() const; const AbstractMetaEnumList &globalEnums() const; - const QHash<const TypeEntry *, AbstractMetaEnum> &typeEntryToEnumsHash() const; + const QHash<TypeEntryCPtr, AbstractMetaEnum> &typeEntryToEnumsHash() const; + const QMultiHash<QString, QString> &typedefTargetToName() const; bool build(const QByteArrayList &arguments, + ApiExtractorFlags apiExtractorFlags = {}, bool addCompilerSupportArguments = true, LanguageLevel level = LanguageLevel::Default, unsigned clangFlags = 0); @@ -86,25 +71,70 @@ public: void setGlobalHeaders(const QFileInfoList& globalHeaders); void setHeaderPaths(const HeaderPaths &h); + static void setUseGlobalHeader(bool h); + void setSkipDeprecated(bool value); + void setApiExtractorFlags(ApiExtractorFlags flags); + enum TranslateTypeFlag { - DontResolveType = 0x1 + DontResolveType = 0x1, + TemplateArgument = 0x2, + NoClassScopeLookup = 0x4 }; Q_DECLARE_FLAGS(TranslateTypeFlags, TranslateTypeFlag); static std::optional<AbstractMetaType> - translateType(const TypeInfo &_typei, AbstractMetaClass *currentClass = nullptr, + translateType(const TypeInfo &_typei, const AbstractMetaClassPtr ¤tClass = {}, TranslateTypeFlags flags = {}, QString *errorMessage = nullptr); static std::optional<AbstractMetaType> - translateType(const QString &t, AbstractMetaClass *currentClass = nullptr, + translateType(const QString &t, const AbstractMetaClassPtr ¤tClass = {}, TranslateTypeFlags flags = {}, QString *errorMessage = nullptr); + /// Performs a template specialization of the function. + /// \param function Function + /// \param templateTypes Instantiation types + /// \return Specialized copy of the function + static AbstractMetaFunctionPtr + inheritTemplateFunction(const AbstractMetaFunctionCPtr &function, + const AbstractMetaTypeList &templateTypes); + + static AbstractMetaClassPtr + inheritTemplateClass(const ComplexTypeEntryPtr &te, + const AbstractMetaClassCPtr &templateClass, + const AbstractMetaTypeList &templateTypes, + InheritTemplateFlags flags = {}); + + /// Performs a template specialization of the member function. + /// \param function Member function + /// \param templateTypes Instantiation types + /// \param templateClass Template class + /// \param subclass Specialized class + /// \return Specialized copy of the function + static AbstractMetaFunctionPtr + inheritTemplateMember(const AbstractMetaFunctionCPtr &function, + const AbstractMetaTypeList &templateTypes, + const AbstractMetaClassCPtr &templateClass, + const AbstractMetaClassPtr &subclass); + static QString getSnakeCaseName(const QString &name); // Names under which an item will be registered to Python depending on snakeCase static QStringList definitionNames(const QString &name, TypeSystem::SnakeCase snakeCase); + static QString resolveScopePrefix(const AbstractMetaClassCPtr &scope, + QStringView value); + + static bool dontFixDefaultValue(QStringView expr); + + // For testing purposes + QString fixDefaultValue(const QString &expr, const AbstractMetaType &type, + const AbstractMetaClassCPtr &) const; + QString fixEnumDefault(const AbstractMetaType &type, const QString &expr, + const AbstractMetaClassCPtr & = {}) const; + + static void setCodeModelTestMode(bool b); + #ifndef QT_NO_DEBUG_STREAM void formatDebug(QDebug &d) const; #endif |