diff options
author | Sergey Shambir <sergey.shambir.auto@gmail.com> | 2013-03-27 10:32:28 +0400 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@digia.com> | 2013-04-10 11:07:27 +0200 |
commit | 0609333e0287414a9007cbe71b0ab4b84ada20cb (patch) | |
tree | 01fd51755fb8a44e947371f210c28e2ce4d3644c /src/plugins/cpptools/cpptoolsplugin.cpp | |
parent | d61bc4fcec30c01586df9fc071e7b0dbf08da2b5 (diff) | |
download | qt-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.cpp | 87 |
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(); } |