From cee92463f7218d078b4eeea8064b66660785c03c Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 27 Feb 2017 14:02:38 +0100 Subject: [PATCH] ProjectPart: Allow for line/column information in project file Keep this information separate so that plugins using the information do not need to start parsing the project file. Change-Id: Ibecf431de1b12bbe820c6f8f9c986cffeb4972d2 Reviewed-by: Tim Jenssen Reviewed-by: Christian Stenger Reviewed-by: Nikolai Kosjar --- .../clangstaticanalyzerruncontrol.cpp | 7 ++++++- src/plugins/cppeditor/cppcodemodelinspectordialog.cpp | 9 +++++++-- src/plugins/cpptools/cppprojectinfogenerator.cpp | 2 ++ src/plugins/cpptools/cpprawprojectpart.cpp | 4 +++- src/plugins/cpptools/cpprawprojectpart.h | 4 +++- src/plugins/cpptools/projectpart.cpp | 4 ++++ src/plugins/cpptools/projectpart.h | 2 ++ src/plugins/qbsprojectmanager/qbsproject.cpp | 3 ++- 8 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp index 7635e6918a0..6ebe83044cc 100644 --- a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp +++ b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp @@ -405,7 +405,12 @@ static QHash generateProjectFileToProjectPartMapping( foreach (const ProjectPart::Ptr &projectPart, projectParts) { QTC_ASSERT(projectPart, continue); - mapping[projectPart->projectFile] = projectPart; + QString projectFile = projectPart->projectFile; + if (projectPart->projectFileLine >= 0) + projectFile += ':' + QString::number(projectPart->projectFileLine); + if (projectPart->projectFileColumn >= 0) + projectFile += ':' + QString::number(projectPart->projectFileColumn); + mapping[projectFile] = projectPart; } return mapping; diff --git a/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp b/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp index 04d1560297a..ecff5db57c4 100644 --- a/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp +++ b/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp @@ -1777,10 +1777,15 @@ void CppCodeModelInspectorDialog::updateProjectPartData(const ProjectPart::Ptr & projectName = project->displayName(); projectFilePath = project->projectFilePath().toUserOutput(); } + QString projectFileLocation = QDir::toNativeSeparators(part->projectFile); + if (part->projectFileLine > 0) + projectFileLocation += ":" + QString::number(part->projectFileLine); + if (part->projectFileColumn > 0) + projectFileLocation += ":" + QString::number(part->projectFileColumn); + KeyValueModel::Table table = KeyValueModel::Table() << qMakePair(QString::fromLatin1("Project Part Name"), part->displayName) - << qMakePair(QString::fromLatin1("Project Part File"), - QDir::toNativeSeparators(part->projectFile)) + << qMakePair(QString::fromLatin1("Project Part File"), projectFileLocation) << qMakePair(QString::fromLatin1("Project Name"), projectName) << qMakePair(QString::fromLatin1("Project File"), projectFilePath) << qMakePair(QString::fromLatin1("Selected For Building"), diff --git a/src/plugins/cpptools/cppprojectinfogenerator.cpp b/src/plugins/cpptools/cppprojectinfogenerator.cpp index e85faecf307..22c1d4b81ca 100644 --- a/src/plugins/cpptools/cppprojectinfogenerator.cpp +++ b/src/plugins/cpptools/cppprojectinfogenerator.cpp @@ -182,6 +182,8 @@ static ProjectPart::Ptr projectPartFromRawProjectPart(const RawProjectPart &rawP part->project = project; part->projectFile = rawProjectPart.projectFile; part->projectConfigFile = rawProjectPart.projectConfigFile; + part->projectFileLine = rawProjectPart.projectFileLine; + part->projectFileColumn = rawProjectPart.projectFileColumn; part->qtVersion = rawProjectPart.qtVersion; part->projectDefines = rawProjectPart.projectDefines; part->headerPaths = rawProjectPart.headerPaths; diff --git a/src/plugins/cpptools/cpprawprojectpart.cpp b/src/plugins/cpptools/cpprawprojectpart.cpp index 4df3458576b..b6945481784 100644 --- a/src/plugins/cpptools/cpprawprojectpart.cpp +++ b/src/plugins/cpptools/cpprawprojectpart.cpp @@ -54,9 +54,11 @@ void RawProjectPart::setFiles(const QStringList &files, FileClassifier fileClass this->fileClassifier = fileClassifier; } -void RawProjectPart::setProjectFile(const QString &projectFile) +void RawProjectPart::setProjectFile(const QString &projectFile, int line, int column) { this->projectFile = projectFile; + projectFileLine = line; + projectFileColumn = column; } void RawProjectPart::setConfigFileName(const QString &configFileName) diff --git a/src/plugins/cpptools/cpprawprojectpart.h b/src/plugins/cpptools/cpprawprojectpart.h index 7e6d36f4599..faa2cfb1989 100644 --- a/src/plugins/cpptools/cpprawprojectpart.h +++ b/src/plugins/cpptools/cpprawprojectpart.h @@ -60,7 +60,7 @@ public: using FileClassifier = std::function; void setFiles(const QStringList &files, FileClassifier fileClassifier = FileClassifier()); - void setProjectFile(const QString &projectFile); + void setProjectFile(const QString &projectFile, int line = -1, int column = -1); void setConfigFileName(const QString &configFileName); void setQtVersion(ProjectPart::QtVersion qtVersion); @@ -79,6 +79,8 @@ public: public: QString displayName; QString projectFile; + int projectFileLine = -1; + int projectFileColumn = -1; QString projectConfigFile; // currently only used by the Generic Project Manager QStringList precompiledHeaders; ProjectPartHeaderPaths headerPaths; diff --git a/src/plugins/cpptools/projectpart.cpp b/src/plugins/cpptools/projectpart.cpp index 1aa94374d31..d2c2e87b55c 100644 --- a/src/plugins/cpptools/projectpart.cpp +++ b/src/plugins/cpptools/projectpart.cpp @@ -64,6 +64,10 @@ ProjectPart::Ptr ProjectPart::copy() const QString ProjectPart::id() const { QString projectPartId = QDir::fromNativeSeparators(projectFile); + if (projectFileLine > 0) + projectPartId += ":" + QString::number(projectFileLine); + if (projectFileColumn > 0) + projectPartId += ":" + QString::number(projectFileColumn); if (!displayName.isEmpty()) projectPartId.append(QLatin1Char(' ') + displayName); return projectPartId; diff --git a/src/plugins/cpptools/projectpart.h b/src/plugins/cpptools/projectpart.h index a9e6e1e74cf..f2e27830326 100644 --- a/src/plugins/cpptools/projectpart.h +++ b/src/plugins/cpptools/projectpart.h @@ -105,6 +105,8 @@ public: QString displayName; QString projectFile; + int projectFileLine = -1; + int projectFileColumn = -1; QString projectConfigFile; // currently only used by the Generic Project Manager ProjectFiles files; diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index 82fe5d6310e..22eea056647 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -996,7 +996,8 @@ void QbsProject::updateCppCodeModel() rpp.setHeaderPaths(grpHeaderPaths); rpp.setDisplayName(grp.name()); - rpp.setProjectFile(groupLocationToProjectFile(grp.location())); + rpp.setProjectFile(grp.location().filePath(), + grp.location().line(), grp.location().column()); QHash filePathToSourceArtifact; bool hasCFiles = false;