diff options
| author | Sergey Shambir <sergey.shambir.auto@gmail.com> | 2013-03-04 01:30:46 +0400 |
|---|---|---|
| committer | Sergey Shambir <sergey.shambir.auto@gmail.com> | 2013-03-21 17:22:18 +0100 |
| commit | 63fe568b9b36de9a3ddd72da45ef193d7471224f (patch) | |
| tree | b380436f34355a263d841c1190d4750f6c2de970 /src/plugins/cpptools/cppmodelmanager.cpp | |
| parent | 0c417bbb8e6c34e2dbc594dca70f607dd3dc5c82 (diff) | |
| download | qt-creator-63fe568b9b36de9a3ddd72da45ef193d7471224f.tar.gz | |
CppTools: improved languages support in ProjectPart
Please, read blueprint here:
http://qt-project.org/wiki/Blueprint-for-language-specs-system
Removed feature from QbsProjectManager: it not longer splits project on
separate C and C++ parts, because Qt version used only by clang parser
(not native) and can be ignored for pure C and Objective-C without C++.
Change-Id: I1c561f7f9f915cc6cb8579d19db74e8352f54c1e
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
Diffstat (limited to 'src/plugins/cpptools/cppmodelmanager.cpp')
| -rw-r--r-- | src/plugins/cpptools/cppmodelmanager.cpp | 66 |
1 files changed, 39 insertions, 27 deletions
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index ce615d5c6b..7dd4c79a2b 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -89,9 +89,9 @@ namespace CPlusPlus { -uint qHash(const CppModelManagerInterface::ProjectPart &p) +uint qHash(const ProjectPart &p) { - uint h = qHash(p.defines) ^ p.language ^ p.qtVersion; + uint h = qHash(p.defines) ^ p.cVersion ^ p.cxxVersion ^ p.cxxExtensions ^ p.qtVersion; foreach (const QString &i, p.includePaths) h ^= qHash(i); @@ -102,12 +102,16 @@ uint qHash(const CppModelManagerInterface::ProjectPart &p) return h; } -bool operator==(const CppModelManagerInterface::ProjectPart &p1, - const CppModelManagerInterface::ProjectPart &p2) +bool operator==(const ProjectPart &p1, + const ProjectPart &p2) { if (p1.defines != p2.defines) return false; - if (p1.language != p2.language) + if (p1.cVersion != p2.cVersion) + return false; + if (p1.cxxVersion != p2.cxxVersion) + return false; + if (p1.cxxExtensions != p2.cxxExtensions) return false; if (p1.qtVersion!= p2.qtVersion) return false; @@ -769,9 +773,8 @@ QStringList CppModelManager::internalProjectFiles() const it.next(); ProjectInfo pinfo = it.value(); foreach (const ProjectPart::Ptr &part, pinfo.projectParts()) { - files += part->headerFiles; - files += part->sourceFiles; - files += part->objcSourceFiles; + foreach (const ProjectFile &file, part->files) + files += file.path; } } files.removeDuplicates(); @@ -839,24 +842,37 @@ void CppModelManager::dumpModelManagerConfiguration() qDebug()<<" for project:"<< pinfo.project().data()->document()->fileName(); foreach (const ProjectPart::Ptr &part, pinfo.projectParts()) { qDebug() << "=== part ==="; - const char* lang; - switch (part->language) { - case ProjectPart::CXX: lang = "C++"; break; - case ProjectPart::CXX11: lang = "C++11"; break; - case ProjectPart::C89: lang = "C89"; break; - case ProjectPart::C99: lang = "C99"; break; - default: lang = "INVALID"; + const char* cVersion; + const char* cxxVersion; + const char* cxxExtensions; + switch (part->cVersion) { + case ProjectPart::C89: cVersion = "C89"; break; + case ProjectPart::C99: cVersion = "C99"; break; + case ProjectPart::C11: cVersion = "C11"; break; + default: cVersion = "INVALID"; + } + switch (part->cxxVersion) { + case ProjectPart::CXX98: cVersion = "CXX98"; break; + case ProjectPart::CXX11: cVersion = "CXX11"; break; + default: cxxVersion = "INVALID"; + } + switch (part->cxxExtensions) { + case ProjectPart::NoExtensions: cVersion = "NoExtensions"; break; + case ProjectPart::GnuExtensions: cVersion = "GnuExtensions"; break; + case ProjectPart::MicrosoftExtensions: cVersion = "MicrosoftExtensions"; break; + case ProjectPart::BorlandExtensions: cVersion = "BorlandExtensions"; break; + default: cxxExtensions = "INVALID"; } - qDebug() << "language:" << lang; + qDebug() << "cVersion:" << cVersion; + qDebug() << "cxxVersion:" << cxxVersion; + qDebug() << "cxxExtensions:" << cxxExtensions; qDebug() << "Qt version:" << part->qtVersion; qDebug() << "precompiled header:" << part->precompiledHeaders; qDebug() << "defines:" << part->defines; qDebug() << "includes:" << part->includePaths; qDebug() << "frameworkPaths:" << part->frameworkPaths; - qDebug() << "headers:" << part->headerFiles; - qDebug() << "sources:" << part->sourceFiles; - qDebug() << "objc sources:" << part->objcSourceFiles; + qDebug() << "files:" << part->files; qDebug() << ""; } } @@ -988,12 +1004,8 @@ void CppModelManager::updateProjectInfo(const ProjectInfo &pinfo) foreach (const ProjectInfo &projectInfo, m_projects) { foreach (const ProjectPart::Ptr &projectPart, projectInfo.projectParts()) { - foreach (const QString &sourceFile, projectPart->sourceFiles) - m_srcToProjectPart[sourceFile].append(projectPart); - foreach (const QString &objcSourceFile, projectPart->objcSourceFiles) - m_srcToProjectPart[objcSourceFile].append(projectPart); - foreach (const QString &headerFile, projectPart->headerFiles) - m_srcToProjectPart[headerFile].append(projectPart); + foreach (const ProjectFile &cxxFile, projectPart->files) + m_srcToProjectPart[cxxFile.path].append(projectPart); } } } @@ -1004,9 +1016,9 @@ void CppModelManager::updateProjectInfo(const ProjectInfo &pinfo) emit projectPartsUpdated(pinfo.project().data()); } -QList<CppModelManager::ProjectPart::Ptr> CppModelManager::projectPart(const QString &fileName) const +QList<ProjectPart::Ptr> CppModelManager::projectPart(const QString &fileName) const { - QList<CppModelManager::ProjectPart::Ptr> parts = m_srcToProjectPart.value(fileName); + QList<ProjectPart::Ptr> parts = m_srcToProjectPart.value(fileName); if (!parts.isEmpty()) return parts; |
