From 57af3f1f3d5015ed2cde3817c79529eae0f5d2f0 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Thu, 20 Sep 2018 00:42:28 +0300 Subject: [PATCH 1/2] Clang: Fix compile commands generation for large projects ...such as Qt Creator. Avoid storing the entire JSON in-memory. Instead, write as you go. Change-Id: Ie298af546b25d80813a75d8dc09f3244488b8658 Reviewed-by: Ivan Donchevskii --- src/plugins/clangcodemodel/clangutils.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp index 2ba1f44c2a1..2150521e864 100644 --- a/src/plugins/clangcodemodel/clangutils.cpp +++ b/src/plugins/clangcodemodel/clangutils.cpp @@ -347,7 +347,8 @@ void generateCompilationDB(::Utils::FileName projectDir, CppTools::ProjectInfo p { QFile compileCommandsFile(projectDir.toString() + "/compile_commands.json"); - QJsonArray array; + compileCommandsFile.open(QIODevice::WriteOnly | QIODevice::Truncate); + compileCommandsFile.write("["); for (ProjectPart::Ptr projectPart : projectInfo.projectParts()) { const ::Utils::FileName buildDir = buildDirectory(*projectPart); @@ -357,12 +358,15 @@ void generateCompilationDB(::Utils::FileName projectDir, CppTools::ProjectInfo p optionsBuilder.build(CppTools::ProjectFile::Unclassified, CppTools::CompilerOptionsBuilder::PchUsage::None); - for (const ProjectFile &projFile : projectPart->files) - array.push_back(createFileObject(optionsBuilder, projFile, buildDir)); + for (const ProjectFile &projFile : projectPart->files) { + const QJsonObject json = createFileObject(optionsBuilder, projFile, buildDir); + if (compileCommandsFile.size() > 1) + compileCommandsFile.write(","); + compileCommandsFile.write('\n' + QJsonDocument(json).toJson().trimmed()); + } } - compileCommandsFile.open(QIODevice::WriteOnly | QIODevice::Truncate); - compileCommandsFile.write(QJsonDocument(array).toJson()); + compileCommandsFile.write("\n]"); compileCommandsFile.close(); } From 048f27633daa295a0cd5effd0b15c2cd8ea105fa Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 18 Sep 2018 18:41:37 +0200 Subject: [PATCH 2/2] Get rid of macros by using std functions Change-Id: Ie342b781b912dabbc890777db87793b5953dbe18 Reviewed-by: Marco Bubke --- src/plugins/texteditor/texteditoroverlay.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/plugins/texteditor/texteditoroverlay.cpp b/src/plugins/texteditor/texteditoroverlay.cpp index c6e1489d368..60fe5cc99e9 100644 --- a/src/plugins/texteditor/texteditoroverlay.cpp +++ b/src/plugins/texteditor/texteditoroverlay.cpp @@ -32,6 +32,8 @@ #include #include +#include + using namespace TextEditor; using namespace TextEditor::Internal; @@ -250,10 +252,10 @@ QPainterPath TextEditorOverlay::createSelectionPath(const QTextCursor &begin, co const int count = selection.count(); for (int i = 1; i < count-1; ++i) { -#define MAX3(a,b,c) qMax(a, qMax(b,c)) - qreal x = MAX3(selection.at(i-1).right(), - selection.at(i).right(), - selection.at(i+1).right()) + margin; + qreal x = std::max({selection.at(i - 1).right(), + selection.at(i).right(), + selection.at(i + 1).right()}) + + margin; points += QPointF(x+1, selection.at(i).top()); points += QPointF(x+1, selection.at(i).bottom()); @@ -266,10 +268,10 @@ QPainterPath TextEditorOverlay::createSelectionPath(const QTextCursor &begin, co points += lastSelection.topLeft() + QPointF(-margin, 0); for (int i = count-2; i > 0; --i) { -#define MIN3(a,b,c) qMin(a, qMin(b,c)) - qreal x = MIN3(selection.at(i-1).left(), - selection.at(i).left(), - selection.at(i+1).left()) - margin; + qreal x = std::min({selection.at(i - 1).left(), + selection.at(i).left(), + selection.at(i + 1).left()}) + - margin; points += QPointF(x, selection.at(i).bottom()+extra); points += QPointF(x, selection.at(i).top());