diff --git a/src/plugins/cpptools/projectpartbuilder.cpp b/src/plugins/cpptools/projectpartbuilder.cpp index 7ae9656db178b434ca5a482f53a9a36db63a9097..50329aa7ebc872cc7c2c633b129430a6d4c1e8bf 100644 --- a/src/plugins/cpptools/projectpartbuilder.cpp +++ b/src/plugins/cpptools/projectpartbuilder.cpp @@ -52,20 +52,22 @@ public: { using CppTools::ProjectFile; - QStringList cHeaders, cxxHeaders; + QVector cHeaders; + QVector cxxHeaders; foreach (const QString &file, files) { const ProjectFile::Kind kind = fileClassifier ? fileClassifier(file) : ProjectFile::classify(file); + const ProjectFile projectFile(file, kind); switch (kind) { - case ProjectFile::CSource: m_cSources += file; break; - case ProjectFile::CHeader: cHeaders += file; break; - case ProjectFile::CXXSource: m_cxxSources += file; break; - case ProjectFile::CXXHeader: cxxHeaders += file; break; - case ProjectFile::ObjCSource: m_objcSources += file; break; - case ProjectFile::ObjCXXSource: m_objcxxSources += file; break; + case ProjectFile::CSource: m_cSources += projectFile; break; + case ProjectFile::CHeader: cHeaders += projectFile; break; + case ProjectFile::CXXSource: m_cxxSources += projectFile; break; + case ProjectFile::CXXHeader: cxxHeaders += projectFile; break; + case ProjectFile::ObjCSource: m_objcSources += projectFile; break; + case ProjectFile::ObjCXXSource: m_objcxxSources += projectFile; break; default: continue; } @@ -99,10 +101,10 @@ public: bool hasObjcSources() const { return !m_objcSources.isEmpty(); } bool hasObjcxxSources() const { return !m_objcxxSources.isEmpty(); } - QStringList cSources() const { return m_cSources; } - QStringList cxxSources() const { return m_cxxSources; } - QStringList objcSources() const { return m_objcSources; } - QStringList objcxxSources() const { return m_objcxxSources; } + QVector cSources() const { return m_cSources; } + QVector cxxSources() const { return m_cxxSources; } + QVector objcSources() const { return m_objcSources; } + QVector objcxxSources() const { return m_objcxxSources; } bool hasMultipleParts() const { return m_partCount > 1; } bool hasNoParts() const { return m_partCount == 0; } @@ -117,7 +119,10 @@ public: private: QString m_partName; - QStringList m_cSources, m_cxxSources, m_objcSources, m_objcxxSources; + QVector m_cSources; + QVector m_cxxSources; + QVector m_objcSources; + QVector m_objcxxSources; int m_partCount; }; } // anonymous namespace @@ -322,66 +327,14 @@ void ProjectPartBuilder::evaluateProjectPartToolchain( projectPart->updateLanguageFeatures(); } -namespace Internal { - -class ProjectFileAdder -{ -public: - ProjectFileAdder(QVector &files); - ~ProjectFileAdder(); - - bool maybeAdd(const QString &path); - -private: - - void addMapping(const char *mimeName, ProjectFile::Kind kind); - - QVector &m_files; - QHash m_mimeNameMapping; -}; - -ProjectFileAdder::ProjectFileAdder(QVector &files) - : m_files(files) -{ - addMapping(CppTools::Constants::C_SOURCE_MIMETYPE, ProjectFile::CSource); - addMapping(CppTools::Constants::C_HEADER_MIMETYPE, ProjectFile::CHeader); - addMapping(CppTools::Constants::CPP_SOURCE_MIMETYPE, ProjectFile::CXXSource); - addMapping(CppTools::Constants::CPP_HEADER_MIMETYPE, ProjectFile::CXXHeader); - addMapping(CppTools::Constants::OBJECTIVE_C_SOURCE_MIMETYPE, ProjectFile::ObjCSource); - addMapping(CppTools::Constants::OBJECTIVE_CPP_SOURCE_MIMETYPE, ProjectFile::ObjCXXSource); -} - -ProjectFileAdder::~ProjectFileAdder() -{ -} - -bool ProjectFileAdder::maybeAdd(const QString &path) -{ - Utils::MimeDatabase mdb; - const Utils::MimeType mt = mdb.mimeTypeForFile(path); - if (m_mimeNameMapping.contains(mt.name())) { - m_files << ProjectFile(path, m_mimeNameMapping.value(mt.name())); - return true; - } - return false; -} - -void ProjectFileAdder::addMapping(const char *mimeName, ProjectFile::Kind kind) -{ - Utils::MimeDatabase mdb; - Utils::MimeType mimeType = mdb.mimeTypeForName(QLatin1String(mimeName)); - if (mimeType.isValid()) - m_mimeNameMapping.insert(mimeType.name(), kind); -} -} - -void ProjectPartBuilder::createProjectPart(const QStringList &theSources, +void ProjectPartBuilder::createProjectPart(const QVector &theSources, const QString &partName, ProjectPart::LanguageVersion languageVersion, ProjectPart::LanguageExtensions languageExtensions) { ProjectPart::Ptr part(m_templatePart->copy()); part->displayName = partName; + part->files = theSources; QTC_ASSERT(part->project, return); if (ProjectExplorer::Target *activeTarget = part->project->activeTarget()) { @@ -399,10 +352,6 @@ void ProjectPartBuilder::createProjectPart(const QStringList &theSources, part->languageExtensions |= languageExtensions; - Internal::ProjectFileAdder adder(part->files); - foreach (const QString &file, theSources) - adder.maybeAdd(file); - m_pInfo.appendProjectPart(part); } diff --git a/src/plugins/cpptools/projectpartbuilder.h b/src/plugins/cpptools/projectpartbuilder.h index 64aadb95299d048fc81381f119e14c396ed78907..a922b48d4afa8b985b3af5343fcf1ddbe2650a79 100644 --- a/src/plugins/cpptools/projectpartbuilder.h +++ b/src/plugins/cpptools/projectpartbuilder.h @@ -66,7 +66,8 @@ public: const Utils::FileName &sysRoot); private: - void createProjectPart(const QStringList &theSources, const QString &partName, + void createProjectPart(const QVector &theSources, + const QString &partName, ProjectPart::LanguageVersion languageVersion, ProjectPart::LanguageExtensions languageExtensions);