summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cpptoolsplugin.cpp
diff options
context:
space:
mode:
authorSergey Shambir <sergey.shambir.auto@gmail.com>2013-03-27 10:32:28 +0400
committerErik Verbruggen <erik.verbruggen@digia.com>2013-04-10 11:07:27 +0200
commit0609333e0287414a9007cbe71b0ab4b84ada20cb (patch)
tree01fd51755fb8a44e947371f210c28e2ce4d3644c /src/plugins/cpptools/cpptoolsplugin.cpp
parentd61bc4fcec30c01586df9fc071e7b0dbf08da2b5 (diff)
downloadqt-creator-0609333e0287414a9007cbe71b0ab4b84ada20cb.tar.gz
CppTools: moved some logic to ProjectFile
Simplifies code and makes it independent from mimetype names. Change-Id: Ib56a07654df4986b1916c517e3862e6c3a3dd720 Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'src/plugins/cpptools/cpptoolsplugin.cpp')
-rw-r--r--src/plugins/cpptools/cpptoolsplugin.cpp87
1 files changed, 32 insertions, 55 deletions
diff --git a/src/plugins/cpptools/cpptoolsplugin.cpp b/src/plugins/cpptools/cpptoolsplugin.cpp
index 66e7c20e2d..2c1cd6410b 100644
--- a/src/plugins/cpptools/cpptoolsplugin.cpp
+++ b/src/plugins/cpptools/cpptoolsplugin.cpp
@@ -39,6 +39,7 @@
#include "symbolsfindfilter.h"
#include "cpptoolssettings.h"
#include "cpptoolsreuse.h"
+#include "cppprojectfile.h"
#include <coreplugin/actionmanager/actioncontainer.h>
#include <coreplugin/actionmanager/actionmanager.h>
@@ -184,51 +185,31 @@ static QStringList findFilesInProject(const QString &name,
return candidateList;
}
-// Figure out file type
-enum FileType {
- HeaderFile,
- C_SourceFile,
- CPP_SourceFile,
- ObjectiveCPP_SourceFile,
- UnknownType
-};
-
-static inline FileType fileType(const Core::MimeDatabase *mimeDatabase, const QFileInfo & fi)
-{
- const Core::MimeType mimeType = mimeDatabase->findByFile(fi);
- if (!mimeType)
- return UnknownType;
- const QString typeName = mimeType.type();
- if (typeName == QLatin1String(CppTools::Constants::C_SOURCE_MIMETYPE))
- return C_SourceFile;
- if (typeName == QLatin1String(CppTools::Constants::CPP_SOURCE_MIMETYPE))
- return CPP_SourceFile;
- if (typeName == QLatin1String(CppTools::Constants::OBJECTIVE_CPP_SOURCE_MIMETYPE))
- return ObjectiveCPP_SourceFile;
- if (typeName == QLatin1String(CppTools::Constants::C_HEADER_MIMETYPE)
- || typeName == QLatin1String(CppTools::Constants::CPP_HEADER_MIMETYPE))
- return HeaderFile;
- return UnknownType;
-}
-
// Return the suffixes that should be checked when trying to find a
// source belonging to a header and vice versa
-static QStringList matchingCandidateSuffixes(const Core::MimeDatabase *mimeDatabase, FileType type)
+static QStringList matchingCandidateSuffixes(ProjectFile::Kind kind)
{
- switch (type) {
- case UnknownType:
- break;
- case HeaderFile: // Note that C/C++ headers are undistinguishable
- return mimeDatabase->findByType(QLatin1String(CppTools::Constants::C_SOURCE_MIMETYPE)).suffixes()
- + mimeDatabase->findByType(QLatin1String(CppTools::Constants::CPP_SOURCE_MIMETYPE)).suffixes()
- + mimeDatabase->findByType(QLatin1String(CppTools::Constants::OBJECTIVE_CPP_SOURCE_MIMETYPE)).suffixes();
- case C_SourceFile:
- return mimeDatabase->findByType(QLatin1String(CppTools::Constants::C_HEADER_MIMETYPE)).suffixes();
- case CPP_SourceFile:
- case ObjectiveCPP_SourceFile:
- return mimeDatabase->findByType(QLatin1String(CppTools::Constants::CPP_HEADER_MIMETYPE)).suffixes();
+ Core::MimeDatabase *md = Core::ICore::instance()->mimeDatabase();
+ switch (kind) {
+ // Note that C/C++ headers are undistinguishable
+ case ProjectFile::CHeader:
+ case ProjectFile::CXXHeader:
+ case ProjectFile::ObjCHeader:
+ case ProjectFile::ObjCXXHeader:
+ return md->findByType(QLatin1String(Constants::C_SOURCE_MIMETYPE)).suffixes()
+ + md->findByType(QLatin1String(Constants::CPP_SOURCE_MIMETYPE)).suffixes()
+ + md->findByType(QLatin1String(Constants::OBJECTIVE_CPP_SOURCE_MIMETYPE)).suffixes();
+ case ProjectFile::CSource:
+ case ProjectFile::ObjCSource:
+ return md->findByType(QLatin1String(Constants::C_HEADER_MIMETYPE)).suffixes();
+ case ProjectFile::CXXSource:
+ case ProjectFile::ObjCXXSource:
+ case ProjectFile::CudaSource:
+ case ProjectFile::OpenCLSource:
+ return md->findByType(QLatin1String(Constants::CPP_HEADER_MIMETYPE)).suffixes();
+ default:
+ return QStringList();
}
- return QStringList();
}
static QStringList baseNameWithAllSuffixes(const QString &baseName, const QStringList &suffixes)
@@ -259,30 +240,26 @@ QString correspondingHeaderOrSource(const QString &fileName, bool *wasHeader)
{
using namespace Internal;
- const Core::MimeDatabase *mimeDatabase = Core::ICore::mimeDatabase();
const QFileInfo fi(fileName);
- if (m_headerSourceMapping.contains(fi.absoluteFilePath())) {
- if (wasHeader)
- *wasHeader = fileType(mimeDatabase, fi) == HeaderFile;
+ ProjectFile::Kind kind = ProjectFile::classify(fileName);
+ const bool isHeader = ProjectFile::isHeader(kind);
+ if (*wasHeader)
+ *wasHeader = isHeader;
+ if (m_headerSourceMapping.contains(fi.absoluteFilePath()))
return m_headerSourceMapping.value(fi.absoluteFilePath());
- }
-
- FileType type = fileType(mimeDatabase, fi);
- if (wasHeader)
- *wasHeader = type == HeaderFile;
if (debug)
- qDebug() << Q_FUNC_INFO << fileName << type;
+ qDebug() << Q_FUNC_INFO << fileName << kind;
- if (type == UnknownType)
+ if (kind == ProjectFile::Unclassified)
return QString();
const QString baseName = fi.completeBaseName();
const QString privateHeaderSuffix = QLatin1String("_p");
- const QStringList suffixes = matchingCandidateSuffixes(mimeDatabase, type);
+ const QStringList suffixes = matchingCandidateSuffixes(kind);
QStringList candidateFileNames = baseNameWithAllSuffixes(baseName, suffixes);
- if (type == HeaderFile) {
+ if (isHeader) {
if (baseName.endsWith(privateHeaderSuffix)) {
QString sourceBaseName = baseName;
sourceBaseName.truncate(sourceBaseName.size() - privateHeaderSuffix.size());
@@ -301,7 +278,7 @@ QString correspondingHeaderOrSource(const QString &fileName, bool *wasHeader)
const QFileInfo candidateFi(absoluteDir, candidateFileName);
if (candidateFi.isFile()) {
m_headerSourceMapping[fi.absoluteFilePath()] = candidateFi.absoluteFilePath();
- if (type != HeaderFile || !baseName.endsWith(privateHeaderSuffix))
+ if (!isHeader || !baseName.endsWith(privateHeaderSuffix))
m_headerSourceMapping[candidateFi.absoluteFilePath()] = fi.absoluteFilePath();
return candidateFi.absoluteFilePath();
}