forked from qt-creator/qt-creator
ClangCodeModel: Move another call out of a tight loop
... when creating a compilation db. Change-Id: I4d392587f13214042b449a450ef1d4ae1c283ecb Reviewed-by: David Schulz <david.schulz@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
@@ -1454,11 +1454,12 @@ private:
|
|||||||
|
|
||||||
static void addToCompilationDb(QJsonObject &cdb,
|
static void addToCompilationDb(QJsonObject &cdb,
|
||||||
const CppEditor::CompilerOptionsBuilder &optionsBuilder,
|
const CppEditor::CompilerOptionsBuilder &optionsBuilder,
|
||||||
|
CppEditor::UsePrecompiledHeaders usePch,
|
||||||
const QStringList &projectOptions,
|
const QStringList &projectOptions,
|
||||||
const Utils::FilePath &workingDir,
|
const Utils::FilePath &workingDir,
|
||||||
const CppEditor::ProjectFile &sourceFile)
|
const CppEditor::ProjectFile &sourceFile)
|
||||||
{
|
{
|
||||||
QStringList args = clangOptionsForFile(optionsBuilder, sourceFile, projectOptions);
|
QStringList args = clangOptionsForFile(optionsBuilder, sourceFile, projectOptions, usePch);
|
||||||
|
|
||||||
// TODO: clangd seems to apply some heuristics depending on what we put here.
|
// TODO: clangd seems to apply some heuristics depending on what we put here.
|
||||||
// Should we make use of them or keep using our own?
|
// Should we make use of them or keep using our own?
|
||||||
@@ -1495,8 +1496,9 @@ ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir)
|
|||||||
CppEditor::CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder(
|
CppEditor::CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder(
|
||||||
*CppEditor::CppModelManager::instance()->fallbackProjectPart(),
|
*CppEditor::CppModelManager::instance()->fallbackProjectPart(),
|
||||||
warningsConfig);
|
warningsConfig);
|
||||||
|
const CppEditor::UsePrecompiledHeaders usePch = CppEditor::getPchUsage();
|
||||||
const QStringList clangOptions = clangOptionsForFile(
|
const QStringList clangOptions = clangOptionsForFile(
|
||||||
optionsBuilder, {}, optionsForProject(nullptr, warningsConfig));
|
optionsBuilder, {}, optionsForProject(nullptr, warningsConfig), usePch);
|
||||||
initOptions.insert("fallbackFlags", QJsonArray::fromStringList(clangOptions));
|
initOptions.insert("fallbackFlags", QJsonArray::fromStringList(clangOptions));
|
||||||
setInitializationOptions(initOptions);
|
setInitializationOptions(initOptions);
|
||||||
}
|
}
|
||||||
@@ -1919,8 +1921,8 @@ void ClangdClient::updateParserConfig(const Utils::FilePath &filePath,
|
|||||||
warningsConfig);
|
warningsConfig);
|
||||||
const CppEditor::ProjectFile file(filePath.toString(),
|
const CppEditor::ProjectFile file(filePath.toString(),
|
||||||
CppEditor::ProjectFile::classify(filePath.toString()));
|
CppEditor::ProjectFile::classify(filePath.toString()));
|
||||||
addToCompilationDb(cdbChanges, optionsBuilder, optionsForProject(project(), warningsConfig),
|
addToCompilationDb(cdbChanges, optionsBuilder, CppEditor::getPchUsage(),
|
||||||
filePath.parentDir(), file);
|
optionsForProject(project(), warningsConfig), filePath.parentDir(), file);
|
||||||
QJsonObject settings;
|
QJsonObject settings;
|
||||||
addCompilationDb(settings, cdbChanges);
|
addCompilationDb(settings, cdbChanges);
|
||||||
DidChangeConfigurationParams configChangeParams;
|
DidChangeConfigurationParams configChangeParams;
|
||||||
|
|||||||
@@ -187,7 +187,8 @@ static QJsonObject createFileObject(const FilePath &buildDir,
|
|||||||
const ProjectPart &projectPart,
|
const ProjectPart &projectPart,
|
||||||
const ProjectFile &projFile,
|
const ProjectFile &projFile,
|
||||||
CompilationDbPurpose purpose,
|
CompilationDbPurpose purpose,
|
||||||
const QStringList &projectOptions)
|
const QStringList &projectOptions,
|
||||||
|
UsePrecompiledHeaders usePch)
|
||||||
{
|
{
|
||||||
QJsonObject fileObject;
|
QJsonObject fileObject;
|
||||||
fileObject["file"] = projFile.path;
|
fileObject["file"] = projFile.path;
|
||||||
@@ -213,7 +214,7 @@ static QJsonObject createFileObject(const FilePath &buildDir,
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
args = QJsonArray::fromStringList(clangOptionsForFile(optionsBuilder, projFile,
|
args = QJsonArray::fromStringList(clangOptionsForFile(optionsBuilder, projFile,
|
||||||
projectOptions));
|
projectOptions, usePch));
|
||||||
args.prepend("clang"); // TODO: clang-cl for MSVC targets? Does it matter at all what we put here?
|
args.prepend("clang"); // TODO: clang-cl for MSVC targets? Does it matter at all what we put here?
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,6 +244,7 @@ GenerateCompilationDbResult generateCompilationDB(const CppEditor::ProjectInfo::
|
|||||||
}
|
}
|
||||||
compileCommandsFile.write("[");
|
compileCommandsFile.write("[");
|
||||||
|
|
||||||
|
const UsePrecompiledHeaders usePch = getPchUsage();
|
||||||
for (ProjectPart::ConstPtr projectPart : projectInfo->projectParts()) {
|
for (ProjectPart::ConstPtr projectPart : projectInfo->projectParts()) {
|
||||||
QStringList args;
|
QStringList args;
|
||||||
const CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder(*projectPart,
|
const CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder(*projectPart,
|
||||||
@@ -251,7 +253,7 @@ GenerateCompilationDbResult generateCompilationDB(const CppEditor::ProjectInfo::
|
|||||||
args = projectPartArguments(*projectPart);
|
args = projectPartArguments(*projectPart);
|
||||||
for (const ProjectFile &projFile : projectPart->files) {
|
for (const ProjectFile &projFile : projectPart->files) {
|
||||||
const QJsonObject json = createFileObject(baseDir, args, optionsBuilder, *projectPart,
|
const QJsonObject json = createFileObject(baseDir, args, optionsBuilder, *projectPart,
|
||||||
projFile, purpose, projectOptions);
|
projFile, purpose, projectOptions, usePch);
|
||||||
if (compileCommandsFile.size() > 1)
|
if (compileCommandsFile.size() > 1)
|
||||||
compileCommandsFile.write(",");
|
compileCommandsFile.write(",");
|
||||||
compileCommandsFile.write('\n' + QJsonDocument(json).toJson().trimmed());
|
compileCommandsFile.write('\n' + QJsonDocument(json).toJson().trimmed());
|
||||||
@@ -334,20 +336,20 @@ static ClangProjectSettings &getProjectSettings(ProjectExplorer::Project *projec
|
|||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
QStringList clangOptionsForFile(CompilerOptionsBuilder optionsBuilder,
|
QStringList clangOptionsForFile(CompilerOptionsBuilder optionsBuilder,
|
||||||
const ProjectFile &file, const QStringList &projectOptions)
|
const ProjectFile &file, const QStringList &projectOptions,
|
||||||
|
UsePrecompiledHeaders usePch)
|
||||||
{
|
{
|
||||||
ProjectFile::Kind fileKind = file.kind;
|
ProjectFile::Kind fileKind = file.kind;
|
||||||
if (fileKind == ProjectFile::AmbiguousHeader) {
|
if (fileKind == ProjectFile::AmbiguousHeader) {
|
||||||
fileKind = optionsBuilder.projectPart().languageVersion <= LanguageVersion::LatestC
|
fileKind = optionsBuilder.projectPart().languageVersion <= LanguageVersion::LatestC
|
||||||
? ProjectFile::CHeader : ProjectFile::CXXHeader;
|
? ProjectFile::CHeader : ProjectFile::CXXHeader;
|
||||||
}
|
}
|
||||||
auto pchUsage = getPchUsage();
|
if (usePch == UsePrecompiledHeaders::Yes
|
||||||
if (pchUsage == UsePrecompiledHeaders::Yes
|
|
||||||
&& optionsBuilder.projectPart().precompiledHeaders.contains(file.path)) {
|
&& optionsBuilder.projectPart().precompiledHeaders.contains(file.path)) {
|
||||||
pchUsage = UsePrecompiledHeaders::No;
|
usePch = UsePrecompiledHeaders::No;
|
||||||
}
|
}
|
||||||
optionsBuilder.updateFileLanguage(file.kind);
|
optionsBuilder.updateFileLanguage(file.kind);
|
||||||
optionsBuilder.addPrecompiledHeaderOptions(pchUsage);
|
optionsBuilder.addPrecompiledHeaderOptions(usePch);
|
||||||
return projectOptions + optionsBuilder.options();
|
return projectOptions + optionsBuilder.options();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ CppEditor::CompilerOptionsBuilder clangOptionsBuilder(
|
|||||||
const CppEditor::ClangDiagnosticConfig &warningsConfig);
|
const CppEditor::ClangDiagnosticConfig &warningsConfig);
|
||||||
QStringList clangOptionsForFile(CppEditor::CompilerOptionsBuilder optionsBuilder,
|
QStringList clangOptionsForFile(CppEditor::CompilerOptionsBuilder optionsBuilder,
|
||||||
const CppEditor::ProjectFile &file,
|
const CppEditor::ProjectFile &file,
|
||||||
const QStringList &projectOptions);
|
const QStringList &projectOptions, CppEditor::UsePrecompiledHeaders usePch);
|
||||||
|
|
||||||
CppEditor::ProjectPart::ConstPtr projectPartForFile(const QString &filePath);
|
CppEditor::ProjectPart::ConstPtr projectPartForFile(const QString &filePath);
|
||||||
CppEditor::ProjectPart::ConstPtr projectPartForFileBasedOnProcessor(const QString &filePath);
|
CppEditor::ProjectPart::ConstPtr projectPartForFileBasedOnProcessor(const QString &filePath);
|
||||||
|
|||||||
Reference in New Issue
Block a user