QMakeProjectManager: Clean up updateCppCodeModel()

Change-Id: I083a6ed91d78ee278977128ec0f19ed28d0eeae4
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
Nikolai Kosjar
2016-12-05 17:18:54 +01:00
parent 458e775f88
commit d006fc4149

View File

@@ -356,22 +356,17 @@ void QmakeProject::updateCodeModels()
void QmakeProject::updateCppCodeModel() void QmakeProject::updateCppCodeModel()
{ {
using ProjectPart = CppTools::ProjectPart;
using ProjectFile = CppTools::ProjectFile;
m_toolChainWarnings.clear(); m_toolChainWarnings.clear();
typedef CppTools::ProjectPart ProjectPart; const Kit *k = nullptr;
typedef CppTools::ProjectFile ProjectFile;
Kit *k = nullptr;
if (Target *target = activeTarget()) if (Target *target = activeTarget())
k = target->kit(); k = target->kit();
else else
k = KitManager::defaultKit(); k = KitManager::defaultKit();
QTC_ASSERT(k, return);
CppTools::CppModelManager *modelmanager = CppTools::CppModelManager::instance();
FindQmakeProFiles findQmakeProFiles;
QList<QmakeProFileNode *> proFiles = findQmakeProFiles(rootProjectNode());
CppTools::ProjectInfo pinfo(this);
QtSupport::BaseQtVersion *qtVersion = QtSupport::QtKitInformation::qtVersion(k); QtSupport::BaseQtVersion *qtVersion = QtSupport::QtKitInformation::qtVersion(k);
ProjectPart::QtVersion qtVersionForPart = ProjectPart::NoQt; ProjectPart::QtVersion qtVersionForPart = ProjectPart::NoQt;
@@ -382,7 +377,11 @@ void QmakeProject::updateCppCodeModel()
qtVersionForPart = ProjectPart::Qt5; qtVersionForPart = ProjectPart::Qt5;
} }
FindQmakeProFiles findQmakeProFiles;
const QList<QmakeProFileNode *> proFiles = findQmakeProFiles(rootProjectNode());
CppTools::ProjectInfo projectInfo(this);
QList<ProjectExplorer::ExtraCompiler *> generators; QList<ProjectExplorer::ExtraCompiler *> generators;
foreach (QmakeProFileNode *pro, proFiles) { foreach (QmakeProFileNode *pro, proFiles) {
warnOnToolChainMismatch(pro); warnOnToolChainMismatch(pro);
@@ -391,15 +390,14 @@ void QmakeProject::updateCppCodeModel()
templatePart->displayName = pro->displayName(); templatePart->displayName = pro->displayName();
templatePart->projectFile = pro->filePath().toString(); templatePart->projectFile = pro->filePath().toString();
templatePart->selectedForBuilding = pro->includedInExactParse(); templatePart->selectedForBuilding = pro->includedInExactParse();
templatePart->projectDefines += pro->cxxDefines();
templatePart->precompiledHeaders.append(pro->variableValue(PrecompiledHeaderVar));
if (pro->variableValue(ConfigVar).contains(QLatin1String("qt"))) if (pro->variableValue(ConfigVar).contains(QLatin1String("qt")))
templatePart->qtVersion = qtVersionForPart; templatePart->qtVersion = qtVersionForPart;
else else
templatePart->qtVersion = ProjectPart::NoQt; templatePart->qtVersion = ProjectPart::NoQt;
// part->defines
templatePart->projectDefines += pro->cxxDefines();
foreach (const QString &inc, pro->variableValue(IncludePathVar)) { foreach (const QString &inc, pro->variableValue(IncludePathVar)) {
const auto headerPath const auto headerPath
= CppTools::ProjectPartHeaderPath(inc, CppTools::ProjectPartHeaderPath::IncludePath); = CppTools::ProjectPartHeaderPath(inc, CppTools::ProjectPartHeaderPath::IncludePath);
@@ -407,16 +405,11 @@ void QmakeProject::updateCppCodeModel()
templatePart->headerPaths += headerPath; templatePart->headerPaths += headerPath;
} }
if (qtVersion) { if (qtVersion && !qtVersion->frameworkInstallPath().isEmpty()) {
if (!qtVersion->frameworkInstallPath().isEmpty()) {
templatePart->headerPaths += CppTools::ProjectPartHeaderPath( templatePart->headerPaths += CppTools::ProjectPartHeaderPath(
qtVersion->frameworkInstallPath(), qtVersion->frameworkInstallPath(),
CppTools::ProjectPartHeaderPath::FrameworkPath); CppTools::ProjectPartHeaderPath::FrameworkPath);
} }
}
// part->precompiledHeaders
templatePart->precompiledHeaders.append(pro->variableValue(PrecompiledHeaderVar));
// TODO: there is no LANG_OBJCXX, so: // TODO: there is no LANG_OBJCXX, so:
const QStringList cxxflags = pro->variableValue(CppFlagsVar); const QStringList cxxflags = pro->variableValue(CppFlagsVar);
@@ -428,7 +421,7 @@ void QmakeProject::updateCppCodeModel()
ProjectPart::Ptr cppPart = templatePart->copy(); ProjectPart::Ptr cppPart = templatePart->copy();
ProjectPart::Ptr objcppPart = templatePart->copy(); ProjectPart::Ptr objcppPart = templatePart->copy();
foreach (const QString &file, pro->variableValue(SourceVar)) { foreach (const QString &file, pro->variableValue(SourceVar)) {
ProjectFile::Kind kind = ProjectFile::classify(file); const ProjectFile::Kind kind = ProjectFile::classify(file);
switch (kind) { switch (kind) {
case ProjectFile::ObjCHeader: case ProjectFile::ObjCHeader:
case ProjectFile::ObjCSource: case ProjectFile::ObjCSource:
@@ -446,8 +439,8 @@ void QmakeProject::updateCppCodeModel()
QList<ProjectExplorer::ExtraCompiler *> proGenerators = pro->extraCompilers(); QList<ProjectExplorer::ExtraCompiler *> proGenerators = pro->extraCompilers();
foreach (ProjectExplorer::ExtraCompiler *ec, proGenerators) { foreach (ProjectExplorer::ExtraCompiler *ec, proGenerators) {
ec->forEachTarget([&](const Utils::FileName &generatedFile) { ec->forEachTarget([&](const Utils::FileName &generatedFile) {
QString name = generatedFile.toString(); const QString name = generatedFile.toString();
ProjectFile::Kind kind = ProjectFile::classify(name); const ProjectFile::Kind kind = ProjectFile::classify(name);
switch (kind) { switch (kind) {
case ProjectFile::CHeader: case ProjectFile::CHeader:
case ProjectFile::CSource: case ProjectFile::CSource:
@@ -470,20 +463,20 @@ void QmakeProject::updateCppCodeModel()
cppPart->files.prepend(ProjectFile(CppTools::CppModelManager::configurationFileName(), cppPart->files.prepend(ProjectFile(CppTools::CppModelManager::configurationFileName(),
ProjectFile::CXXSource)); ProjectFile::CXXSource));
pinfo.appendProjectPart(cppPart); projectInfo.appendProjectPart(cppPart);
if (!objcppPart->files.isEmpty()) {
objcppPart->displayName += QLatin1String(" (ObjC++)"); objcppPart->displayName += QLatin1String(" (ObjC++)");
objcppPart->languageExtensions |= ProjectPart::ObjectiveCExtensions; objcppPart->languageExtensions |= ProjectPart::ObjectiveCExtensions;
if (!objcppPart->files.isEmpty()) { projectInfo.appendProjectPart(objcppPart);
pinfo.appendProjectPart(objcppPart);
cppPart->displayName += QLatin1String(" (C++)"); cppPart->displayName += QLatin1String(" (C++)");
} }
} }
pinfo.finish();
// Also update Code Model Support for generated files: projectInfo.finish();
CppTools::GeneratedCodeModelSupport::update(generators); CppTools::GeneratedCodeModelSupport::update(generators);
m_codeModelFuture = CppTools::CppModelManager::instance()->updateProjectInfo(projectInfo);
m_codeModelFuture = modelmanager->updateProjectInfo(pinfo);
} }
void QmakeProject::updateQmlJSCodeModel() void QmakeProject::updateQmlJSCodeModel()