aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2019-02-19 19:20:57 +0100
committerMarco Bubke <marco.bubke@qt.io>2019-02-22 12:09:00 +0000
commit8c781f7e6aa763a4caa21c5f5c5504b79634ea46 (patch)
tree987a87ddcfa5d68f24aa0b92ddb0120beb791a20 /src/libs
parent256d140933216b64123d1c50dd5e047898037ec2 (diff)
Clang: Fix progress bar
Sometimes the messages are not send immediately, so we force it. Task-number: QTCREATORBUG-21957 Change-Id: I9526cb4b4e3dd8b7a02e15f77bffdc51917d47c8 Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'src/libs')
-rw-r--r--src/libs/clangsupport/baseserverproxy.cpp29
-rw-r--r--src/libs/clangsupport/baseserverproxy.h3
-rw-r--r--src/libs/clangsupport/clangcodemodelclientproxy.cpp33
-rw-r--r--src/libs/clangsupport/clangcodemodelclientproxy.h3
-rw-r--r--src/libs/clangsupport/clangcodemodelconnectionclient.cpp12
-rw-r--r--src/libs/clangsupport/clangcodemodelconnectionclient.h2
-rw-r--r--src/libs/clangsupport/clangcodemodelserverproxy.cpp5
-rw-r--r--src/libs/clangsupport/clangcodemodelserverproxy.h1
-rw-r--r--src/libs/clangsupport/connectionclient.h2
-rw-r--r--src/libs/clangsupport/pchmanagerclientproxy.cpp38
-rw-r--r--src/libs/clangsupport/pchmanagerclientproxy.h8
-rw-r--r--src/libs/clangsupport/pchmanagerserverproxy.cpp5
-rw-r--r--src/libs/clangsupport/pchmanagerserverproxy.h1
-rw-r--r--src/libs/clangsupport/progresscounter.h2
-rw-r--r--src/libs/clangsupport/refactoringclientproxy.cpp38
-rw-r--r--src/libs/clangsupport/refactoringclientproxy.h6
-rw-r--r--src/libs/clangsupport/refactoringserverproxy.cpp8
-rw-r--r--src/libs/clangsupport/refactoringserverproxy.h2
-rw-r--r--src/libs/clangsupport/writemessageblock.cpp24
-rw-r--r--src/libs/clangsupport/writemessageblock.h8
20 files changed, 142 insertions, 88 deletions
diff --git a/src/libs/clangsupport/baseserverproxy.cpp b/src/libs/clangsupport/baseserverproxy.cpp
index 6f563ffd9d..0c565de269 100644
--- a/src/libs/clangsupport/baseserverproxy.cpp
+++ b/src/libs/clangsupport/baseserverproxy.cpp
@@ -26,14 +26,25 @@
#include "baseserverproxy.h"
#include "messageenvelop.h"
-#include <QIODevice>
+#include <QLocalSocket>
namespace ClangBackEnd {
+BaseServerProxy::BaseServerProxy(IpcClientInterface *client, QLocalSocket *localSocket)
+ : m_writeMessageBlock(localSocket)
+ , m_readMessageBlock(localSocket)
+ , m_client(client)
+{
+ if (localSocket)
+ QObject::connect(localSocket, &QIODevice::readyRead, [this]() {
+ BaseServerProxy::readMessages();
+ });
+}
+
BaseServerProxy::BaseServerProxy(IpcClientInterface *client, QIODevice *ioDevice)
- : m_writeMessageBlock(ioDevice),
- m_readMessageBlock(ioDevice),
- m_client(client)
+ : m_writeMessageBlock(ioDevice)
+ , m_readMessageBlock(ioDevice)
+ , m_client(client)
{
if (ioDevice)
QObject::connect(ioDevice, &QIODevice::readyRead, [this] () { BaseServerProxy::readMessages(); });
@@ -51,11 +62,13 @@ void BaseServerProxy::resetState()
m_readMessageBlock.resetState();
}
-void BaseServerProxy::setIoDevice(QIODevice *ioDevice)
+void BaseServerProxy::setLocalSocket(QLocalSocket *localSocket)
{
- QObject::connect(ioDevice, &QIODevice::readyRead, [this] () { BaseServerProxy::readMessages(); });
- m_writeMessageBlock.setIoDevice(ioDevice);
- m_readMessageBlock.setIoDevice(ioDevice);
+ QObject::connect(localSocket, &QIODevice::readyRead, [this]() {
+ BaseServerProxy::readMessages();
+ });
+ m_writeMessageBlock.setLocalSocket(localSocket);
+ m_readMessageBlock.setIoDevice(localSocket);
}
} // namespace ClangBackEnd
diff --git a/src/libs/clangsupport/baseserverproxy.h b/src/libs/clangsupport/baseserverproxy.h
index 246f0604ec..797f02999d 100644
--- a/src/libs/clangsupport/baseserverproxy.h
+++ b/src/libs/clangsupport/baseserverproxy.h
@@ -37,13 +37,14 @@ class CLANGSUPPORT_EXPORT BaseServerProxy
BaseServerProxy &operator=(const BaseServerProxy&) = delete;
public:
+ BaseServerProxy(IpcClientInterface *client, QLocalSocket *localSocket);
BaseServerProxy(IpcClientInterface *client, QIODevice *ioDevice);
void readMessages();
void resetState();
- void setIoDevice(QIODevice *ioDevice);
+ void setLocalSocket(QLocalSocket *localSocket);
protected:
~BaseServerProxy() = default;
diff --git a/src/libs/clangsupport/clangcodemodelclientproxy.cpp b/src/libs/clangsupport/clangcodemodelclientproxy.cpp
index 538677e6c1..cf3e699e21 100644
--- a/src/libs/clangsupport/clangcodemodelclientproxy.cpp
+++ b/src/libs/clangsupport/clangcodemodelclientproxy.cpp
@@ -31,19 +31,34 @@
#include "messageenvelop.h"
#include <QDebug>
-#include <QIODevice>
+#include <QLocalSocket>
#include <QVariant>
#include <QVector>
namespace ClangBackEnd {
-ClangCodeModelClientProxy::ClangCodeModelClientProxy(ClangCodeModelServerInterface *server, QIODevice *ioDevice)
- : m_writeMessageBlock(ioDevice),
- m_readMessageBlock(ioDevice),
- m_server(server),
- m_ioDevice(ioDevice)
+ClangCodeModelClientProxy::ClangCodeModelClientProxy(ClangCodeModelServerInterface *server,
+ QLocalSocket *localSocket)
+ : m_writeMessageBlock(localSocket)
+ , m_readMessageBlock(localSocket)
+ , m_server(server)
+ , m_ioDevice(localSocket)
{
- QObject::connect(m_ioDevice, &QIODevice::readyRead, [this] () {ClangCodeModelClientProxy::readMessages();});
+ QObject::connect(m_ioDevice, &QIODevice::readyRead, [this]() {
+ ClangCodeModelClientProxy::readMessages();
+ });
+}
+
+ClangCodeModelClientProxy::ClangCodeModelClientProxy(ClangCodeModelServerInterface *server,
+ QIODevice *ioDevice)
+ : m_writeMessageBlock(ioDevice)
+ , m_readMessageBlock(ioDevice)
+ , m_server(server)
+ , m_ioDevice(ioDevice)
+{
+ QObject::connect(m_ioDevice, &QIODevice::readyRead, [this]() {
+ ClangCodeModelClientProxy::readMessages();
+ });
}
ClangCodeModelClientProxy::ClangCodeModelClientProxy(ClangCodeModelClientProxy &&other)
@@ -106,9 +121,9 @@ void ClangCodeModelClientProxy::readMessages()
m_server->dispatch(message);
}
-bool ClangCodeModelClientProxy::isUsingThatIoDevice(QIODevice *m_ioDevice) const
+bool ClangCodeModelClientProxy::isUsingThatIoDevice(QIODevice *ioDevice) const
{
- return this->m_ioDevice == m_ioDevice;
+ return m_ioDevice == ioDevice;
}
} // namespace ClangBackEnd
diff --git a/src/libs/clangsupport/clangcodemodelclientproxy.h b/src/libs/clangsupport/clangcodemodelclientproxy.h
index 480cbe646e..4b0e1f9d2a 100644
--- a/src/libs/clangsupport/clangcodemodelclientproxy.h
+++ b/src/libs/clangsupport/clangcodemodelclientproxy.h
@@ -36,6 +36,7 @@
QT_BEGIN_NAMESPACE
class QLocalServer;
+class QLocalSocket;
class QIODevice;
QT_END_NAMESPACE
@@ -44,6 +45,8 @@ namespace ClangBackEnd {
class CLANGSUPPORT_EXPORT ClangCodeModelClientProxy : public ClangCodeModelClientInterface
{
public:
+ explicit ClangCodeModelClientProxy(ClangCodeModelServerInterface *server,
+ QLocalSocket *localSocket);
explicit ClangCodeModelClientProxy(ClangCodeModelServerInterface *server, QIODevice *ioDevice);
ClangCodeModelClientProxy(const ClangCodeModelClientProxy&) = delete;
const ClangCodeModelClientProxy &operator=(const ClangCodeModelClientProxy&) = delete;
diff --git a/src/libs/clangsupport/clangcodemodelconnectionclient.cpp b/src/libs/clangsupport/clangcodemodelconnectionclient.cpp
index 56186e24dc..618782d1d8 100644
--- a/src/libs/clangsupport/clangcodemodelconnectionclient.cpp
+++ b/src/libs/clangsupport/clangcodemodelconnectionclient.cpp
@@ -41,12 +41,10 @@ QString currentProcessId()
}
-ClangCodeModelConnectionClient::ClangCodeModelConnectionClient(
- ClangCodeModelClientInterface *client)
+ClangCodeModelConnectionClient::ClangCodeModelConnectionClient(ClangCodeModelClientInterface *client)
: ConnectionClient(Utils::TemporaryDirectory::masterDirectoryPath()
- + QStringLiteral("/ClangBackEnd-")
- + currentProcessId()),
- m_serverProxy(client, nullptr)
+ + QStringLiteral("/ClangBackEnd-") + currentProcessId())
+ , m_serverProxy(client)
{
m_processCreator.setTemporaryDirectoryPattern("clangbackend-XXXXXX");
m_processCreator.setArguments({connectionName()});
@@ -85,9 +83,9 @@ QString ClangCodeModelConnectionClient::outputName() const
return QStringLiteral("ClangCodeModelConnectionClient");
}
-void ClangCodeModelConnectionClient::newConnectedServer(QIODevice *ioDevice)
+void ClangCodeModelConnectionClient::newConnectedServer(QLocalSocket *localSocket)
{
- m_serverProxy.setIoDevice(ioDevice);
+ m_serverProxy.setLocalSocket(localSocket);
}
} // namespace ClangBackEnd
diff --git a/src/libs/clangsupport/clangcodemodelconnectionclient.h b/src/libs/clangsupport/clangcodemodelconnectionclient.h
index c1618b06d9..9b0e49ae5b 100644
--- a/src/libs/clangsupport/clangcodemodelconnectionclient.h
+++ b/src/libs/clangsupport/clangcodemodelconnectionclient.h
@@ -41,7 +41,7 @@ protected:
void sendEndCommand() override;
void resetState() override;
QString outputName() const override;
- void newConnectedServer(QIODevice *ioDevice) override;
+ void newConnectedServer(QLocalSocket *localSocket) override;
private:
ClangCodeModelServerProxy m_serverProxy;
diff --git a/src/libs/clangsupport/clangcodemodelserverproxy.cpp b/src/libs/clangsupport/clangcodemodelserverproxy.cpp
index 6d90f20016..d77e27bffd 100644
--- a/src/libs/clangsupport/clangcodemodelserverproxy.cpp
+++ b/src/libs/clangsupport/clangcodemodelserverproxy.cpp
@@ -32,6 +32,11 @@
namespace ClangBackEnd {
ClangCodeModelServerProxy::ClangCodeModelServerProxy(ClangCodeModelClientInterface *client,
+ QLocalSocket *localSocket)
+ : BaseServerProxy(client, localSocket)
+{}
+
+ClangCodeModelServerProxy::ClangCodeModelServerProxy(ClangCodeModelClientInterface *client,
QIODevice *ioDevice)
: BaseServerProxy(client, ioDevice)
{
diff --git a/src/libs/clangsupport/clangcodemodelserverproxy.h b/src/libs/clangsupport/clangcodemodelserverproxy.h
index e18fd37402..0ea4b01672 100644
--- a/src/libs/clangsupport/clangcodemodelserverproxy.h
+++ b/src/libs/clangsupport/clangcodemodelserverproxy.h
@@ -46,6 +46,7 @@ class CLANGSUPPORT_EXPORT ClangCodeModelServerProxy : public BaseServerProxy,
public ClangCodeModelServerInterface
{
public:
+ ClangCodeModelServerProxy(ClangCodeModelClientInterface *client, QLocalSocket *localSocket = {});
ClangCodeModelServerProxy(ClangCodeModelClientInterface *client, QIODevice *ioDevice);
void end() override;
diff --git a/src/libs/clangsupport/connectionclient.h b/src/libs/clangsupport/connectionclient.h
index 8fbc73a06c..c3ded38029 100644
--- a/src/libs/clangsupport/connectionclient.h
+++ b/src/libs/clangsupport/connectionclient.h
@@ -100,7 +100,7 @@ protected:
QString connectionName() const;
bool event(QEvent* event);
- virtual void newConnectedServer(QIODevice *ioDevice) = 0;
+ virtual void newConnectedServer(QLocalSocket *localSocket) = 0;
private:
static bool isProcessRunning(QProcess *process);
diff --git a/src/libs/clangsupport/pchmanagerclientproxy.cpp b/src/libs/clangsupport/pchmanagerclientproxy.cpp
index 595187d155..a18ac166d2 100644
--- a/src/libs/clangsupport/pchmanagerclientproxy.cpp
+++ b/src/libs/clangsupport/pchmanagerclientproxy.cpp
@@ -32,35 +32,29 @@
#include "progressmessage.h"
#include <QDebug>
-#include <QIODevice>
+#include <QLocalSocket>
namespace ClangBackEnd {
-PchManagerClientProxy::PchManagerClientProxy(PchManagerServerInterface *server, QIODevice *ioDevice)
- : writeMessageBlock(ioDevice),
- readMessageBlock(ioDevice),
- server(server),
- ioDevice(ioDevice)
-{
- QObject::connect(ioDevice, &QIODevice::readyRead, [this] () {PchManagerClientProxy::readMessages();});
-}
-
-PchManagerClientProxy::PchManagerClientProxy(PchManagerClientProxy &&other)
- : writeMessageBlock(std::move(other.writeMessageBlock)),
- readMessageBlock(std::move(other.readMessageBlock)),
- server(std::move(other.server)),
- ioDevice(std::move(other.ioDevice))
+PchManagerClientProxy::PchManagerClientProxy(PchManagerServerInterface *server,
+ QLocalSocket *localSocket)
+ : writeMessageBlock(localSocket)
+ , readMessageBlock(localSocket)
+ , server(server)
{
+ QObject::connect(localSocket, &QIODevice::readyRead, [this]() {
+ PchManagerClientProxy::readMessages();
+ });
}
-PchManagerClientProxy &PchManagerClientProxy::operator=(PchManagerClientProxy &&other)
+PchManagerClientProxy::PchManagerClientProxy(PchManagerServerInterface *server, QIODevice *ioDevice)
+ : writeMessageBlock(ioDevice)
+ , readMessageBlock(ioDevice)
+ , server(server)
{
- writeMessageBlock = std::move(other.writeMessageBlock);
- readMessageBlock = std::move(other.readMessageBlock);
- server = std::move(other.server);
- ioDevice = std::move(other.ioDevice);
-
- return *this;
+ QObject::connect(ioDevice, &QIODevice::readyRead, [this]() {
+ PchManagerClientProxy::readMessages();
+ });
}
void PchManagerClientProxy::readMessages()
diff --git a/src/libs/clangsupport/pchmanagerclientproxy.h b/src/libs/clangsupport/pchmanagerclientproxy.h
index 8efacf504f..516b2e3a86 100644
--- a/src/libs/clangsupport/pchmanagerclientproxy.h
+++ b/src/libs/clangsupport/pchmanagerclientproxy.h
@@ -34,15 +34,16 @@ namespace ClangBackEnd {
class PchManagerServerInterface;
-class CLANGSUPPORT_EXPORT PchManagerClientProxy : public PchManagerClientInterface
+class CLANGSUPPORT_EXPORT PchManagerClientProxy final : public PchManagerClientInterface
{
public:
+ explicit PchManagerClientProxy(PchManagerServerInterface *server, QLocalSocket *localSocket);
explicit PchManagerClientProxy(PchManagerServerInterface *server, QIODevice *ioDevice);
PchManagerClientProxy(const PchManagerClientProxy&) = delete;
const PchManagerClientProxy &operator=(const PchManagerClientProxy&) = delete;
- PchManagerClientProxy(PchManagerClientProxy&&other);
- PchManagerClientProxy &operator=(PchManagerClientProxy&&other);
+ PchManagerClientProxy(PchManagerClientProxy &&other) = default;
+ PchManagerClientProxy &operator=(PchManagerClientProxy &&other) = default;
void readMessages();
@@ -54,7 +55,6 @@ private:
ClangBackEnd::WriteMessageBlock writeMessageBlock;
ClangBackEnd::ReadMessageBlock readMessageBlock;
PchManagerServerInterface *server = nullptr;
- QIODevice *ioDevice = nullptr;
};
} // namespace ClangBackEnd
diff --git a/src/libs/clangsupport/pchmanagerserverproxy.cpp b/src/libs/clangsupport/pchmanagerserverproxy.cpp
index dedbb23d50..5f1fb03948 100644
--- a/src/libs/clangsupport/pchmanagerserverproxy.cpp
+++ b/src/libs/clangsupport/pchmanagerserverproxy.cpp
@@ -38,6 +38,11 @@
namespace ClangBackEnd {
+PchManagerServerProxy::PchManagerServerProxy(PchManagerClientInterface *client,
+ QLocalSocket *localSocket)
+ : BaseServerProxy(client, localSocket)
+{}
+
PchManagerServerProxy::PchManagerServerProxy(PchManagerClientInterface *client, QIODevice *ioDevice)
: BaseServerProxy(client, ioDevice)
{
diff --git a/src/libs/clangsupport/pchmanagerserverproxy.h b/src/libs/clangsupport/pchmanagerserverproxy.h
index 570de91a03..d13d88ee8e 100644
--- a/src/libs/clangsupport/pchmanagerserverproxy.h
+++ b/src/libs/clangsupport/pchmanagerserverproxy.h
@@ -47,6 +47,7 @@ class CLANGSUPPORT_EXPORT PchManagerServerProxy final : public BaseServerProxy,
public PchManagerServerInterface
{
public:
+ explicit PchManagerServerProxy(PchManagerClientInterface *client, QLocalSocket *localSocket);
explicit PchManagerServerProxy(PchManagerClientInterface *client, QIODevice *ioDevice);
void end() override;
diff --git a/src/libs/clangsupport/progresscounter.h b/src/libs/clangsupport/progresscounter.h
index 449754f914..21a8e13b77 100644
--- a/src/libs/clangsupport/progresscounter.h
+++ b/src/libs/clangsupport/progresscounter.h
@@ -84,7 +84,7 @@ public:
{
Lock lock(m_mutex);
- return m_total;
+ return m_progress;
}
private:
diff --git a/src/libs/clangsupport/refactoringclientproxy.cpp b/src/libs/clangsupport/refactoringclientproxy.cpp
index c207641844..646cb0e161 100644
--- a/src/libs/clangsupport/refactoringclientproxy.cpp
+++ b/src/libs/clangsupport/refactoringclientproxy.cpp
@@ -31,36 +31,28 @@
#include "clangrefactoringclientmessages.h"
#include <QDebug>
-#include <QIODevice>
+#include <QLocalSocket>
namespace ClangBackEnd {
-RefactoringClientProxy::RefactoringClientProxy(RefactoringServerInterface *server, QIODevice *ioDevice)
- : writeMessageBlock(ioDevice),
- readMessageBlock(ioDevice),
- server(server),
- ioDevice(ioDevice)
+RefactoringClientProxy::RefactoringClientProxy(RefactoringServerInterface *server,
+ QLocalSocket *localSocket)
+ : writeMessageBlock(localSocket)
+ , readMessageBlock(localSocket)
+ , server(server)
{
- QObject::connect(ioDevice, &QIODevice::readyRead, [this] () {RefactoringClientProxy::readMessages();});
+ QObject::connect(localSocket, &QIODevice::readyRead, [this]() {
+ RefactoringClientProxy::readMessages();
+ });
}
-RefactoringClientProxy::RefactoringClientProxy(RefactoringClientProxy &&other)
- : writeMessageBlock(std::move(other.writeMessageBlock)),
- readMessageBlock(std::move(other.readMessageBlock)),
- server(std::move(other.server)),
- ioDevice(std::move(other.ioDevice))
+RefactoringClientProxy::RefactoringClientProxy(RefactoringServerInterface *server,
+ QIODevice *ioDevice)
+ : writeMessageBlock(ioDevice)
+ , readMessageBlock(ioDevice)
+ , server(server)
{
-
-}
-
-RefactoringClientProxy &RefactoringClientProxy::operator=(RefactoringClientProxy &&other)
-{
- writeMessageBlock = std::move(other.writeMessageBlock);
- readMessageBlock = std::move(other.readMessageBlock);
- server = std::move(other.server);
- ioDevice = std::move(other.ioDevice);
-
- return *this;
+ QObject::connect(ioDevice, &QIODevice::readyRead, [this] () {RefactoringClientProxy::readMessages();});
}
void RefactoringClientProxy::readMessages()
diff --git a/src/libs/clangsupport/refactoringclientproxy.h b/src/libs/clangsupport/refactoringclientproxy.h
index 45ce029120..07cba05e8d 100644
--- a/src/libs/clangsupport/refactoringclientproxy.h
+++ b/src/libs/clangsupport/refactoringclientproxy.h
@@ -39,12 +39,13 @@ class RefactoringServerInterface;
class CLANGSUPPORT_EXPORT RefactoringClientProxy : public RefactoringClientInterface
{
public:
+ explicit RefactoringClientProxy(RefactoringServerInterface *server, QLocalSocket *localSocket);
explicit RefactoringClientProxy(RefactoringServerInterface *server, QIODevice *ioDevice);
RefactoringClientProxy(const RefactoringClientProxy&) = delete;
const RefactoringClientProxy &operator=(const RefactoringClientProxy&) = delete;
- RefactoringClientProxy(RefactoringClientProxy&&other);
- RefactoringClientProxy &operator=(RefactoringClientProxy&&other);
+ RefactoringClientProxy(RefactoringClientProxy &&other) = default;
+ RefactoringClientProxy &operator=(RefactoringClientProxy &&other) = default;
void readMessages();
@@ -60,7 +61,6 @@ private:
ClangBackEnd::WriteMessageBlock writeMessageBlock;
ClangBackEnd::ReadMessageBlock readMessageBlock;
RefactoringServerInterface *server = nullptr;
- QIODevice *ioDevice = nullptr;
};
} // namespace ClangBackEnd
diff --git a/src/libs/clangsupport/refactoringserverproxy.cpp b/src/libs/clangsupport/refactoringserverproxy.cpp
index 3bc8fe20af..2208f3a0ce 100644
--- a/src/libs/clangsupport/refactoringserverproxy.cpp
+++ b/src/libs/clangsupport/refactoringserverproxy.cpp
@@ -34,7 +34,13 @@
namespace ClangBackEnd {
-RefactoringServerProxy::RefactoringServerProxy(RefactoringClientInterface *client, QIODevice *ioDevice)
+RefactoringServerProxy::RefactoringServerProxy(RefactoringClientInterface *client,
+ QLocalSocket *localSocket)
+ : BaseServerProxy(client, localSocket)
+{}
+
+RefactoringServerProxy::RefactoringServerProxy(RefactoringClientInterface *client,
+ QIODevice *ioDevice)
: BaseServerProxy(client, ioDevice)
{
}
diff --git a/src/libs/clangsupport/refactoringserverproxy.h b/src/libs/clangsupport/refactoringserverproxy.h
index 55ae20d441..34861767d8 100644
--- a/src/libs/clangsupport/refactoringserverproxy.h
+++ b/src/libs/clangsupport/refactoringserverproxy.h
@@ -47,6 +47,8 @@ class CLANGSUPPORT_EXPORT RefactoringServerProxy final : public BaseServerProxy,
public RefactoringServerInterface
{
public:
+ explicit RefactoringServerProxy(RefactoringClientInterface *client,
+ QLocalSocket *localSocket = {});
explicit RefactoringServerProxy(RefactoringClientInterface *client, QIODevice *ioDevice);
void end() override;
diff --git a/src/libs/clangsupport/writemessageblock.cpp b/src/libs/clangsupport/writemessageblock.cpp
index 999c63e9b1..b3fe4a51ed 100644
--- a/src/libs/clangsupport/writemessageblock.cpp
+++ b/src/libs/clangsupport/writemessageblock.cpp
@@ -29,16 +29,19 @@
#include <QDataStream>
#include <QDebug>
-#include <QIODevice>
+#include <QLocalSocket>
#include <QVariant>
namespace ClangBackEnd {
WriteMessageBlock::WriteMessageBlock(QIODevice *ioDevice)
- : m_messageCounter(0),
- m_ioDevice(ioDevice)
-{
-}
+ : m_ioDevice(ioDevice)
+{}
+
+WriteMessageBlock::WriteMessageBlock(QLocalSocket *localSocket)
+ : m_ioDevice(localSocket)
+ , m_localSocket(localSocket)
+{}
void WriteMessageBlock::write(const MessageEnvelop &message)
{
@@ -74,10 +77,19 @@ void WriteMessageBlock::resetState()
void WriteMessageBlock::setIoDevice(QIODevice *ioDevice)
{
m_ioDevice = ioDevice;
+ if (m_localSocket != ioDevice)
+ m_localSocket = nullptr;
flushBlock();
}
+void WriteMessageBlock::setLocalSocket(QLocalSocket *localSocket)
+{
+ m_localSocket = localSocket;
+
+ setIoDevice(localSocket);
+}
+
void WriteMessageBlock::flushBlock()
{
if (m_ioDevice) {
@@ -85,6 +97,8 @@ void WriteMessageBlock::flushBlock()
m_block.clear();
if (bytesWritten == -1)
qWarning() << "Failed to write data:" << m_ioDevice->errorString();
+ if (m_localSocket)
+ m_localSocket->flush();
}
}
diff --git a/src/libs/clangsupport/writemessageblock.h b/src/libs/clangsupport/writemessageblock.h
index b75f0ce294..8a126fed36 100644
--- a/src/libs/clangsupport/writemessageblock.h
+++ b/src/libs/clangsupport/writemessageblock.h
@@ -32,6 +32,7 @@ QT_BEGIN_NAMESPACE
class QVariant;
class QDataStream;
class QIODevice;
+class QLocalSocket;
QT_END_NAMESPACE
namespace ClangBackEnd {
@@ -42,6 +43,7 @@ class WriteMessageBlock
{
public:
WriteMessageBlock(QIODevice *ioDevice = nullptr);
+ WriteMessageBlock(QLocalSocket *localSocket);
void write(const MessageEnvelop &message);
@@ -50,13 +52,15 @@ public:
void resetState();
void setIoDevice(QIODevice *ioDevice);
+ void setLocalSocket(QLocalSocket *localSocket);
void flushBlock();
private:
QByteArray m_block;
- qint64 m_messageCounter;
- QIODevice *m_ioDevice;
+ qint64 m_messageCounter = 0;
+ QIODevice *m_ioDevice = {};
+ QLocalSocket *m_localSocket = {};
};
} // namespace ClangBackEnd