From ad3ddca91637ce96875e8b66a159bca6344175dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Tue, 6 Jan 2026 19:49:14 +0100 Subject: [PATCH 1/5] 1 --- gui/resultitem.h | 11 +++++++++++ gui/resultstree.cpp | 12 +++++++----- gui/test/resultstree/testresultstree.cpp | 19 +++++++++++++++++++ gui/test/resultstree/testresultstree.h | 1 + 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/gui/resultitem.h b/gui/resultitem.h index a7669d2a3b4..03e4f89dba5 100644 --- a/gui/resultitem.h +++ b/gui/resultitem.h @@ -41,9 +41,20 @@ class ResultItem : public QStandardItem Type getType() const { return mType; } + + void setIconFileName(const QString& iconFileName) { + mIconFileName = iconFileName; + if (!mIconFileName.isEmpty()) + setIcon(QIcon(iconFileName)); + } + + QString getIconFileName() const { + return mIconFileName; + } private: const Type mType; const int mErrorPathIndex; + QString mIconFileName; }; #endif // RESULTITEM_H diff --git a/gui/resultstree.cpp b/gui/resultstree.cpp index 78d56929b48..ed4cc8b0535 100644 --- a/gui/resultstree.cpp +++ b/gui/resultstree.cpp @@ -126,6 +126,10 @@ static QStringList getLabels() { QObject::tr("CWE")}; } +static Severity getSeverity(ReportType reportType, const ErrorItem& errorItem) { + return reportType == ReportType::normal ? errorItem.severity : getSeverityFromClassification(errorItem.classification); +} + ResultsTree::ResultsTree(QWidget * parent) : QTreeView(parent), mModel(new QStandardItemModel) @@ -160,6 +164,7 @@ void ResultsTree::setReportType(ReportType reportType) { QSharedPointer& errorItem = dynamic_cast(fileItem->child(j,0))->errorItem; errorItem->guideline = getGuideline(mReportType, mGuideline, errorItem->errorId, errorItem->severity); errorItem->classification = getClassification(mReportType, errorItem->guideline); + dynamic_cast(fileItem->child(j, COLUMN_FILE))->setIconFileName(severityToIcon(getSeverity(reportType, *errorItem))); fileItem->child(j, COLUMN_CERT_LEVEL)->setText(errorItem->classification); fileItem->child(j, COLUMN_CERT_RULE)->setText(errorItem->guideline); fileItem->child(j, COLUMN_MISRA_CLASSIFICATION)->setText(errorItem->classification); @@ -264,7 +269,7 @@ bool ResultsTree::addErrorItem(const ErrorItem& errorItem) ResultItem* stditem = addBacktraceFiles(fileItem, errorItemPtr, !showItem, - severityToIcon(errorItemPtr->severity), + severityToIcon(getSeverity(mReportType, *errorItemPtr)), ResultItem::Type::message, errorItemPtr->getMainLocIndex()); @@ -317,6 +322,7 @@ ResultItem *ResultsTree::addBacktraceFiles(ResultItem *parent, const int numberOfColumns = getLabels().size(); QList columns(numberOfColumns); columns[COLUMN_FILE] = createFilenameItem(errorItem, type, errorPathIndex); + columns[COLUMN_FILE]->setIconFileName(icon); columns[COLUMN_LINE] = createLineNumberItem(loc.line, errorItem, type, errorPathIndex); columns[COLUMN_SEVERITY] = createNormalItem(itemSeverity, errorItem, type, errorPathIndex); columns[COLUMN_SUMMARY] = createNormalItem(text, errorItem, type, errorPathIndex); @@ -340,10 +346,6 @@ ResultItem *ResultsTree::addBacktraceFiles(ResultItem *parent, setRowHidden(parent->rowCount() - 1, parent->index(), hide); - if (!icon.isEmpty()) { - list[COLUMN_FILE]->setIcon(QIcon(icon)); - } - return columns[COLUMN_FILE]; } diff --git a/gui/test/resultstree/testresultstree.cpp b/gui/test/resultstree/testresultstree.cpp index 8208ca0343e..e3135288925 100644 --- a/gui/test/resultstree/testresultstree.cpp +++ b/gui/test/resultstree/testresultstree.cpp @@ -292,6 +292,25 @@ void TestResultsTree::testReportType() const "missingReturn,Mandatory,17.4"); } +void TestResultsTree::testReportTypeIcon() const { + ResultsTree tree(nullptr); + tree.setReportType(ReportType::misraC2012); + tree.addErrorItem(createErrorItem("file1.c", 10, Severity::style, "some rule text", "premium-misra-c-2012-1.1")); // Required + tree.addErrorItem(createErrorItem("file1.c", 20, Severity::style, "some rule text", "premium-misra-c-2012-1.2")); // Advisory + tree.addErrorItem(createErrorItem("file1.c", 30, Severity::style, "some rule text", "premium-misra-c-2012-9.1")); // Mandatory + + const auto* model = dynamic_cast(tree.model()); + QVERIFY(model != nullptr); + const ResultItem* fileItem = dynamic_cast(model->item(0,0)); + + const ResultItem* err1 = dynamic_cast(fileItem->child(0,0)); + const ResultItem* err2 = dynamic_cast(fileItem->child(1,0)); + const ResultItem* err3 = dynamic_cast(fileItem->child(2,0)); + + QCOMPARE(err1->getIconFileName(), ":images/dialog-warning.png"); + QCOMPARE(err2->getIconFileName(), "style"); + QCOMPARE(err3->getIconFileName(), "error"); +} void TestResultsTree::testGetGuidelineError() const { diff --git a/gui/test/resultstree/testresultstree.h b/gui/test/resultstree/testresultstree.h index 108ed098eb5..8604dc81c6b 100644 --- a/gui/test/resultstree/testresultstree.h +++ b/gui/test/resultstree/testresultstree.h @@ -27,6 +27,7 @@ private slots: void multiLineResult() const; void resultsInSameFile() const; void testReportType() const; + void testReportTypeIcon() const; void testGetGuidelineError() const; void misraCReportShowClassifications() const; }; From 3bd9be7728c9899923f848912a95cbd6c1efd972 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Tue, 6 Jan 2026 19:52:54 +0100 Subject: [PATCH 2/5] test --- gui/test/resultstree/testresultstree.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/gui/test/resultstree/testresultstree.cpp b/gui/test/resultstree/testresultstree.cpp index e3135288925..231617f6d03 100644 --- a/gui/test/resultstree/testresultstree.cpp +++ b/gui/test/resultstree/testresultstree.cpp @@ -308,8 +308,18 @@ void TestResultsTree::testReportTypeIcon() const { const ResultItem* err3 = dynamic_cast(fileItem->child(2,0)); QCOMPARE(err1->getIconFileName(), ":images/dialog-warning.png"); - QCOMPARE(err2->getIconFileName(), "style"); - QCOMPARE(err3->getIconFileName(), "error"); + QCOMPARE(err2->getIconFileName(), ":images/applications-development.png"); + QCOMPARE(err3->getIconFileName(), ":images/dialog-error.png"); + + tree.setReportType(ReportType::normal); + QCOMPARE(err1->getIconFileName(), ":images/applications-development.png"); + QCOMPARE(err2->getIconFileName(), ":images/applications-development.png"); + QCOMPARE(err3->getIconFileName(), ":images/applications-development.png"); + + tree.setReportType(ReportType::misraC2012); + QCOMPARE(err1->getIconFileName(), ":images/dialog-warning.png"); + QCOMPARE(err2->getIconFileName(), ":images/applications-development.png"); + QCOMPARE(err3->getIconFileName(), ":images/dialog-error.png"); } void TestResultsTree::testGetGuidelineError() const From 92de881284bc1b53ba53df926848db174eb5b556 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Tue, 6 Jan 2026 20:13:05 +0100 Subject: [PATCH 3/5] suppress --- gui/resultitem.h | 1 + 1 file changed, 1 insertion(+) diff --git a/gui/resultitem.h b/gui/resultitem.h index 03e4f89dba5..5320121a21f 100644 --- a/gui/resultitem.h +++ b/gui/resultitem.h @@ -48,6 +48,7 @@ class ResultItem : public QStandardItem setIcon(QIcon(iconFileName)); } + // cppcheck-suppress unusedFunction; used in test-resultstree QString getIconFileName() const { return mIconFileName; } From 534a6501508a4cd5c003143384af897844e12b0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Tue, 6 Jan 2026 22:36:34 +0100 Subject: [PATCH 4/5] selfcheck --- gui/resultitem.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/resultitem.h b/gui/resultitem.h index 5320121a21f..a39606ad23d 100644 --- a/gui/resultitem.h +++ b/gui/resultitem.h @@ -49,7 +49,7 @@ class ResultItem : public QStandardItem } // cppcheck-suppress unusedFunction; used in test-resultstree - QString getIconFileName() const { + const QString& getIconFileName() const { return mIconFileName; } private: From 4477f90801f6cfe0d59f9c9f521b023fb38bdfd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 7 Jan 2026 18:57:56 +0100 Subject: [PATCH 5/5] selfcheck suppression --- .selfcheck_suppressions | 1 + 1 file changed, 1 insertion(+) diff --git a/.selfcheck_suppressions b/.selfcheck_suppressions index 1b6dcc1965b..7728225cd44 100644 --- a/.selfcheck_suppressions +++ b/.selfcheck_suppressions @@ -17,6 +17,7 @@ functionStatic:*/ui_fileview.h # --debug-warnings suppressions valueFlowBailout valueFlowBailoutIncompleteVar +valueFlowMaxIterations:gui/resultstree.cpp autoNoType:externals/simplecpp/simplecpp.cpp autoNoType:cli/*.cpp autoNoType:lib/*.cpp