CppTools: Clean up ProjectFile

Change-Id: I01212115566c6bf26268b66fef96d50b7e93b96c
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Nikolai Kosjar
2016-11-30 11:35:54 +01:00
parent 832edfe12a
commit c961018a63
5 changed files with 53 additions and 50 deletions

View File

@@ -208,7 +208,7 @@ class ProjectFilesModel : public QAbstractListModel
Q_OBJECT
public:
ProjectFilesModel(QObject *parent);
void configure(const QVector<ProjectFile> &files);
void configure(const ProjectFiles &files);
void clear();
enum Columns { FileKindColumn, FilePathColumn, ColumnCount };
@@ -219,14 +219,14 @@ public:
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
private:
QVector<ProjectFile> m_files;
ProjectFiles m_files;
};
ProjectFilesModel::ProjectFilesModel(QObject *parent) : QAbstractListModel(parent)
{
}
void ProjectFilesModel::configure(const QVector<ProjectFile> &files)
void ProjectFilesModel::configure(const ProjectFiles &files)
{
emit layoutAboutToBeChanged();
m_files = files;

View File

@@ -24,26 +24,25 @@
****************************************************************************/
#include "cppprojectfile.h"
#include "cpptoolsconstants.h"
#include <coreplugin/icore.h>
#include <utils/mimetypes/mimedatabase.h>
#
#include <QDebug>
namespace CppTools {
ProjectFile::ProjectFile(const QString &file, Kind kind)
: path(file)
ProjectFile::ProjectFile(const QString &filePath, Kind kind)
: path(filePath)
, kind(kind)
{
}
ProjectFile::Kind ProjectFile::classify(const QString &file)
ProjectFile::Kind ProjectFile::classify(const QString &filePath)
{
Utils::MimeDatabase mdb;
const Utils::MimeType mimeType = mdb.mimeTypeForFile(file);
const Utils::MimeType mimeType = mdb.mimeTypeForFile(filePath);
if (!mimeType.isValid())
return Unclassified;
const QString mt = mimeType.name();
@@ -66,7 +65,6 @@ ProjectFile::Kind ProjectFile::classify(const QString &file)
return Unclassified;
}
/// @return True if file is header or cannot be classified (i.e has no file extension)
bool ProjectFile::isHeader(ProjectFile::Kind kind)
{
switch (kind) {
@@ -74,14 +72,13 @@ bool ProjectFile::isHeader(ProjectFile::Kind kind)
case ProjectFile::CXXHeader:
case ProjectFile::ObjCHeader:
case ProjectFile::ObjCXXHeader:
case ProjectFile::Unclassified:
case ProjectFile::Unclassified: // no file extension, e.g. stl headers
return true;
default:
return false;
}
}
/// @return True if file is correctly classified source
bool ProjectFile::isSource(ProjectFile::Kind kind)
{
switch (kind) {
@@ -97,25 +94,31 @@ bool ProjectFile::isSource(ProjectFile::Kind kind)
}
}
QDebug operator<<(QDebug stream, const CppTools::ProjectFile &cxxFile)
#define RETURN_TEXT_FOR_CASE(enumValue) case ProjectFile::enumValue: return #enumValue
static const char *projectFileKindToText(ProjectFile::Kind kind)
{
const char *kind;
switch (cxxFile.kind) {
case CppTools::ProjectFile::CHeader: kind = "CHeader"; break;
case CppTools::ProjectFile::CSource: kind = "CSource"; break;
case CppTools::ProjectFile::CXXHeader: kind = "CXXHeader"; break;
case CppTools::ProjectFile::CXXSource: kind = "CXXSource"; break;
case CppTools::ProjectFile::ObjCHeader: kind = "ObjCHeader"; break;
case CppTools::ProjectFile::ObjCSource: kind = "ObjCSource"; break;
case CppTools::ProjectFile::ObjCXXHeader: kind = "ObjCXXHeader"; break;
case CppTools::ProjectFile::ObjCXXSource: kind = "ObjCXXSource"; break;
case CppTools::ProjectFile::CudaSource: kind = "CudaSource"; break;
case CppTools::ProjectFile::OpenCLSource: kind = "OpenCLSource"; break;
default: kind = "INVALID"; break;
switch (kind) {
RETURN_TEXT_FOR_CASE(Unclassified);
RETURN_TEXT_FOR_CASE(CHeader);
RETURN_TEXT_FOR_CASE(CSource);
RETURN_TEXT_FOR_CASE(CXXHeader);
RETURN_TEXT_FOR_CASE(CXXSource);
RETURN_TEXT_FOR_CASE(ObjCHeader);
RETURN_TEXT_FOR_CASE(ObjCSource);
RETURN_TEXT_FOR_CASE(ObjCXXHeader);
RETURN_TEXT_FOR_CASE(ObjCXXSource);
RETURN_TEXT_FOR_CASE(CudaSource);
RETURN_TEXT_FOR_CASE(OpenCLSource);
}
stream << cxxFile.path << QLatin1String(", ") << kind;
return "UnhandledProjectFileKind";
}
#undef RETURN_TEXT_FOR_CASE
QDebug operator<<(QDebug stream, const CppTools::ProjectFile &projectFile)
{
stream << projectFile.path << QLatin1String(", ") << projectFileKindToText(projectFile.kind);
return stream;
}
} // namespace CppTools

View File

@@ -27,8 +27,6 @@
#include "cpptools_global.h"
#include <QHash>
#include <QList>
#include <QString>
namespace CppTools {
@@ -36,32 +34,34 @@ namespace CppTools {
class CPPTOOLS_EXPORT ProjectFile
{
public:
// enums and types
enum Kind {
Unclassified = 0,
CHeader = 1,
CSource = 2,
CXXHeader = 3,
CXXSource = 4,
ObjCHeader = 5,
ObjCSource = 6,
ObjCXXHeader = 7,
ObjCXXSource = 8,
CudaSource = 9,
OpenCLSource = 10
Unclassified,
CHeader,
CSource,
CXXHeader,
CXXSource,
ObjCHeader,
ObjCSource,
ObjCXXHeader,
ObjCXXSource,
CudaSource,
OpenCLSource,
};
ProjectFile() = default;
ProjectFile(const QString &file, Kind kind);
static Kind classify(const QString &file);
static Kind classify(const QString &filePath);
static bool isHeader(Kind kind);
static bool isSource(Kind kind);
public:
ProjectFile() = default;
ProjectFile(const QString &filePath, Kind kind);
QString path;
Kind kind = CHeader;
Kind kind = Unclassified;
};
QDebug operator<<(QDebug stream, const CppTools::ProjectFile &cxxFile);
using ProjectFiles = QVector<ProjectFile>;
QDebug operator<<(QDebug stream, const CppTools::ProjectFile &projectFile);
} // namespace CppTools

View File

@@ -103,7 +103,7 @@ public: // fields
QString displayName;
QString projectFile;
ProjectExplorer::Project *project;
QVector<ProjectFile> files;
ProjectFiles files;
QString projectConfigFile; // currently only used by the Generic Project Manager
QByteArray projectDefines;
QByteArray toolchainDefines;

View File

@@ -74,7 +74,7 @@ void GenericProjectPlugin::test_simple()
QCOMPARE(pPart->files.first().kind, ProjectFile::CXXSource);
}
static QStringList simplify(const QVector<ProjectFile> &files, const QString &prefix)
static QStringList simplify(const ProjectFiles &files, const QString &prefix)
{
QStringList result;