Skip to content

Commit d2c363f

Browse files
authored
moved FileSettings::fileIndex to FileWithDetails::mFsFileId / cleanups (#8104)
to distinct it from `simplecpp::Location::fileIndex`
1 parent cca158f commit d2c363f

13 files changed

Lines changed: 76 additions & 62 deletions

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -649,7 +649,7 @@ $(libcppdir)/settings.o: lib/settings.cpp externals/picojson/picojson.h lib/addo
649649
$(libcppdir)/standards.o: lib/standards.cpp externals/simplecpp/simplecpp.h lib/config.h lib/standards.h lib/utils.h
650650
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/standards.cpp
651651

652-
$(libcppdir)/summaries.o: lib/summaries.cpp lib/addoninfo.h lib/analyzerinfo.h lib/checkers.h lib/config.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/smallvector.h lib/sourcelocation.h lib/standards.h lib/summaries.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h
652+
$(libcppdir)/summaries.o: lib/summaries.cpp lib/addoninfo.h lib/analyzerinfo.h lib/checkers.h lib/config.h lib/errortypes.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/smallvector.h lib/sourcelocation.h lib/standards.h lib/summaries.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h
653653
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/summaries.cpp
654654

655655
$(libcppdir)/suppressions.o: lib/suppressions.cpp externals/tinyxml2/tinyxml2.h lib/addoninfo.h lib/checkers.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/filesettings.h lib/library.h lib/mathlib.h lib/path.h lib/pathmatch.h lib/platform.h lib/settings.h lib/smallvector.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h lib/xml.h

gui/checkthread.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ void CheckThread::runAddonsAndTools(const Settings& settings, const FileSettings
238238

239239
const std::string &buildDir = settings.buildDir;
240240
if (!buildDir.empty()) {
241-
analyzerInfoFile = QString::fromStdString(AnalyzerInformation::getAnalyzerInfoFile(buildDir, fileSettings->filename(), fileSettings->cfg, fileSettings->fileIndex));
241+
analyzerInfoFile = QString::fromStdString(AnalyzerInformation::getAnalyzerInfoFile(buildDir, fileSettings->sfilename(), fileSettings->cfg, fileSettings->file.fsFileId()));
242242

243243
QStringList args2(args);
244244
args2.insert(0,"-E");

lib/analyzerinfo.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ std::string AnalyzerInformation::getFilesTxt(const std::list<std::string> &sourc
6969

7070
for (const FileSettings &fs : fileSettings) {
7171
const std::string afile = getFilename(fs.filename());
72-
const std::string id = fs.fileIndex > 0 ? std::to_string(fs.fileIndex) : "";
72+
const std::string id = fs.file.fsFileId() > 0 ? std::to_string(fs.file.fsFileId()) : "";
7373
ret << afile << ".a" << (++fileCount[afile]) << sep << fs.cfg << sep << id << sep << Path::simplifyPath(fs.filename()) << std::endl;
7474
}
7575

@@ -127,11 +127,11 @@ std::string AnalyzerInformation::getAnalyzerInfoFileFromFilesTxt(std::istream& f
127127
return "";
128128
}
129129

130-
std::string AnalyzerInformation::getAnalyzerInfoFile(const std::string &buildDir, const std::string &sourcefile, const std::string &cfg, int fileIndex)
130+
std::string AnalyzerInformation::getAnalyzerInfoFile(const std::string &buildDir, const std::string &sourcefile, const std::string &cfg, std::size_t fsFileId)
131131
{
132132
std::ifstream fin(Path::join(buildDir, "files.txt"));
133133
if (fin.is_open()) {
134-
const std::string& ret = getAnalyzerInfoFileFromFilesTxt(fin, sourcefile, cfg, fileIndex);
134+
const std::string& ret = getAnalyzerInfoFileFromFilesTxt(fin, sourcefile, cfg, fsFileId);
135135
if (!ret.empty())
136136
return Path::join(buildDir, ret);
137137
}
@@ -145,13 +145,13 @@ std::string AnalyzerInformation::getAnalyzerInfoFile(const std::string &buildDir
145145
return Path::join(buildDir, std::move(filename)) + ".analyzerinfo";
146146
}
147147

148-
bool AnalyzerInformation::analyzeFile(const std::string &buildDir, const std::string &sourcefile, const std::string &cfg, int fileIndex, std::size_t hash, std::list<ErrorMessage> &errors)
148+
bool AnalyzerInformation::analyzeFile(const std::string &buildDir, const std::string &sourcefile, const std::string &cfg, std::size_t fsFileId, std::size_t hash, std::list<ErrorMessage> &errors)
149149
{
150150
if (buildDir.empty() || sourcefile.empty())
151151
return true;
152152
close();
153153

154-
const std::string analyzerInfoFile = AnalyzerInformation::getAnalyzerInfoFile(buildDir,sourcefile,cfg,fileIndex);
154+
const std::string analyzerInfoFile = AnalyzerInformation::getAnalyzerInfoFile(buildDir,sourcefile,cfg,fsFileId);
155155

156156
tinyxml2::XMLDocument analyzerInfoDoc;
157157
const tinyxml2::XMLError xmlError = analyzerInfoDoc.LoadFile(analyzerInfoFile.c_str());
@@ -191,10 +191,10 @@ bool AnalyzerInformation::Info::parse(const std::string& filesTxtLine) {
191191
return false;
192192

193193
if (sep3 == sep2 + 1)
194-
fileIndex = 0;
194+
fsFileId = 0;
195195
else {
196196
try {
197-
fileIndex = std::stoi(filesTxtLine.substr(sep2+1, sep3-sep2-1));
197+
fsFileId = std::stoi(filesTxtLine.substr(sep2+1, sep3-sep2-1));
198198
} catch (const std::exception&) {
199199
return false;
200200
}

lib/analyzerinfo.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,10 @@ class CPPCHECKLIB AnalyzerInformation {
6161

6262
/** Close current TU.analyzerinfo file */
6363
void close();
64-
bool analyzeFile(const std::string &buildDir, const std::string &sourcefile, const std::string &cfg, int fileIndex, std::size_t hash, std::list<ErrorMessage> &errors);
64+
bool analyzeFile(const std::string &buildDir, const std::string &sourcefile, const std::string &cfg, std::size_t fsFileId, std::size_t hash, std::list<ErrorMessage> &errors);
6565
void reportErr(const ErrorMessage &msg);
6666
void setFileInfo(const std::string &check, const std::string &fileInfo);
67-
static std::string getAnalyzerInfoFile(const std::string &buildDir, const std::string &sourcefile, const std::string &cfg, int fileIndex);
67+
static std::string getAnalyzerInfoFile(const std::string &buildDir, const std::string &sourcefile, const std::string &cfg, std::size_t fsFileId);
6868

6969
static const char sep = ':';
7070

@@ -73,7 +73,7 @@ class CPPCHECKLIB AnalyzerInformation {
7373
bool parse(const std::string& filesTxtLine);
7474
std::string afile;
7575
std::string cfg;
76-
int fileIndex = 0;
76+
std::size_t fsFileId = 0;
7777
std::string sourceFile;
7878
};
7979

lib/cppcheck.cpp

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -330,17 +330,17 @@ static std::vector<std::string> split(const std::string &str, const std::string
330330
return ret;
331331
}
332332

333-
static std::string getDumpFileName(const Settings& settings, const std::string& filename, int fileIndex)
333+
static std::string getDumpFileName(const Settings& settings, const FileWithDetails& file)
334334
{
335335
std::string extension = ".dump";
336-
if (fileIndex > 0)
337-
extension = "." + std::to_string(fileIndex) + extension;
336+
if (file.fsFileId() > 0)
337+
extension = "." + std::to_string(file.fsFileId()) + extension;
338338
if (!settings.dump && settings.buildDir.empty())
339339
extension = "." + std::to_string(settings.pid) + extension;
340340

341341
if (!settings.dump && !settings.buildDir.empty())
342-
return AnalyzerInformation::getAnalyzerInfoFile(settings.buildDir, filename, "", fileIndex) + extension;
343-
return filename + extension;
342+
return AnalyzerInformation::getAnalyzerInfoFile(settings.buildDir, file.spath(), "", file.fsFileId()) + extension;
343+
return file.spath() + extension;
344344
}
345345

346346
static std::string getCtuInfoFileName(const std::string &dumpFile)
@@ -350,13 +350,12 @@ static std::string getCtuInfoFileName(const std::string &dumpFile)
350350

351351
static void createDumpFile(const Settings& settings,
352352
const FileWithDetails& file,
353-
int fileIndex,
354353
std::ofstream& fdump,
355354
std::string& dumpFile)
356355
{
357356
if (!settings.dump && settings.addons.empty())
358357
return;
359-
dumpFile = getDumpFileName(settings, file.spath(), fileIndex);
358+
dumpFile = getDumpFileName(settings, file);
360359

361360
fdump.open(dumpFile);
362361
if (!fdump.is_open())
@@ -660,7 +659,7 @@ static std::string getClangFlags(const Settings& setting, Standards::Language la
660659
}
661660

662661
// TODO: clear error list before returning
663-
unsigned int CppCheck::checkClang(const FileWithDetails &file, int fileIndex)
662+
unsigned int CppCheck::checkClang(const FileWithDetails &file)
664663
{
665664
// TODO: clear exitcode
666665

@@ -673,7 +672,7 @@ unsigned int CppCheck::checkClang(const FileWithDetails &file, int fileIndex)
673672
// TODO: get language from FileWithDetails object
674673
std::string clangStderr;
675674
if (!mSettings.buildDir.empty())
676-
clangStderr = AnalyzerInformation::getAnalyzerInfoFile(mSettings.buildDir, file.spath(), "", fileIndex) + ".clang-stderr";
675+
clangStderr = AnalyzerInformation::getAnalyzerInfoFile(mSettings.buildDir, file.spath(), "", file.fsFileId()) + ".clang-stderr";
677676

678677
std::string exe = mSettings.clangExecutable;
679678
#ifdef _WIN32
@@ -747,7 +746,7 @@ unsigned int CppCheck::checkClang(const FileWithDetails &file, int fileIndex)
747746
// create dumpfile
748747
std::ofstream fdump;
749748
std::string dumpFile;
750-
createDumpFile(mSettings, file, fileIndex, fdump, dumpFile);
749+
createDumpFile(mSettings, file, fdump, dumpFile);
751750
if (fdump.is_open()) {
752751
fdump << getLibraryDumpData();
753752
// TODO: use tinyxml2 to create XML
@@ -791,9 +790,9 @@ unsigned int CppCheck::check(const FileWithDetails &file)
791790

792791
unsigned int returnValue;
793792
if (mSettings.clang)
794-
returnValue = checkClang(file, 0);
793+
returnValue = checkClang(file);
795794
else
796-
returnValue = checkFile(file, "", 0);
795+
returnValue = checkFile(file, "");
797796

798797
// TODO: call analyseClangTidy()
799798

@@ -802,7 +801,7 @@ unsigned int CppCheck::check(const FileWithDetails &file)
802801

803802
unsigned int CppCheck::checkBuffer(const FileWithDetails &file, const char* data, std::size_t size)
804803
{
805-
return checkBuffer(file, "", 0, data, size);
804+
return checkBuffer(file, "", data, size);
806805
}
807806

808807
unsigned int CppCheck::check(const FileSettings &fs)
@@ -838,7 +837,7 @@ unsigned int CppCheck::check(const FileSettings &fs)
838837
}
839838
// need to pass the externally provided ErrorLogger instead of our internal wrapper
840839
CppCheck temp(tempSettings, mSuppressions, mErrorLoggerDirect, mTimerResults, mUseGlobalSuppressions, mExecuteCommand);
841-
const unsigned int returnValue = temp.checkFile(fs.file, fs.cfg, fs.fileIndex);
840+
const unsigned int returnValue = temp.checkFile(fs.file, fs.cfg);
842841
if (mUnusedFunctionsCheck)
843842
mUnusedFunctionsCheck->updateFunctionData(*temp.mUnusedFunctionsCheck);
844843
while (!temp.mFileInfo.empty()) {
@@ -875,20 +874,20 @@ std::size_t CppCheck::calculateHash(const Preprocessor& preprocessor, const std:
875874
return preprocessor.calculateHash(toolinfo.str());
876875
}
877876

878-
unsigned int CppCheck::checkBuffer(const FileWithDetails &file, const std::string &cfgname, int fileIndex, const char* data, std::size_t size)
877+
unsigned int CppCheck::checkBuffer(const FileWithDetails &file, const std::string &cfgname, const char* data, std::size_t size)
879878
{
880879
const auto f = [&file, data, size](std::vector<std::string>& files, simplecpp::OutputList* outputList) {
881880
return simplecpp::TokenList{{data, size}, files, file.spath(), outputList};
882881
};
883-
return checkInternal(file, cfgname, fileIndex, f);
882+
return checkInternal(file, cfgname, f);
884883
}
885884

886-
unsigned int CppCheck::checkFile(const FileWithDetails& file, const std::string &cfgname, int fileIndex)
885+
unsigned int CppCheck::checkFile(const FileWithDetails& file, const std::string &cfgname)
887886
{
888887
const auto f = [&file](std::vector<std::string>& files, simplecpp::OutputList* outputList) {
889888
return simplecpp::TokenList{file.spath(), files, outputList};
890889
};
891-
return checkInternal(file, cfgname, fileIndex, f);
890+
return checkInternal(file, cfgname, f);
892891
}
893892

894893
void CppCheck::checkPlistOutput(const FileWithDetails& file, const std::vector<std::string>& files)
@@ -906,7 +905,7 @@ void CppCheck::checkPlistOutput(const FileWithDetails& file, const std::vector<s
906905
}
907906
}
908907

909-
unsigned int CppCheck::checkInternal(const FileWithDetails& file, const std::string &cfgname, int fileIndex, const CreateTokenListFn& createTokenList)
908+
unsigned int CppCheck::checkInternal(const FileWithDetails& file, const std::string &cfgname, const CreateTokenListFn& createTokenList)
910909
{
911910
// TODO: move to constructor when CppCheck no longer owns the settings
912911
if (mSettings.checks.isEnabled(Checks::unusedFunction) && !mUnusedFunctionsCheck)
@@ -974,7 +973,7 @@ unsigned int CppCheck::checkInternal(const FileWithDetails& file, const std::str
974973
mLogger->setAnalyzerInfo(nullptr);
975974

976975
std::list<ErrorMessage> errors;
977-
analyzerInformation->analyzeFile(mSettings.buildDir, file.spath(), cfgname, fileIndex, hash, errors);
976+
analyzerInformation->analyzeFile(mSettings.buildDir, file.spath(), cfgname, file.fsFileId(), hash, errors);
978977
analyzerInformation->setFileInfo("CheckUnusedFunctions", mUnusedFunctionsCheck->analyzerInfo(tokenizer));
979978
analyzerInformation->close();
980979
}
@@ -1020,7 +1019,7 @@ unsigned int CppCheck::checkInternal(const FileWithDetails& file, const std::str
10201019
// Calculate hash so it can be compared with old hash / future hashes
10211020
const std::size_t hash = calculateHash(preprocessor, file.spath());
10221021
std::list<ErrorMessage> errors;
1023-
if (!analyzerInformation->analyzeFile(mSettings.buildDir, file.spath(), cfgname, fileIndex, hash, errors)) {
1022+
if (!analyzerInformation->analyzeFile(mSettings.buildDir, file.spath(), cfgname, file.fsFileId(), hash, errors)) {
10241023
while (!errors.empty()) {
10251024
mErrorLogger.reportErr(errors.front());
10261025
errors.pop_front();
@@ -1077,7 +1076,7 @@ unsigned int CppCheck::checkInternal(const FileWithDetails& file, const std::str
10771076
// write dump file xml prolog
10781077
std::ofstream fdump;
10791078
std::string dumpFile;
1080-
createDumpFile(mSettings, file, fileIndex, fdump, dumpFile);
1079+
createDumpFile(mSettings, file, fdump, dumpFile);
10811080
if (fdump.is_open()) {
10821081
fdump << getLibraryDumpData();
10831082
fdump << dumpProlog;
@@ -1200,7 +1199,7 @@ unsigned int CppCheck::checkInternal(const FileWithDetails& file, const std::str
12001199
#endif
12011200

12021201
// Simplify tokens into normal form, skip rest of iteration if failed
1203-
if (!tokenizer.simplifyTokens1(currentConfig, fileIndex))
1202+
if (!tokenizer.simplifyTokens1(currentConfig, file.fsFileId()))
12041203
continue;
12051204

12061205
// dump xml if --dump
@@ -1631,12 +1630,12 @@ void CppCheck::executeAddonsWholeProgram(const std::list<FileWithDetails> &files
16311630

16321631
std::vector<std::string> ctuInfoFiles;
16331632
for (const auto &f: files) {
1634-
const std::string &dumpFileName = getDumpFileName(mSettings, f.path(), 0);
1633+
const std::string &dumpFileName = getDumpFileName(mSettings, f);
16351634
ctuInfoFiles.push_back(getCtuInfoFileName(dumpFileName));
16361635
}
16371636

1638-
for (const auto &f: fileSettings) {
1639-
const std::string &dumpFileName = getDumpFileName(mSettings, f.filename(), f.fileIndex);
1637+
for (const auto &fs: fileSettings) {
1638+
const std::string &dumpFileName = getDumpFileName(mSettings, fs.file);
16401639
ctuInfoFiles.push_back(getCtuInfoFileName(dumpFileName));
16411640
}
16421641

@@ -1748,7 +1747,7 @@ void CppCheck::analyseClangTidy(const FileSettings &fileSettings)
17481747
std::string line;
17491748

17501749
if (!mSettings.buildDir.empty()) {
1751-
const std::string analyzerInfoFile = AnalyzerInformation::getAnalyzerInfoFile(mSettings.buildDir, fileSettings.filename(), "", fileSettings.fileIndex);
1750+
const std::string analyzerInfoFile = AnalyzerInformation::getAnalyzerInfoFile(mSettings.buildDir, fileSettings.sfilename(), "", fileSettings.file.fsFileId());
17521751
std::ofstream fcmd(analyzerInfoFile + ".clang-tidy-cmd");
17531752
fcmd << istr.str();
17541753
}

lib/cppcheck.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ class CPPCHECKLIB CppCheck {
179179
* @param cfgname cfg name
180180
* @return number of errors found
181181
*/
182-
unsigned int checkFile(const FileWithDetails& file, const std::string &cfgname, int fileIndex);
182+
unsigned int checkFile(const FileWithDetails& file, const std::string &cfgname);
183183

184184
void checkPlistOutput(const FileWithDetails& file, const std::vector<std::string>& files);
185185

@@ -191,7 +191,7 @@ class CPPCHECKLIB CppCheck {
191191
* @param size the size of the data to be read
192192
* @return number of errors found
193193
*/
194-
unsigned int checkBuffer(const FileWithDetails& file, const std::string &cfgname, int fileIndex, const char* data, std::size_t size);
194+
unsigned int checkBuffer(const FileWithDetails& file, const std::string &cfgname, const char* data, std::size_t size);
195195

196196
// TODO: should use simplecpp::OutputList
197197
using CreateTokenListFn = std::function<simplecpp::TokenList (std::vector<std::string>&, std::list<simplecpp::Output>*)>;
@@ -203,7 +203,7 @@ class CPPCHECKLIB CppCheck {
203203
* @param createTokenList a function to create the simplecpp::TokenList with
204204
* @return number of errors found
205205
*/
206-
unsigned int checkInternal(const FileWithDetails& file, const std::string &cfgname, int fileIndex, const CreateTokenListFn& createTokenList);
206+
unsigned int checkInternal(const FileWithDetails& file, const std::string &cfgname, const CreateTokenListFn& createTokenList);
207207

208208
/**
209209
* @brief Check normal tokens
@@ -232,7 +232,7 @@ class CPPCHECKLIB CppCheck {
232232
void executeRules(const std::string &tokenlist, const TokenList &list);
233233
#endif
234234

235-
unsigned int checkClang(const FileWithDetails &file, int fileIndex);
235+
unsigned int checkClang(const FileWithDetails &file);
236236

237237
const Settings& mSettings;
238238
Suppressions& mSuppressions;

lib/filesettings.h

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,20 @@ class FileWithDetails
3535
{
3636
public:
3737
FileWithDetails(std::string path, Standards::Language lang, std::size_t size)
38-
: mPath(std::move(path))
39-
, mPathSimplified(Path::simplifyPath(mPath))
40-
, mLang(lang)
38+
: mLang(lang)
4139
, mSize(size)
4240
{
41+
setPath(std::move(path));
4342
if (mPath.empty())
4443
throw std::runtime_error("empty path specified");
4544
}
4645

46+
void setPath(std::string path)
47+
{
48+
mPath = std::move(path);
49+
mPathSimplified = Path::simplifyPath(mPath);
50+
}
51+
4752
const std::string& path() const
4853
{
4954
return mPath;
@@ -68,11 +73,22 @@ class FileWithDetails
6873
{
6974
return mLang;
7075
}
76+
77+
std::size_t fsFileId() const
78+
{
79+
return mFsFileId;
80+
}
81+
82+
void setFsFileId(std::size_t fsFileId)
83+
{
84+
mFsFileId = fsFileId;
85+
}
7186
private:
7287
std::string mPath;
7388
std::string mPathSimplified;
7489
Standards::Language mLang = Standards::Language::None;
7590
std::size_t mSize;
91+
std::size_t mFsFileId{0};
7692
};
7793

7894
/** File settings. Multiple configurations for a file is allowed. */
@@ -81,14 +97,12 @@ struct CPPCHECKLIB FileSettings {
8197
: file(std::move(path), lang, size)
8298
{}
8399

84-
int fileIndex = 0;
85100
std::string cfg;
86101
FileWithDetails file;
87102
const std::string& filename() const
88103
{
89104
return file.path();
90105
}
91-
// cppcheck-suppress unusedFunction
92106
const std::string& sfilename() const
93107
{
94108
return file.spath();

0 commit comments

Comments
 (0)