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

View File

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

View File

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

View File

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

View File

@@ -74,7 +74,7 @@ void GenericProjectPlugin::test_simple()
QCOMPARE(pPart->files.first().kind, ProjectFile::CXXSource); 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; QStringList result;