1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
// Copyright (C) 2020 The Qt Company Ltd.
// Copyright (C) 2002-2005 Roberto Raggi <roberto@kdevelop.org>
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef TYPEINFO_H
#define TYPEINFO_H
#include "codemodel_enums.h"
#include "codemodel_fwd.h"
#include <QtCore/QString>
#include <QtCore/QSharedDataPointer>
#include <QtCore/QtCompare>
#include <QtCore/QStringList>
#include <utility>
QT_FORWARD_DECLARE_CLASS(QDebug)
QT_FORWARD_DECLARE_CLASS(QTextStream)
class TypeInfoData;
class TypeInfo
{
friend class TypeParser;
public:
using Indirections = QList<Indirection>;
using TypeInfoList = QList<TypeInfo>;
TypeInfo();
~TypeInfo();
TypeInfo(const TypeInfo &);
TypeInfo& operator=(const TypeInfo &);
TypeInfo(TypeInfo &&) noexcept;
TypeInfo &operator=(TypeInfo &&) noexcept;
static TypeInfo voidType();
static TypeInfo varArgsType();
QStringList qualifiedName() const;
void setQualifiedName(const QStringList &qualified_name);
void addName(const QString &);
bool isVoid() const;
bool isConstant() const;
void setConstant(bool is);
bool isVolatile() const;
void setVolatile(bool is);
ReferenceType referenceType() const;
void setReferenceType(ReferenceType r);
const Indirections &indirectionsV() const;
void setIndirectionsV(const Indirections &i);
void addIndirection(Indirection i);
// "Legacy", rename?
int indirections() const;
void setIndirections(int indirections);
bool isFunctionPointer() const;
void setFunctionPointer(bool is);
const QStringList &arrayElements() const;
void setArrayElements(const QStringList &arrayElements);
void addArrayElement(const QString &a);
const TypeInfoList &arguments() const;
void setArguments(const TypeInfoList &arguments);
void addArgument(const TypeInfo &arg);
const TypeInfoList &instantiations() const;
TypeInfoList &instantiations(); // for parsing only
void setInstantiations(const TypeInfoList &i);
void addInstantiation(const TypeInfo &i);
void clearInstantiations();
bool isPlain() const; // neither const,volatile, no indirections/references, array
bool isStdType() const;
std::pair<qsizetype, qsizetype>
parseTemplateArgumentList(const QString &l, qsizetype from = 0);
// ### arrays and templates??
QString toString() const;
static TypeInfo combine(const TypeInfo &__lhs, const TypeInfo &__rhs);
static TypeInfo resolveType(TypeInfo const &__type, const ScopeModelItem &__scope);
void formatTypeSystemSignature(QTextStream &str) const;
#ifndef QT_NO_DEBUG_STREAM
void formatDebug(QDebug &d) const;
#endif
static QString indirectionKeyword(Indirection i);
static bool stripLeadingConst(QString *s);
static bool stripLeadingVolatile(QString *s);
static bool stripLeadingQualifier(QLatin1StringView qualifier, QString *s);
static void stripQualifiers(QString *s);
void simplifyStdType();
private:
friend bool comparesEqual(const TypeInfo &lhs,
const TypeInfo &rhs) noexcept;
Q_DECLARE_EQUALITY_COMPARABLE(TypeInfo)
QSharedDataPointer<TypeInfoData> d;
friend class TypeInfoTemplateArgumentHandler;
static TypeInfo resolveType(CodeModelItem item, TypeInfo const &__type, const ScopeModelItem &__scope);
};
#ifndef QT_NO_DEBUG_STREAM
QDebug operator<<(QDebug d, const TypeInfo &t);
#endif
#endif // TYPEINFO_H
|