Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
cpp.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4#ifndef CPP_H
5#define CPP_H
6
7#include "lupdate.h"
8
9#include <QtCore/QSet>
10#include <QtCore/QStack>
11
12#include <iostream>
13
14QT_BEGIN_NAMESPACE
15
16struct HashString {
17 HashString() : m_hash(0x80000000) {}
18 explicit HashString(const QString &str) : m_str(str), m_hash(0x80000000) {}
19 void setValue(const QString &str) { m_str = str; m_hash = 0x80000000; }
20 const QString &value() const { return m_str; }
21 bool operator==(const HashString &other) const { return m_str == other.m_str; }
22 QString m_str;
23
24 mutable uint m_hash; // We use the highest bit as a validity indicator (set => invalid)
25};
26
27QDebug operator<<(QDebug debug, const HashString &s);
28
30 explicit HashStringList(const QList<HashString> &list) : m_list(list), m_hash(0x80000000) {}
31 const QList<HashString> &value() const { return m_list; }
32 bool operator==(const HashStringList &other) const { return m_list == other.m_list; }
33
35 mutable uint m_hash; // We use the highest bit as a validity indicator (set => invalid)
36};
37
38QDebug operator<<(QDebug debug, const HashStringList &lst);
39
41
42struct Namespace {
43
45 classDef(this),
46 hasTrFunctions(false), complained(false)
47 {}
49 {
50 qDeleteAll(children);
51 }
52
56
57 // Class declarations set no flags and create no namespaces, so they are ignored.
58 // Class definitions may appear multiple times - but only because we are trying to
59 // "compile" all sources irrespective of build configuration.
60 // Nested classes may be forward-declared inside a definition, and defined in another file.
61 // The latter will detach the class' child list, so clones need a backlink to the original
62 // definition (either one in case of multiple definitions).
63 // Namespaces can have tr() functions as well, so we need to track parent definitions for
64 // them as well. The complication is that we may have to deal with a forrest instead of
65 // a tree - in that case the parent will be arbitrary. However, it seem likely that
66 // Q_DECLARE_TR_FUNCTIONS would be used either in "class-like" namespaces with a central
67 // header or only locally in a file.
69
71
73 bool complained; // ... that tr functions are missing.
74};
75
81
86
88{
94
95 bool operator==(const CppParserState &other) const
96 {
97 return namespaces == other.namespaces
98 && namespaceDepths == other.namespaceDepths
99 && functionContext == other.functionContext
100 && functionContextUnresolved == other.functionContextUnresolved
101 && pendingContext == other.pendingContext;
102 }
103};
104
105size_t qHash(const CppParserState &s, size_t seed);
106
108{
111
112 ResultsCacheKey(const QString &filePath)
114 {
115 }
116
117 ResultsCacheKey(const QString &filePath, const CppParserState &state)
120 {
121 }
122
123 bool operator==(const ResultsCacheKey &other) const
124 {
125 return cleanFile == other.cleanFile
126 && parserState == other.parserState;
127 }
128};
129
130size_t qHash(const ResultsCacheKey &key, size_t seed);
131
134
135class CppFiles {
136public:
137 static QSet<const ParseResults *> getResults(const ResultsCacheKey &key);
138 static void setResults(const ResultsCacheKey &key, const ParseResults *results);
139 static const Translator *getTranslator(const QString &cleanFile);
140 static void setTranslator(const QString &cleanFile, const Translator *results);
141 static bool isBlacklisted(const QString &cleanFile);
142 static void setBlacklisted(const QString &cleanFile);
143 static void addIncludeCycle(const QSet<QString> &fileNames, const CppParserState &parserState);
144
145private:
146 static IncludeCycleHash &includeCycles();
147 static TranslatorHash &translatedFiles();
148 static QSet<QString> &blacklistedFiles();
149};
150
151QT_END_NAMESPACE
152
153#endif // CPP_H
static void setTranslator(const QString &cleanFile, const Translator *results)
Definition cpp.cpp:1227
static void setBlacklisted(const QString &cleanFile)
Definition cpp.cpp:1237
static const Translator * getTranslator(const QString &cleanFile)
Definition cpp.cpp:1222
static void setResults(const ResultsCacheKey &key, const ParseResults *results)
Definition cpp.cpp:1209
static bool isBlacklisted(const QString &cleanFile)
Definition cpp.cpp:1232
static QSet< const ParseResults * > getResults(const ResultsCacheKey &key)
Definition cpp.cpp:1199
static void addIncludeCycle(const QSet< QString > &fileNames, const CppParserState &parserState)
Definition cpp.cpp:1242
void setInput(QTextStream &ts, const QString &fileName)
Definition cpp.cpp:247
void setTranslator(Translator *_tor)
Definition cpp.cpp:75
void setInput(const QString &in)
Definition cpp.cpp:240
void deleteResults()
Definition cpp.cpp:79
void parseInternal(ConversionData &cd, const QStringList &includeStack, QSet< QString > &inclusions)
Definition cpp.cpp:1669
CppParser(ParseResults *results=0)
Definition cpp.cpp:212
void parse(ConversionData &cd, const QStringList &includeStack, QSet< QString > &inclusions)
Definition cpp.cpp:1659
const ParseResults * recordResults(bool isHeader)
Definition cpp.cpp:2234
QHash< QString, QString > ExtraData
void setExtras(const ExtraData &extras)
void setExtras(const ExtraData &extras)
Definition translator.h:163
void append(const TranslatorMessage &msg)
int messageCount() const
Definition translator.h:146
bool tryVisit(int fileId)
Definition cpp.cpp:58
VisitRecorder()
Definition cpp.cpp:54
static bool isStringLiteralPrefix(const QStringView s)
Definition cpp.cpp:335
static const QString strclass
Definition cpp.cpp:353
static const QString strreturn
Definition cpp.cpp:363
QDebug operator<<(QDebug debug, const HashStringList &lst)
Definition cpp.cpp:45
static const QString strQCoreApplication
Definition cpp.cpp:1384
static const QString strQ_SIGNALS
Definition cpp.cpp:372
static const QString strnamespace
Definition cpp.cpp:358
static const QString strfinal
Definition cpp.cpp:356
static const QString strenum
Definition cpp.cpp:355
size_t qHash(const ResultsCacheKey &key, size_t seed)
Definition cpp.cpp:1171
static const QString strnullptr
Definition cpp.cpp:359
static const QString strsignals
Definition cpp.cpp:370
size_t qHash(const HashStringList &list)
Definition cpp.cpp:32
static const QString strCodecForTr
Definition cpp.cpp:1387
static const QString strpublic
Definition cpp.cpp:368
static const QString strQ_SLOTS
Definition cpp.cpp:371
static const QString strUnicodeUTF8
Definition cpp.cpp:1385
static const QString strprotected
Definition cpp.cpp:367
static const QString strLatin1
Definition cpp.cpp:1388
static int nextFileId
Definition cpp.cpp:50
static bool isHeader(const QString &name)
Definition cpp.cpp:1265
static const QString strNULL
Definition cpp.cpp:361
static const QString strstruct
Definition cpp.cpp:364
static const QString CppMagicComment
Definition cpp.cpp:18
static bool isRawStringLiteralPrefix(QStringView s)
Definition cpp.cpp:343
static const QString stroperator
Definition cpp.cpp:362
static const QString strusing
Definition cpp.cpp:365
static const QString strQ_OBJECT
Definition cpp.cpp:352
static const QString strQ_NULLPTR
Definition cpp.cpp:360
size_t qHash(const HashString &str)
Definition cpp.cpp:20
static const QString strQApplication
Definition cpp.cpp:1383
size_t qHash(const CppParserState &s, size_t seed)
Definition cpp.cpp:1161
static const QString strDefaultCodec
Definition cpp.cpp:1386
static const QString strprivate
Definition cpp.cpp:366
static const QString strfriend
Definition cpp.cpp:357
void loadCPP(Translator &translator, const QStringList &filenames, ConversionData &cd)
Definition cpp.cpp:2265
QDebug operator<<(QDebug debug, const HashString &s)
Definition cpp.cpp:27
static const QString strslots
Definition cpp.cpp:369
static const QString strdecltype
Definition cpp.cpp:354
QHash< QString, const Translator * > TranslatorHash
Definition cpp.h:133
QList< HashString > NamespaceList
Definition cpp.h:40
QHash< ResultsCacheKey, IncludeCycle * > IncludeCycleHash
Definition cpp.h:132
Combined button and popup list for selecting options.
bool operator==(const CppParserState &other) const
Definition cpp.h:95
NamespaceList functionContext
Definition cpp.h:91
QString functionContextUnresolved
Definition cpp.h:92
QString pendingContext
Definition cpp.h:93
QStack< qsizetype > namespaceDepths
Definition cpp.h:90
NamespaceList namespaces
Definition cpp.h:89
uint m_hash
Definition cpp.h:35
const QList< HashString > & value() const
Definition cpp.h:31
HashStringList(const QList< HashString > &list)
Definition cpp.h:30
QList< HashString > m_list
Definition cpp.h:34
bool operator==(const HashStringList &other) const
Definition cpp.h:32
QSet< const ParseResults * > results
Definition cpp.h:84
QSet< QString > fileNames
Definition cpp.h:83
QHash< HashString, Namespace * > children
Definition cpp.h:53
QString trQualification
Definition cpp.h:70
Namespace * classDef
Definition cpp.h:68
QHash< HashString, NamespaceList > aliases
Definition cpp.h:54
QList< HashStringList > usings
Definition cpp.h:55
Namespace()
Definition cpp.h:44
bool complained
Definition cpp.h:73
~Namespace()
Definition cpp.h:48
bool hasTrFunctions
Definition cpp.h:72
QSet< const ParseResults * > includes
Definition cpp.h:79
int fileId
Definition cpp.h:77
Namespace rootNamespace
Definition cpp.h:78
NamespaceList * resolved
Definition cpp.cpp:1004
const HashString & segment
Definition cpp.cpp:1003
QualifyOneData(const NamespaceList &ns, int nsc, const HashString &seg, NamespaceList *rslvd, QSet< HashStringList > *visited)
Definition cpp.cpp:996
const NamespaceList & namespaces
Definition cpp.cpp:1001
QSet< HashStringList > * visitedUsings
Definition cpp.cpp:1005
ResultsCacheKey(const QString &filePath, const CppParserState &state)
Definition cpp.h:117
ResultsCacheKey(const QString &filePath)
Definition cpp.h:112
bool operator==(const ResultsCacheKey &other) const
Definition cpp.h:123
const CppParserState parserState
Definition cpp.h:110
const QString cleanFile
Definition cpp.h:109