summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2012-11-23 16:29:00 +0100
committerErik Verbruggen <erik.verbruggen@digia.com>2012-11-28 09:09:14 +0100
commit964c01a460323adb871682a66283816d5d826a05 (patch)
treec007e5bbe46c3e683b392c2d7048821d675deeee
parentace205fe91f3686f677e2d773c2cca94258ff397 (diff)
downloadqt-creator-964c01a460323adb871682a66283816d5d826a05.tar.gz
C++: ProjectParts now contain everything that gets linked together.
Change-Id: Ib862e51897156a03a4a45e2a1690b00caeb03518 Reviewed-by: Daniel Teske <daniel.teske@digia.com>
-rw-r--r--src/plugins/autotoolsprojectmanager/autotoolsproject.cpp2
-rw-r--r--src/plugins/cmakeprojectmanager/cmakeproject.cpp2
-rw-r--r--src/plugins/cppeditor/cppquickfixes.cpp2
-rw-r--r--src/plugins/cpptools/ModelManagerInterface.cpp4
-rw-r--r--src/plugins/cpptools/ModelManagerInterface.h27
-rw-r--r--src/plugins/cpptools/cppmodelmanager.cpp36
-rw-r--r--src/plugins/qt4projectmanager/qt4project.cpp22
7 files changed, 57 insertions, 38 deletions
diff --git a/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp b/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp
index 1080dc5636..e37ad961b2 100644
--- a/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp
+++ b/src/plugins/autotoolsprojectmanager/autotoolsproject.cpp
@@ -441,7 +441,7 @@ void AutotoolsProject::updateCppCodeModel()
part->sourceFiles = m_files;
part->defines = macros;
part->frameworkPaths = allFrameworkPaths;
- part->language = CPlusPlus::CppModelManagerInterface::CXX;
+ part->language = CPlusPlus::CppModelManagerInterface::ProjectPart::CXX;
pinfo.appendProjectPart(part);
modelManager->updateProjectInfo(pinfo);
diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
index 63cc7ea4ab..3bba513d50 100644
--- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp
@@ -339,7 +339,7 @@ bool CMakeProject::parseCMakeLists()
part->sourceFiles = m_files;
part->defines = allDefines;
part->frameworkPaths = allFrameworkPaths;
- part->language = CPlusPlus::CppModelManagerInterface::CXX;
+ part->language = CPlusPlus::CppModelManagerInterface::ProjectPart::CXX;
pinfo.appendProjectPart(part);
modelmanager->updateProjectInfo(pinfo);
m_codeModelFuture.cancel();
diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp
index 9128e37d97..ce00db2fb2 100644
--- a/src/plugins/cppeditor/cppquickfixes.cpp
+++ b/src/plugins/cppeditor/cppquickfixes.cpp
@@ -1875,7 +1875,7 @@ public:
bool inProject = false;
foreach (const CppModelManagerInterface::ProjectInfo &info, projectInfos) {
foreach (CppModelManagerInterface::ProjectPart::Ptr part, info.projectParts()) {
- if (part->sourceFiles.contains(doc->fileName())) {
+ if (part->sourceFiles.contains(doc->fileName()) || part->objcSourceFiles.contains(doc->fileName()) || part->headerFiles.contains(doc->fileName())) {
inProject = true;
includePaths += part->includePaths;
}
diff --git a/src/plugins/cpptools/ModelManagerInterface.cpp b/src/plugins/cpptools/ModelManagerInterface.cpp
index 121a1841f6..7c0c3d6ac2 100644
--- a/src/plugins/cpptools/ModelManagerInterface.cpp
+++ b/src/plugins/cpptools/ModelManagerInterface.cpp
@@ -85,8 +85,12 @@ void CppModelManagerInterface::ProjectInfo::appendProjectPart(
// update source files
QSet<QString> srcs = QSet<QString>::fromList(m_sourceFiles);
+ foreach (const QString &src, part->headerFiles)
+ srcs.insert(src);
foreach (const QString &src, part->sourceFiles)
srcs.insert(src);
+ foreach (const QString &src, part->objcSourceFiles)
+ srcs.insert(src);
m_sourceFiles = srcs.toList();
// update defines
diff --git a/src/plugins/cpptools/ModelManagerInterface.h b/src/plugins/cpptools/ModelManagerInterface.h
index d4d1c9a012..03bd92bbdd 100644
--- a/src/plugins/cpptools/ModelManagerInterface.h
+++ b/src/plugins/cpptools/ModelManagerInterface.h
@@ -68,37 +68,36 @@ class CPPTOOLS_EXPORT CppModelManagerInterface : public QObject
Q_OBJECT
public:
- enum Language { CXX, OBJC };
class CPPTOOLS_EXPORT ProjectPart
{
public:
ProjectPart()
: language(CXX)
- , cxx11Enabled(false)
, qtVersion(UnknownQt)
{}
- public: //attributes
- QStringList sourceFiles;
- QByteArray defines;
- QStringList includePaths;
- QStringList frameworkPaths;
- QStringList precompiledHeaders;
- Language language;
- bool cxx11Enabled;
+ public: // enums and types
+ enum Language { CXX, CXX11, C99, C89 };
enum QtVersion {
UnknownQt = -1,
NoQt = 0,
Qt4 = 1,
Qt5 = 2
};
- QtVersion qtVersion;
-
- bool objcEnabled() const
- { return language == CppModelManagerInterface::OBJC; }
typedef QSharedPointer<ProjectPart> Ptr;
+
+ public: //attributes
+ QStringList headerFiles;
+ QStringList sourceFiles;
+ QStringList objcSourceFiles;
+ QByteArray defines;
+ QStringList includePaths;
+ QStringList frameworkPaths;
+ QStringList precompiledHeaders;
+ Language language;
+ QtVersion qtVersion;
};
class CPPTOOLS_EXPORT ProjectInfo
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index f56b5a35b7..f38df80eeb 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -88,9 +88,10 @@
#include <sstream>
namespace CPlusPlus {
+
uint qHash(const CppModelManagerInterface::ProjectPart &p)
{
- uint h = qHash(p.defines) ^ p.language ^ ((int) p.cxx11Enabled);
+ uint h = qHash(p.defines) ^ p.language ^ p.qtVersion;
foreach (const QString &i, p.includePaths)
h ^= qHash(i);
@@ -100,6 +101,7 @@ uint qHash(const CppModelManagerInterface::ProjectPart &p)
return h;
}
+
bool operator==(const CppModelManagerInterface::ProjectPart &p1,
const CppModelManagerInterface::ProjectPart &p2)
{
@@ -107,12 +109,13 @@ bool operator==(const CppModelManagerInterface::ProjectPart &p1,
return false;
if (p1.language != p2.language)
return false;
- if (p1.cxx11Enabled != p2.cxx11Enabled)
+ if (p1.qtVersion!= p2.qtVersion)
return false;
if (p1.includePaths != p2.includePaths)
return false;
return p1.frameworkPaths == p2.frameworkPaths;
}
+
} // namespace CPlusPlus
using namespace CppTools;
@@ -775,8 +778,11 @@ QStringList CppModelManager::internalProjectFiles() const
while (it.hasNext()) {
it.next();
ProjectInfo pinfo = it.value();
- foreach (const ProjectPart::Ptr &part, pinfo.projectParts())
+ foreach (const ProjectPart::Ptr &part, pinfo.projectParts()) {
+ files += part->headerFiles;
files += part->sourceFiles;
+ files += part->objcSourceFiles;
+ }
}
files.removeDuplicates();
return files;
@@ -841,14 +847,24 @@ void CppModelManager::dumpModelManagerConfiguration()
qDebug()<<" for project:"<< pinfo.project().data()->document()->fileName();
foreach (const ProjectPart::Ptr &part, pinfo.projectParts()) {
qDebug() << "=== part ===";
- qDebug() << "language:" << (part->language == CXX ? "C++" : "ObjC++");
- qDebug() << "C++11:" << part->cxx11Enabled;
+ 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";
+ }
+
+ qDebug() << "language:" << lang;
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() << "";
}
}
@@ -972,10 +988,16 @@ void CppModelManager::updateProjectInfo(const ProjectInfo &pinfo)
m_srcToProjectPart.clear();
- foreach (const ProjectInfo &projectInfo, m_projects.values())
- foreach (const ProjectPart::Ptr &projectPart, projectInfo.projectParts())
+ foreach (const ProjectInfo &projectInfo, m_projects.values()) {
+ 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);
+ }
+ }
}
if (!qgetenv("QTCREATOR_DUMP_PROJECT_INFO").isEmpty())
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index 6c2295b9d0..2f50f54f94 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -626,27 +626,21 @@ void Qt4Project::updateCppCodeModel()
part->precompiledHeaders.append(pro->variableValue(PrecompiledHeaderVar));
// part->language
- part->language = CPlusPlus::CppModelManagerInterface::CXX;
- // part->flags
if (tc)
- part->cxx11Enabled = tc->compilerFlags(pro->variableValue(CppFlagsVar)) == ToolChain::STD_CXX11;
+ part->language = tc->compilerFlags(pro->variableValue(CppFlagsVar)) == ToolChain::STD_CXX11 ? ProjectPart::CXX11 : ProjectPart::CXX;
+ else
+ part->language = CPlusPlus::CppModelManagerInterface::ProjectPart::CXX;
part->sourceFiles = pro->variableValue(CppSourceVar);
- part->sourceFiles += pro->variableValue(CppHeaderVar);
- part->sourceFiles += pro->uiFiles();
+ part->headerFiles += pro->variableValue(CppHeaderVar);
+ part->headerFiles += pro->uiFiles();
part->sourceFiles.prepend(QLatin1String("<configuration>"));
+ part->objcSourceFiles = pro->variableValue(ObjCSourceVar);
pinfo.appendProjectPart(part);
+ allFiles += part->headerFiles;
allFiles += part->sourceFiles;
-
- part = ProjectPart::Ptr(new ProjectPart);
- // todo objc code?
- part->language = CPlusPlus::CppModelManagerInterface::OBJC;
- part->sourceFiles = pro->variableValue(ObjCSourceVar);
- if (!part->sourceFiles.isEmpty())
- pinfo.appendProjectPart(part);
-
- allFiles += part->sourceFiles;
+ allFiles += part->objcSourceFiles;
}
modelmanager->updateProjectInfo(pinfo);