Skip to content

Commit c5f9e85

Browse files
committed
GUI: Add configuration for max recursion in template instantiation
1 parent f569bc7 commit c5f9e85

6 files changed

Lines changed: 64 additions & 2 deletions

File tree

gui/mainwindow.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -908,6 +908,7 @@ Settings MainWindow::getCppcheckSettings()
908908
}
909909

910910
result.maxCtuDepth = mProjectFile->getMaxCtuDepth();
911+
result.maxTemplateRecursion = mProjectFile->getMaxTemplateRecursion();
911912
result.checkHeaders = mProjectFile->getCheckHeaders();
912913
result.checkUnusedTemplates = mProjectFile->getCheckUnusedTemplates();
913914
result.safeChecks.classes = mProjectFile->safeChecks.classes;

gui/projectfile.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ ProjectFile::ProjectFile(const QString &filename, QObject *parent) :
4444

4545
void ProjectFile::clear()
4646
{
47+
const Settings settings;
4748
clangParser = false;
4849
bugHunting = false;
4950
mRootPath.clear();
@@ -64,7 +65,8 @@ void ProjectFile::clear()
6465
mAnalyzeAllVsConfigs = false;
6566
mCheckHeaders = true;
6667
mCheckUnusedTemplates = false;
67-
mMaxCtuDepth = 10;
68+
mMaxCtuDepth = settings.maxCtuDepth;
69+
mMaxTemplateRecursion = settings.maxTemplateRecursion;
6870
mCheckUnknownFunctionReturn.clear();
6971
safeChecks.clear();
7072
mVsConfigurations.clear();
@@ -187,6 +189,9 @@ bool ProjectFile::read(const QString &filename)
187189
if (xmlReader.name() == CppcheckXml::MaxCtuDepthElementName)
188190
mMaxCtuDepth = readInt(xmlReader, mMaxCtuDepth);
189191

192+
if (xmlReader.name() == CppcheckXml::MaxTemplateRecursionElementName)
193+
mMaxTemplateRecursion = readInt(xmlReader, mMaxTemplateRecursion);
194+
190195
// VSConfiguration
191196
if (xmlReader.name() == CppcheckXml::VSConfigurationElementName)
192197
readVsConfigurations(xmlReader);
@@ -786,6 +791,10 @@ bool ProjectFile::write(const QString &filename)
786791
xmlWriter.writeCharacters(QString::number(mMaxCtuDepth));
787792
xmlWriter.writeEndElement();
788793

794+
xmlWriter.writeStartElement(CppcheckXml::MaxTemplateRecursionElementName);
795+
xmlWriter.writeCharacters(QString::number(mMaxTemplateRecursion));
796+
xmlWriter.writeEndElement();
797+
789798
if (!mIncludeDirs.isEmpty()) {
790799
xmlWriter.writeStartElement(CppcheckXml::IncludeDirElementName);
791800
foreach (QString incdir, mIncludeDirs) {

gui/projectfile.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,14 @@ class ProjectFile : public QObject {
208208
mMaxCtuDepth = maxCtuDepth;
209209
}
210210

211+
int getMaxTemplateRecursion() const {
212+
return mMaxTemplateRecursion;
213+
}
214+
215+
void setMaxTemplateRecursion(int maxTemplateRecursion) {
216+
mMaxTemplateRecursion = maxTemplateRecursion;
217+
}
218+
211219
const std::map<std::string,std::string>& getFunctionContracts() const {
212220
return mFunctionContracts;
213221
}
@@ -538,6 +546,9 @@ class ProjectFile : public QObject {
538546
/** Max CTU depth */
539547
int mMaxCtuDepth;
540548

549+
/** Max template instantiation recursion */
550+
int mMaxTemplateRecursion;
551+
541552
QStringList mCheckUnknownFunctionReturn;
542553

543554
};

gui/projectfiledialog.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ void ProjectFileDialog::loadFromProjectFile(const ProjectFile *projectFile)
260260
mUI.mCheckHeaders->setChecked(projectFile->getCheckHeaders());
261261
mUI.mCheckUnusedTemplates->setChecked(projectFile->getCheckUnusedTemplates());
262262
mUI.mMaxCtuDepth->setValue(projectFile->getMaxCtuDepth());
263+
mUI.mMaxTemplateRecursion->setValue(projectFile->getMaxTemplateRecursion());
263264
if (projectFile->clangParser)
264265
mUI.mBtnClangParser->setChecked(true);
265266
else
@@ -361,6 +362,7 @@ void ProjectFileDialog::saveToProjectFile(ProjectFile *projectFile) const
361362
projectFile->setCheckHeaders(mUI.mCheckHeaders->isChecked());
362363
projectFile->setCheckUnusedTemplates(mUI.mCheckUnusedTemplates->isChecked());
363364
projectFile->setMaxCtuDepth(mUI.mMaxCtuDepth->value());
365+
projectFile->setMaxTemplateRecursion(mUI.mMaxTemplateRecursion->value());
364366
projectFile->setIncludes(getIncludePaths());
365367
projectFile->setDefines(getDefines());
366368
projectFile->setUndefines(getUndefines());

gui/projectfiledialog.ui

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,11 @@
520520
</widget>
521521
</item>
522522
<item>
523-
<widget class="QSpinBox" name="mMaxCtuDepth"/>
523+
<widget class="QSpinBox" name="mMaxCtuDepth">
524+
<property name="value">
525+
<number>10</number>
526+
</property>
527+
</widget>
524528
</item>
525529
<item>
526530
<spacer name="horizontalSpacer">
@@ -537,6 +541,40 @@
537541
</item>
538542
</layout>
539543
</item>
544+
<item>
545+
<layout class="QHBoxLayout" name="horizontalLayout_9">
546+
<item>
547+
<widget class="QLabel" name="label_4">
548+
<property name="text">
549+
<string>Max recursion in template instantiation</string>
550+
</property>
551+
</widget>
552+
</item>
553+
<item>
554+
<widget class="QSpinBox" name="mMaxTemplateRecursion">
555+
<property name="maximum">
556+
<number>1000</number>
557+
</property>
558+
<property name="value">
559+
<number>100</number>
560+
</property>
561+
</widget>
562+
</item>
563+
<item>
564+
<spacer name="horizontalSpacer_3">
565+
<property name="orientation">
566+
<enum>Qt::Horizontal</enum>
567+
</property>
568+
<property name="sizeHint" stdset="0">
569+
<size>
570+
<width>40</width>
571+
<height>20</height>
572+
</size>
573+
</property>
574+
</spacer>
575+
</item>
576+
</layout>
577+
</item>
540578
</layout>
541579
</widget>
542580
</item>

lib/importproject.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ namespace CppcheckXml {
164164
const char CheckHeadersElementName[] = "check-headers";
165165
const char CheckUnusedTemplatesElementName[] = "check-unused-templates";
166166
const char MaxCtuDepthElementName[] = "max-ctu-depth";
167+
const char MaxTemplateRecursionElementName[] = "max-template-recursion";
167168
const char CheckUnknownFunctionReturn[] = "check-unknown-function-return-values";
168169
const char ClangTidy[] = "clang-tidy";
169170
const char Name[] = "name";

0 commit comments

Comments
 (0)