File indexing completed on 2024-04-21 04:34:33
0001 /* 0002 * This file is part of KDevelop Krazy2 Plugin. 0003 * 0004 * Copyright 2012 Daniel Calviño Sánchez <danxuliu@gmail.com> 0005 * 0006 * This program is free software; you can redistribute it and/or 0007 * modify it under the terms of the GNU General Public License 0008 * as published by the Free Software Foundation; either version 2 0009 * of the License, or (at your option) any later version. 0010 * 0011 * This program is distributed in the hope that it will be useful, 0012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0014 * GNU General Public License for more details. 0015 * 0016 * You should have received a copy of the GNU General Public License 0017 * along with this program. If not, see <http://www.gnu.org/licenses/>. 0018 */ 0019 0020 #include "analysisresults.h" 0021 0022 #include "checker.h" 0023 #include "issue.h" 0024 0025 //public: 0026 0027 AnalysisResults::AnalysisResults() { 0028 } 0029 0030 AnalysisResults::~AnalysisResults() { 0031 foreach (const Checker* checker, m_checkers) { 0032 delete checker; 0033 } 0034 0035 foreach (const Issue* issue, m_issues) { 0036 delete issue; 0037 } 0038 } 0039 0040 void AnalysisResults::addChecker(const Checker* checker) { 0041 Q_ASSERT(checker); 0042 Q_ASSERT(!checker->fileType().isEmpty()); 0043 Q_ASSERT(!checker->name().isEmpty()); 0044 0045 QString key = checker->fileType() + '/' + checker->name(); 0046 0047 if (m_checkers.contains(key)) { 0048 return; 0049 } 0050 0051 m_checkers.insert(key, checker); 0052 } 0053 0054 const Checker* AnalysisResults::findChecker(const QString& fileType, 0055 const QString& name) const { 0056 return m_checkers.value(fileType + '/' + name); 0057 } 0058 0059 void AnalysisResults::addIssue(const Issue* issue) { 0060 Q_ASSERT(issue); 0061 Q_ASSERT(!issue->fileName().isEmpty()); 0062 Q_ASSERT(issue->checker()); 0063 Q_ASSERT(m_checkers.values().contains(issue->checker())); 0064 0065 m_issues.append(issue); 0066 } 0067 0068 const QList<const Issue*>& AnalysisResults::issues() const { 0069 return m_issues; 0070 } 0071 0072 void AnalysisResults::addAnalysisResults(const AnalysisResults* analysisResults) { 0073 foreach (const Issue* issue, analysisResults->issues()) { 0074 const Checker* checker = findChecker(issue->checker()->fileType(), issue->checker()->name()); 0075 if (!checker) { 0076 const Checker* checkerCopy = new Checker(*(issue->checker())); 0077 addChecker(checkerCopy); 0078 checker = checkerCopy; 0079 } 0080 0081 bool duplicated = false; 0082 foreach (const Issue* issueToCompare, m_issues) { 0083 if (issue->checker()->fileType() == issueToCompare->checker()->fileType() && 0084 issue->checker()->name() == issueToCompare->checker()->name() && 0085 issue->fileName() == issueToCompare->fileName() && 0086 issue->line() == issueToCompare->line()) { 0087 duplicated = true; 0088 } 0089 } 0090 0091 if (!duplicated) { 0092 auto issueCopy = new Issue(*issue); 0093 issueCopy->setChecker(checker); 0094 addIssue(issueCopy); 0095 } 0096 } 0097 }