ProjectExplorer: Proliferate FilePath a bit

Change-Id: Ia671a1de17b9e58764375c5f64cc47b053b0725a
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2022-11-25 14:06:47 +01:00
parent 4d325522e0
commit 2704f8ff0b
17 changed files with 54 additions and 61 deletions

View File

@@ -14,6 +14,7 @@
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
using namespace ProjectExplorer; using namespace ProjectExplorer;
using namespace Utils;
namespace AutotoolsProjectManager::Internal { namespace AutotoolsProjectManager::Internal {
@@ -140,7 +141,7 @@ void AutotoolsBuildSystem::updateCppCodeModel()
if (cxxflags.isEmpty()) if (cxxflags.isEmpty())
cxxflags = cflags; cxxflags = cflags;
const QString includeFileBaseDir = projectDirectory().toString(); const FilePath includeFileBaseDir = projectDirectory();
rpp.setFlagsForC({kitInfo.cToolChain, cflags, includeFileBaseDir}); rpp.setFlagsForC({kitInfo.cToolChain, cflags, includeFileBaseDir});
rpp.setFlagsForCxx({kitInfo.cxxToolChain, cxxflags, includeFileBaseDir}); rpp.setFlagsForCxx({kitInfo.cxxToolChain, cxxflags, includeFileBaseDir});

View File

@@ -601,7 +601,7 @@ void CMakeBuildSystem::updateProjectData()
for (RawProjectPart &rpp : rpps) { for (RawProjectPart &rpp : rpps) {
rpp.setQtVersion( rpp.setQtVersion(
kitInfo.projectPartQtVersion); // TODO: Check if project actually uses Qt. kitInfo.projectPartQtVersion); // TODO: Check if project actually uses Qt.
const QString includeFileBaseDir = buildConfiguration()->buildDirectory().toString(); const FilePath includeFileBaseDir = buildConfiguration()->buildDirectory();
QStringList cxxFlags = rpp.flagsForCxx.commandLineFlags; QStringList cxxFlags = rpp.flagsForCxx.commandLineFlags;
QStringList cFlags = rpp.flagsForC.commandLineFlags; QStringList cFlags = rpp.flagsForC.commandLineFlags;
addTargetFlagForIos(cxxFlags, cFlags, this, [this] { addTargetFlagForIos(cxxFlags, cFlags, this, [this] {

View File

@@ -148,8 +148,8 @@ void addDriverModeFlagIfNeeded(const ToolChain *toolchain,
RawProjectPart makeRawProjectPart(const Utils::FilePath &projectFile, RawProjectPart makeRawProjectPart(const Utils::FilePath &projectFile,
Kit *kit, Kit *kit,
ProjectExplorer::KitInfo &kitInfo, ProjectExplorer::KitInfo &kitInfo,
const QString &workingDir, const FilePath &workingDir,
const Utils::FilePath &fileName, const FilePath &filePath,
QStringList flags) QStringList flags)
{ {
HeaderPaths headerPaths; HeaderPaths headerPaths;
@@ -157,7 +157,7 @@ RawProjectPart makeRawProjectPart(const Utils::FilePath &projectFile,
CppEditor::ProjectFile::Kind fileKind = CppEditor::ProjectFile::Unclassified; CppEditor::ProjectFile::Kind fileKind = CppEditor::ProjectFile::Unclassified;
const QStringList originalFlags = flags; const QStringList originalFlags = flags;
filteredFlags(fileName.fileName(), filteredFlags(filePath,
workingDir, workingDir,
flags, flags,
headerPaths, headerPaths,
@@ -166,10 +166,12 @@ RawProjectPart makeRawProjectPart(const Utils::FilePath &projectFile,
kitInfo.sysRootPath); kitInfo.sysRootPath);
RawProjectPart rpp; RawProjectPart rpp;
rpp.setProjectFileLocation(projectFile.toString()); rpp.setProjectFileLocation(projectFile.toString());
rpp.setBuildSystemTarget(workingDir); rpp.setBuildSystemTarget(workingDir.path());
rpp.setDisplayName(fileName.fileName()); rpp.setDisplayName(filePath.fileName());
rpp.setFiles({fileName.toString()}); rpp.setFiles({filePath.toFSPathString()});
rpp.setHeaderPaths(headerPaths); rpp.setHeaderPaths(headerPaths);
rpp.setMacros(macros); rpp.setMacros(macros);

View File

@@ -92,7 +92,9 @@ public:
QStringList getFilteredFlags() QStringList getFilteredFlags()
{ {
filteredFlags(fileName, workingDir, flags, headerPaths, macros, fileKind, sysRoot); filteredFlags(FilePath::fromString(fileName),
FilePath::fromString(workingDir),
flags, headerPaths, macros, fileKind, sysRoot);
return flags; return flags;
} }

View File

@@ -22,15 +22,6 @@ using namespace Utils;
namespace CompilationDatabaseProjectManager { namespace CompilationDatabaseProjectManager {
namespace Internal { namespace Internal {
static QString updatedPathFlag(const QString &pathStr, const QString &workingDir)
{
QString result = pathStr;
if (QDir(pathStr).isRelative())
result = workingDir + "/" + pathStr;
return result;
}
static CppEditor::ProjectFile::Kind fileKindFromString(QString flag) static CppEditor::ProjectFile::Kind fileKindFromString(QString flag)
{ {
using namespace CppEditor; using namespace CppEditor;
@@ -86,13 +77,13 @@ QStringList filterFromFileName(const QStringList &flags, QString fileName)
return result; return result;
} }
void filteredFlags(const QString &fileName, void filteredFlags(const FilePath &filePath,
const QString &workingDir, const FilePath &workingDir,
QStringList &flags, QStringList &flags,
HeaderPaths &headerPaths, HeaderPaths &headerPaths,
Macros &macros, Macros &macros,
CppEditor::ProjectFile::Kind &fileKind, CppEditor::ProjectFile::Kind &fileKind,
Utils::FilePath &sysRoot) FilePath &sysRoot)
{ {
if (flags.empty()) if (flags.empty())
return; return;
@@ -113,7 +104,7 @@ void filteredFlags(const QString &fileName,
} }
if (includePathType) { if (includePathType) {
const QString pathStr = updatedPathFlag(flag, workingDir); const QString pathStr = workingDir.resolvePath(flag).toString();
headerPaths.append({pathStr, includePathType.value()}); headerPaths.append({pathStr, includePathType.value()});
includePathType.reset(); includePathType.reset();
continue; continue;
@@ -152,7 +143,7 @@ void filteredFlags(const QString &fileName,
return flag.startsWith(opt) && flag != opt; return flag.startsWith(opt) && flag != opt;
}); });
if (!includeOpt.isEmpty()) { if (!includeOpt.isEmpty()) {
const QString pathStr = updatedPathFlag(flag.mid(includeOpt.length()), workingDir); const QString pathStr = workingDir.resolvePath(flag.mid(includeOpt.length())).toString();
headerPaths.append({pathStr, userIncludeFlags.contains(includeOpt) headerPaths.append({pathStr, userIncludeFlags.contains(includeOpt)
? HeaderPathType::User : HeaderPathType::System}); ? HeaderPathType::User : HeaderPathType::System});
continue; continue;
@@ -182,14 +173,14 @@ void filteredFlags(const QString &fileName,
if (flag.startsWith("--sysroot=")) { if (flag.startsWith("--sysroot=")) {
if (sysRoot.isEmpty()) if (sysRoot.isEmpty())
sysRoot = FilePath::fromUserInput(updatedPathFlag(flag.mid(10), workingDir)); sysRoot = workingDir.resolvePath(flag.mid(10));
continue; continue;
} }
if ((flag.startsWith("-std=") || flag.startsWith("/std:")) if ((flag.startsWith("-std=") || flag.startsWith("/std:"))
&& fileKind == CppEditor::ProjectFile::Unclassified) { && fileKind == CppEditor::ProjectFile::Unclassified) {
const bool cpp = (flag.contains("c++") || flag.contains("gnu++")); const bool cpp = (flag.contains("c++") || flag.contains("gnu++"));
if (CppEditor::ProjectFile::isHeader(CppEditor::ProjectFile::classify(fileName))) if (CppEditor::ProjectFile::isHeader(CppEditor::ProjectFile::classify(filePath.path())))
fileKind = cpp ? CppEditor::ProjectFile::CXXHeader : CppEditor::ProjectFile::CHeader; fileKind = cpp ? CppEditor::ProjectFile::CXXHeader : CppEditor::ProjectFile::CHeader;
else else
fileKind = cpp ? CppEditor::ProjectFile::CXXSource : CppEditor::ProjectFile::CSource; fileKind = cpp ? CppEditor::ProjectFile::CXXSource : CppEditor::ProjectFile::CSource;
@@ -203,7 +194,7 @@ void filteredFlags(const QString &fileName,
} }
if (fileKind == CppEditor::ProjectFile::Unclassified) if (fileKind == CppEditor::ProjectFile::Unclassified)
fileKind = CppEditor::ProjectFile::classify(fileName); fileKind = CppEditor::ProjectFile::classify(filePath.path());
flags = filtered; flags = filtered;
} }

View File

@@ -4,10 +4,8 @@
#pragma once #pragma once
#include <cppeditor/cppprojectfile.h> #include <cppeditor/cppprojectfile.h>
#include <utils/filepath.h>
#include <QHash> #include <QHash>
#include <QStringList>
namespace ProjectExplorer { namespace ProjectExplorer {
class HeaderPath; class HeaderPath;
@@ -21,7 +19,7 @@ class DbEntry {
public: public:
QStringList flags; QStringList flags;
Utils::FilePath fileName; Utils::FilePath fileName;
QString workingDir; Utils::FilePath workingDir;
}; };
class DbContents { class DbContents {
@@ -35,8 +33,8 @@ using MimeBinaryCache = QHash<QString, bool>;
QStringList filterFromFileName(const QStringList &flags, QString baseName); QStringList filterFromFileName(const QStringList &flags, QString baseName);
void filteredFlags(const QString &fileName, void filteredFlags(const Utils::FilePath &filePath,
const QString &workingDir, const Utils::FilePath &workingDir,
QStringList &flags, QStringList &flags,
QVector<ProjectExplorer::HeaderPath> &headerPaths, QVector<ProjectExplorer::HeaderPath> &headerPaths,
QVector<ProjectExplorer::Macro> &macros, QVector<ProjectExplorer::Macro> &macros,

View File

@@ -182,7 +182,7 @@ std::vector<DbEntry> CompilationDbParser::readJsonObjects() const
const Utils::FilePath filePath = jsonObjectFilePath(object); const Utils::FilePath filePath = jsonObjectFilePath(object);
const QStringList flags = filterFromFileName(jsonObjectFlags(object, flagsCache), const QStringList flags = filterFromFileName(jsonObjectFlags(object, flagsCache),
filePath.fileName()); filePath.fileName());
result.push_back({flags, filePath, object["directory"].toString()}); result.push_back({flags, filePath, FilePath::fromUserInput(object["directory"].toString())});
objectStart = m_projectFileContents.indexOf('{', objectEnd + 1); objectStart = m_projectFileContents.indexOf('{', objectEnd + 1);
objectEnd = m_projectFileContents.indexOf('}', objectStart + 1); objectEnd = m_projectFileContents.indexOf('}', objectStart + 1);

View File

@@ -569,8 +569,8 @@ void GenericBuildSystem::refreshCppCodeModel()
rpp.setQtVersion(kitInfo.projectPartQtVersion); rpp.setQtVersion(kitInfo.projectPartQtVersion);
rpp.setHeaderPaths(m_projectIncludePaths); rpp.setHeaderPaths(m_projectIncludePaths);
rpp.setConfigFileName(m_configFileName); rpp.setConfigFileName(m_configFileName);
rpp.setFlagsForCxx({nullptr, m_cxxflags, projectDirectory().toString()}); rpp.setFlagsForCxx({nullptr, m_cxxflags, projectDirectory()});
rpp.setFlagsForC({nullptr, m_cflags, projectDirectory().toString()}); rpp.setFlagsForC({nullptr, m_cflags, projectDirectory()});
static const auto sourceFilesToStringList = [](const SourceFiles &sourceFiles) { static const auto sourceFilesToStringList = [](const SourceFiles &sourceFiles) {
return Utils::transform(sourceFiles, [](const SourceFile &f) { return Utils::transform(sourceFiles, [](const SourceFile &f) {

View File

@@ -569,7 +569,7 @@ WarningFlags GccToolChain::warningFlags(const QStringList &cflags) const
return flags; return flags;
} }
QStringList GccToolChain::includedFiles(const QStringList &flags, const QString &directoryPath) const FilePaths GccToolChain::includedFiles(const QStringList &flags, const FilePath &directoryPath) const
{ {
return ToolChain::includedFiles("-include", flags, directoryPath, PossiblyConcatenatedFlag::No); return ToolChain::includedFiles("-include", flags, directoryPath, PossiblyConcatenatedFlag::No);
} }

View File

@@ -55,8 +55,8 @@ public:
Utils::LanguageExtensions languageExtensions(const QStringList &cxxflags) const override; Utils::LanguageExtensions languageExtensions(const QStringList &cxxflags) const override;
Utils::WarningFlags warningFlags(const QStringList &cflags) const override; Utils::WarningFlags warningFlags(const QStringList &cflags) const override;
QStringList includedFiles(const QStringList &flags, Utils::FilePaths includedFiles(const QStringList &flags,
const QString &directoryPath) const override; const Utils::FilePath &directoryPath) const override;
MacroInspectionRunner createMacroInspectionRunner() const override; MacroInspectionRunner createMacroInspectionRunner() const override;
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(const Utils::Environment &env) const override; BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(const Utils::Environment &env) const override;

View File

@@ -1124,8 +1124,8 @@ WarningFlags MsvcToolChain::warningFlags(const QStringList &cflags) const
return flags; return flags;
} }
QStringList MsvcToolChain::includedFiles(const QStringList &flags, FilePaths MsvcToolChain::includedFiles(const QStringList &flags,
const QString &directoryPath) const const FilePath &directoryPath) const
{ {
return ToolChain::includedFiles("/FI", flags, directoryPath, PossiblyConcatenatedFlag::Yes); return ToolChain::includedFiles("/FI", flags, directoryPath, PossiblyConcatenatedFlag::Yes);
} }

View File

@@ -55,8 +55,8 @@ public:
MacroInspectionRunner createMacroInspectionRunner() const override; MacroInspectionRunner createMacroInspectionRunner() const override;
Utils::LanguageExtensions languageExtensions(const QStringList &cxxflags) const override; Utils::LanguageExtensions languageExtensions(const QStringList &cxxflags) const override;
Utils::WarningFlags warningFlags(const QStringList &cflags) const override; Utils::WarningFlags warningFlags(const QStringList &cflags) const override;
QStringList includedFiles(const QStringList &flags, Utils::FilePaths includedFiles(const QStringList &flags,
const QString &directoryPath) const override; const Utils::FilePath &directoryPath) const override;
BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner( BuiltInHeaderPathsRunner createBuiltInHeaderPathsRunner(
const Utils::Environment &env) const override; const Utils::Environment &env) const override;
void addToEnvironment(Utils::Environment &env) const override; void addToEnvironment(Utils::Environment &env) const override;

View File

@@ -11,13 +11,14 @@
#include "target.h" #include "target.h"
#include <ios/iosconstants.h> #include <ios/iosconstants.h>
#include <utils/algorithm.h> #include <utils/algorithm.h>
namespace ProjectExplorer { namespace ProjectExplorer {
RawProjectPartFlags::RawProjectPartFlags(const ToolChain *toolChain, RawProjectPartFlags::RawProjectPartFlags(const ToolChain *toolChain,
const QStringList &commandLineFlags, const QStringList &commandLineFlags,
const QString &includeFileBaseDir) const Utils::FilePath &includeFileBaseDir)
{ {
// Keep the following cheap/non-blocking for the ui thread. Expensive // Keep the following cheap/non-blocking for the ui thread. Expensive
// operations are encapsulated in ToolChainInfo as "runners". // operations are encapsulated in ToolChainInfo as "runners".
@@ -25,7 +26,8 @@ RawProjectPartFlags::RawProjectPartFlags(const ToolChain *toolChain,
if (toolChain) { if (toolChain) {
warningFlags = toolChain->warningFlags(commandLineFlags); warningFlags = toolChain->warningFlags(commandLineFlags);
languageExtensions = toolChain->languageExtensions(commandLineFlags); languageExtensions = toolChain->languageExtensions(commandLineFlags);
includedFiles = toolChain->includedFiles(commandLineFlags, includeFileBaseDir); includedFiles = Utils::transform(toolChain->includedFiles(commandLineFlags, includeFileBaseDir),
&Utils::FilePath::toFSPathString);
} }
} }

View File

@@ -37,7 +37,7 @@ class PROJECTEXPLORER_EXPORT RawProjectPartFlags
public: public:
RawProjectPartFlags() = default; RawProjectPartFlags() = default;
RawProjectPartFlags(const ToolChain *toolChain, const QStringList &commandLineFlags, RawProjectPartFlags(const ToolChain *toolChain, const QStringList &commandLineFlags,
const QString &includeFileBaseDir); const Utils::FilePath &includeFileBaseDir);
public: public:
QStringList commandLineFlags; QStringList commandLineFlags;

View File

@@ -192,7 +192,7 @@ bool ToolChain::isValid() const
return d->m_isValid.value_or(false); return d->m_isValid.value_or(false);
} }
QStringList ToolChain::includedFiles(const QStringList &flags, const QString &directory) const FilePaths ToolChain::includedFiles(const QStringList &flags, const FilePath &directory) const
{ {
Q_UNUSED(flags) Q_UNUSED(flags)
Q_UNUSED(directory) Q_UNUSED(directory)
@@ -466,12 +466,12 @@ Utils::LanguageVersion ToolChain::languageVersion(const Utils::Id &language, con
} }
} }
QStringList ToolChain::includedFiles(const QString &option, FilePaths ToolChain::includedFiles(const QString &option,
const QStringList &flags, const QStringList &flags,
const QString &directoryPath, const FilePath &directoryPath,
PossiblyConcatenatedFlag possiblyConcatenated) PossiblyConcatenatedFlag possiblyConcatenated)
{ {
QStringList result; FilePaths result;
for (int i = 0; i < flags.size(); ++i) { for (int i = 0; i < flags.size(); ++i) {
QString includeFile; QString includeFile;
@@ -484,11 +484,8 @@ QStringList ToolChain::includedFiles(const QString &option,
if (includeFile.isEmpty() && flag == option && i + 1 < flags.size()) if (includeFile.isEmpty() && flag == option && i + 1 < flags.size())
includeFile = flags[++i]; includeFile = flags[++i];
if (!includeFile.isEmpty()) { if (!includeFile.isEmpty())
if (!QFileInfo(includeFile).isAbsolute()) result.append(directoryPath.resolvePath(includeFile));
includeFile = directoryPath + "/" + includeFile;
result.append(QDir::cleanPath(includeFile));
}
} }
return result; return result;

View File

@@ -102,7 +102,7 @@ public:
virtual Utils::LanguageExtensions languageExtensions(const QStringList &cxxflags) const = 0; virtual Utils::LanguageExtensions languageExtensions(const QStringList &cxxflags) const = 0;
virtual Utils::WarningFlags warningFlags(const QStringList &cflags) const = 0; virtual Utils::WarningFlags warningFlags(const QStringList &cflags) const = 0;
virtual QStringList includedFiles(const QStringList &flags, const QString &directory) const; virtual Utils::FilePaths includedFiles(const QStringList &flags, const Utils::FilePath &directory) const;
virtual QString sysRoot() const; virtual QString sysRoot() const;
QString explicitCodeModelTargetTriple() const; QString explicitCodeModelTargetTriple() const;
@@ -184,9 +184,9 @@ protected:
virtual bool fromMap(const QVariantMap &data); virtual bool fromMap(const QVariantMap &data);
enum class PossiblyConcatenatedFlag { No, Yes }; enum class PossiblyConcatenatedFlag { No, Yes };
static QStringList includedFiles(const QString &option, static Utils::FilePaths includedFiles(const QString &option,
const QStringList &flags, const QStringList &flags,
const QString &directoryPath, const Utils::FilePath &directoryPath,
PossiblyConcatenatedFlag possiblyConcatenated); PossiblyConcatenatedFlag possiblyConcatenated);
private: private:

View File

@@ -337,7 +337,7 @@ void QmakeBuildSystem::updateCppCodeModel()
rpp.setBuildTargetType(BuildTargetType::Unknown); rpp.setBuildTargetType(BuildTargetType::Unknown);
break; break;
} }
const QString includeFileBaseDir = pro->sourceDir().toString(); const FilePath includeFileBaseDir = pro->sourceDir();
QStringList cxxArgs = pro->variableValue(Variable::CppFlags); QStringList cxxArgs = pro->variableValue(Variable::CppFlags);
QStringList cArgs = pro->variableValue(Variable::CFlags); QStringList cArgs = pro->variableValue(Variable::CFlags);