Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .selfcheck_suppressions
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
12 changes: 12 additions & 0 deletions gui/resultitem.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,21 @@ class ResultItem : public QStandardItem
Type getType() const {
return mType;
}

void setIconFileName(const QString& iconFileName) {
mIconFileName = iconFileName;
if (!mIconFileName.isEmpty())
setIcon(QIcon(iconFileName));
}

// cppcheck-suppress unusedFunction; used in test-resultstree
const QString& getIconFileName() const {
return mIconFileName;
}
private:
const Type mType;
const int mErrorPathIndex;
QString mIconFileName;
};

#endif // RESULTITEM_H
12 changes: 7 additions & 5 deletions gui/resultstree.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -160,6 +164,7 @@ void ResultsTree::setReportType(ReportType reportType) {
QSharedPointer<ErrorItem>& errorItem = dynamic_cast<ResultItem*>(fileItem->child(j,0))->errorItem;
errorItem->guideline = getGuideline(mReportType, mGuideline, errorItem->errorId, errorItem->severity);
errorItem->classification = getClassification(mReportType, errorItem->guideline);
dynamic_cast<ResultItem*>(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);
Expand Down Expand Up @@ -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());

Expand Down Expand Up @@ -317,6 +322,7 @@ ResultItem *ResultsTree::addBacktraceFiles(ResultItem *parent,
const int numberOfColumns = getLabels().size();
QList<ResultItem*> 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);
Expand All @@ -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];
}

Expand Down
29 changes: 29 additions & 0 deletions gui/test/resultstree/testresultstree.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,35 @@ 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<QStandardItemModel*>(tree.model());
QVERIFY(model != nullptr);
const ResultItem* fileItem = dynamic_cast<ResultItem*>(model->item(0,0));

const ResultItem* err1 = dynamic_cast<ResultItem*>(fileItem->child(0,0));
const ResultItem* err2 = dynamic_cast<ResultItem*>(fileItem->child(1,0));
const ResultItem* err3 = dynamic_cast<ResultItem*>(fileItem->child(2,0));

QCOMPARE(err1->getIconFileName(), ":images/dialog-warning.png");
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
{
Expand Down
1 change: 1 addition & 0 deletions gui/test/resultstree/testresultstree.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ private slots:
void multiLineResult() const;
void resultsInSameFile() const;
void testReportType() const;
void testReportTypeIcon() const;
void testGetGuidelineError() const;
void misraCReportShowClassifications() const;
};
Loading