cppcheck/gui/threadhandler.h

274 lines
6.2 KiB
C
Raw Permalink Normal View History

/*
* Cppcheck - A tool for static C/C++ code analysis
2023-01-28 10:16:34 +01:00
* Copyright (C) 2007-2023 Cppcheck team.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef THREADHANDLER_H
#define THREADHANDLER_H
2022-02-02 16:17:28 +01:00
#include "suppressions.h"
#include "threadresult.h"
#include <set>
#include <QDateTime>
#include <QElapsedTimer>
#include <QList>
2022-02-02 16:17:28 +01:00
#include <QObject>
#include <QString>
2022-02-02 16:17:28 +01:00
#include <QStringList>
class ResultsView;
class CheckThread;
class QSettings;
class Settings;
class ImportProject;
class ErrorItem;
/// @addtogroup GUI
/// @{
/**
2021-08-07 20:51:18 +02:00
* @brief This class handles creating threadresult and starting threads
*
*/
2011-10-13 20:53:06 +02:00
class ThreadHandler : public QObject {
Q_OBJECT
public:
explicit ThreadHandler(QObject *parent = nullptr);
~ThreadHandler() override;
/**
2021-08-07 20:51:18 +02:00
* @brief Set the number of threads to use
* @param count The number of threads to use
*/
2017-07-28 12:39:28 +02:00
void setThreadCount(const int count);
/**
2021-08-07 20:51:18 +02:00
* @brief Initialize the threads (connect all signals to resultsview's slots)
*
* @param view View to show error results
*/
void initialize(const ResultsView *view);
/**
2021-08-07 20:51:18 +02:00
* @brief Load settings
* @param settings QSettings to load settings from
*/
void loadSettings(const QSettings &settings);
/**
2021-08-07 20:51:18 +02:00
* @brief Save settings
* @param settings QSettings to save settings to
*/
2017-07-28 12:39:28 +02:00
void saveSettings(QSettings &settings) const;
void setAddonsAndTools(const QStringList &addonsAndTools) {
mAddonsAndTools = addonsAndTools;
}
void setSuppressions(const QList<Suppressions::Suppression> &s) {
2017-08-11 07:45:29 +02:00
mSuppressions = s;
}
2017-08-12 12:04:42 +02:00
void setClangIncludePaths(const QStringList &s) {
mClangIncludePaths = s;
}
/**
2021-08-07 20:51:18 +02:00
* @brief Clear all files from cppcheck
*
*/
2017-07-28 12:39:28 +02:00
void clearFiles();
/**
2021-08-07 20:51:18 +02:00
* @brief Set files to check
*
* @param files files to check
*/
2017-07-28 12:39:28 +02:00
void setFiles(const QStringList &files);
2016-08-18 21:58:50 +02:00
/**
2021-08-07 20:51:18 +02:00
* @brief Set project to check
*
* @param prj project to check
*/
2017-07-28 12:39:28 +02:00
void setProject(const ImportProject &prj);
2016-08-18 21:58:50 +02:00
/**
2021-08-07 20:51:18 +02:00
* @brief Start the threads to check the files
*
* @param settings Settings for checking
*/
void check(const Settings &settings);
/**
2021-08-07 20:51:18 +02:00
* @brief Set files to check
*
* @param all true if all files, false if modified files
*/
2017-07-28 12:39:28 +02:00
void setCheckFiles(bool all);
/**
2021-08-07 20:51:18 +02:00
* @brief Set selected files to check
*
* @param files list of files to be checked
*/
void setCheckFiles(const QStringList& files);
/**
2021-08-07 20:51:18 +02:00
* @brief Is checking running?
*
* @return true if check is running, false otherwise.
*/
2017-07-28 12:39:28 +02:00
bool isChecking() const;
/**
2021-08-07 20:51:18 +02:00
* @brief Have we checked files already?
*
* @return true check has been previously run and recheck can be done
*/
2017-07-28 12:39:28 +02:00
bool hasPreviousFiles() const;
/**
2021-08-07 20:51:18 +02:00
* @brief Return count of files we checked last time.
*
* @return count of files that were checked last time.
*/
2017-07-28 12:39:28 +02:00
int getPreviousFilesCount() const;
/**
2021-08-07 20:51:18 +02:00
* @brief Return the time elapsed while scanning the previous time.
*
* @return the time elapsed in milliseconds.
*/
2017-07-28 12:39:28 +02:00
int getPreviousScanDuration() const;
/**
* @brief Get files that should be rechecked because they have been
* changed.
*/
2017-07-28 12:39:28 +02:00
QStringList getReCheckFiles(bool all) const;
/**
2021-08-07 20:51:18 +02:00
* @brief Get start time of last check
*
* @return start time of last check
*/
2017-07-28 12:39:28 +02:00
QDateTime getCheckStartTime() const;
/**
2021-08-07 20:51:18 +02:00
* @brief Set start time of check
*
* @param checkStartTime saved start time of the last check
*/
2017-07-28 12:39:28 +02:00
void setCheckStartTime(QDateTime checkStartTime);
signals:
/**
2021-08-07 20:51:18 +02:00
* @brief Signal that all threads are done
*
*/
2017-07-28 12:39:28 +02:00
void done();
// NOLINTNEXTLINE(readability-inconsistent-declaration-parameter-name) - caused by generated MOC code
void log(const QString &msg);
// NOLINTNEXTLINE(readability-inconsistent-declaration-parameter-name) - caused by generated MOC code
void debugError(const ErrorItem &item);
public slots:
/**
2021-08-07 20:51:18 +02:00
* @brief Slot to stop all threads
*
*/
2017-07-28 12:39:28 +02:00
void stop();
protected slots:
/**
2021-08-07 20:51:18 +02:00
* @brief Slot that a single thread is done
*
*/
2017-07-28 12:39:28 +02:00
void threadDone();
protected:
/**
2021-08-07 20:51:18 +02:00
* @brief List of files checked last time (used when rechecking)
*
*/
QStringList mLastFiles;
/** @brief date and time when current checking started */
QDateTime mCheckStartTime;
/**
* @brief when was the files checked the last time (used when rechecking)
*/
QDateTime mLastCheckTime;
/**
2021-08-07 20:51:18 +02:00
* @brief Timer used for measuring scan duration
*
*/
QElapsedTimer mTimer;
/**
2021-08-07 20:51:18 +02:00
* @brief The previous scan duration in milliseconds.
*
*/
int mScanDuration{};
/**
2021-08-07 20:51:18 +02:00
* @brief Function to delete all threads
*
*/
2017-07-28 13:13:10 +02:00
void removeThreads();
/**
2021-08-07 20:51:18 +02:00
* @brief Thread results are stored here
*
*/
ThreadResult mResults;
/**
2021-08-07 20:51:18 +02:00
* @brief List of threads currently in use
*
*/
QList<CheckThread *> mThreads;
/**
2021-08-07 20:51:18 +02:00
* @brief The amount of threads currently running
*
*/
int mRunningThreadCount{};
2016-11-19 20:38:50 +01:00
bool mAnalyseWholeProgram{};
QStringList mAddonsAndTools;
QList<Suppressions::Suppression> mSuppressions;
2017-08-12 12:04:42 +02:00
QStringList mClangIncludePaths;
private:
/**
* @brief Check if a file needs to be rechecked. Recursively checks
* included headers. Used by GetReCheckFiles()
*/
2017-07-28 12:39:28 +02:00
bool needsReCheck(const QString &filename, std::set<QString> &modified, std::set<QString> &unmodified) const;
};
/// @}
#endif // THREADHANDLER_H