Remove clangsupport library

Change-Id: I18455fc451b6e1b73c7183f6c75820379e26951a
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2022-05-02 16:22:20 +02:00
parent 6b28913161
commit e79c432291
133 changed files with 9 additions and 11001 deletions

View File

@@ -15,7 +15,6 @@ add_subdirectory(glsl)
add_subdirectory(languageserverprotocol)
add_subdirectory(ssh)
add_subdirectory(sqlite)
add_subdirectory(clangsupport)
add_subdirectory(tracing)
add_subdirectory(qtcreatorcdbext)

View File

@@ -1,72 +0,0 @@
set(CLANG_VERSION ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH})
add_qtc_library(ClangSupport
DEPENDS Threads::Threads
PUBLIC_DEPENDS Utils Qt5::Core Qt5::Network
PUBLIC_DEFINES
CLANG_VERSION="${CLANG_VERSION}"
CLANG_INCLUDE_DIR="${LLVM_LIBRARY_DIR}/clang/${CLANG_VERSION}/include"
CLANG_BINDIR="${LLVM_TOOLS_BINARY_DIR}"
PUBLIC_INCLUDES
"${CMAKE_CURRENT_LIST_DIR}"
SOURCES
alivemessage.cpp alivemessage.h
annotationsmessage.cpp annotationsmessage.h
baseserverproxy.cpp baseserverproxy.h
clangcodemodelclientinterface.cpp clangcodemodelclientinterface.h
clangcodemodelclientmessages.h
clangcodemodelclientproxy.cpp clangcodemodelclientproxy.h
clangcodemodelconnectionclient.cpp clangcodemodelconnectionclient.h
clangcodemodelserverinterface.cpp clangcodemodelserverinterface.h
clangcodemodelservermessages.h
clangcodemodelserverproxy.cpp clangcodemodelserverproxy.h
clangsupport_global.h
clangsupportdebugutils.cpp clangsupportdebugutils.h
codecompletion.cpp codecompletion.h
codecompletionchunk.cpp codecompletionchunk.h
completionsmessage.cpp completionsmessage.h
connectionclient.cpp connectionclient.h
connectionserver.cpp connectionserver.h
diagnosticcontainer.cpp diagnosticcontainer.h
documentschangedmessage.cpp documentschangedmessage.h
documentsclosedmessage.cpp documentsclosedmessage.h
documentsopenedmessage.cpp documentsopenedmessage.h
documentvisibilitychangedmessage.cpp documentvisibilitychangedmessage.h
echomessage.cpp echomessage.h
endmessage.cpp endmessage.h
filecontainer.cpp filecontainer.h
fixitcontainer.cpp fixitcontainer.h
followsymbolmessage.cpp followsymbolmessage.h
ipcclientinterface.h
ipcclientprovider.h
ipcinterface.h
ipcserverinterface.h
lineprefixer.cpp lineprefixer.h
messageenvelop.cpp messageenvelop.h
processcreator.cpp processcreator.h
processexception.cpp processexception.h
processhandle.h
processstartedevent.cpp processstartedevent.h
readmessageblock.cpp readmessageblock.h
referencesmessage.cpp referencesmessage.h
requestannotationsmessage.cpp requestannotationsmessage.h
requestcompletionsmessage.cpp requestcompletionsmessage.h
requestfollowsymbolmessage.cpp requestfollowsymbolmessage.h
requestreferencesmessage.cpp requestreferencesmessage.h
requesttooltipmessage.cpp requesttooltipmessage.h
sourcelocationcontainer.cpp sourcelocationcontainer.h
sourcelocationscontainer.cpp sourcelocationscontainer.h
sourcerangecontainer.cpp sourcerangecontainer.h
tokeninfocontainer.cpp tokeninfocontainer.h
tooltipinfo.cpp tooltipinfo.h
tooltipmessage.cpp tooltipmessage.h
unsavedfilesremovedmessage.cpp unsavedfilesremovedmessage.h
unsavedfilesupdatedmessage.cpp unsavedfilesupdatedmessage.h
utf8string.cpp utf8string.h
utf8stringvector.cpp utf8stringvector.h
writemessageblock.cpp writemessageblock.h
)
if (NOT TARGET libclang)
return()
endif()

View File

@@ -1,37 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "alivemessage.h"
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const AliveMessage &/*message*/)
{
return debug.nospace() << "AliveMessage()";
}
} // namespace ClangBackEnd

View File

@@ -1,56 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include <QDataStream>
namespace ClangBackEnd {
class AliveMessage
{
public:
friend QDataStream &operator<<(QDataStream &out, const AliveMessage &/*message*/)
{
return out;
}
friend QDataStream &operator>>(QDataStream &in, AliveMessage &/*message*/)
{
return in;
}
friend bool operator==(const AliveMessage &/*first*/, const AliveMessage &/*second*/)
{
return true;
}
friend CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const AliveMessage &message);
};
DECLARE_MESSAGE(AliveMessage)
}

View File

@@ -1,46 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "annotationsmessage.h"
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const AnnotationsMessage &message)
{
debug.nospace() << "AnnotationsMessage("
<< message.fileContainer
<< ", " << message.diagnostics.size()
<< ", " << !message.firstHeaderErrorDiagnostic.text.isEmpty()
<< ", " << message.tokenInfos.size()
<< ", " << message.skippedPreprocessorRanges.size()
<< ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,112 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include "diagnosticcontainer.h"
#include "filecontainer.h"
#include "tokeninfocontainer.h"
#include "sourcerangecontainer.h"
#include <QVector>
namespace ClangBackEnd {
class CLANGSUPPORT_EXPORT AnnotationsMessage
{
public:
AnnotationsMessage() = default;
// For pure token infos update
AnnotationsMessage(const FileContainer &fileContainer,
const QVector<TokenInfoContainer> &tokenInfos)
: fileContainer(fileContainer),
tokenInfos(tokenInfos),
onlyTokenInfos(true)
{
}
AnnotationsMessage(const FileContainer &fileContainer,
const QVector<DiagnosticContainer> &diagnostics,
const DiagnosticContainer &firstHeaderErrorDiagnostic,
const QVector<TokenInfoContainer> &tokenInfos,
const QVector<SourceRangeContainer> &skippedPreprocessorRanges)
: fileContainer(fileContainer)
, tokenInfos(tokenInfos)
, diagnostics(diagnostics)
, firstHeaderErrorDiagnostic(firstHeaderErrorDiagnostic)
, skippedPreprocessorRanges(skippedPreprocessorRanges)
{
}
friend QDataStream &operator<<(QDataStream &out, const AnnotationsMessage &message)
{
out << message.onlyTokenInfos;
out << message.fileContainer;
out << message.tokenInfos;
if (message.onlyTokenInfos)
return out;
out << message.diagnostics;
out << message.firstHeaderErrorDiagnostic;
out << message.skippedPreprocessorRanges;
return out;
}
friend QDataStream &operator>>(QDataStream &in, AnnotationsMessage &message)
{
in >> message.onlyTokenInfos;
in >> message.fileContainer;
in >> message.tokenInfos;
if (message.onlyTokenInfos)
return in;
in >> message.diagnostics;
in >> message.firstHeaderErrorDiagnostic;
in >> message.skippedPreprocessorRanges;
return in;
}
friend bool operator==(const AnnotationsMessage &first, const AnnotationsMessage &second)
{
return first.fileContainer == second.fileContainer
&& first.diagnostics == second.diagnostics
&& first.firstHeaderErrorDiagnostic == second.firstHeaderErrorDiagnostic
&& first.tokenInfos == second.tokenInfos
&& first.skippedPreprocessorRanges == second.skippedPreprocessorRanges;
}
friend CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const AnnotationsMessage &message);
public:
FileContainer fileContainer;
QVector<TokenInfoContainer> tokenInfos;
QVector<DiagnosticContainer> diagnostics;
DiagnosticContainer firstHeaderErrorDiagnostic;
QVector<SourceRangeContainer> skippedPreprocessorRanges;
bool onlyTokenInfos = false;
};
DECLARE_MESSAGE(AnnotationsMessage)
} // namespace ClangBackEnd

View File

@@ -1,74 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "baseserverproxy.h"
#include "messageenvelop.h"
#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)
{
if (ioDevice)
QObject::connect(ioDevice, &QIODevice::readyRead, [this] () { BaseServerProxy::readMessages(); });
}
void BaseServerProxy::readMessages()
{
for (const auto &message : m_readMessageBlock.readAll())
m_client->dispatch(message);
}
void BaseServerProxy::resetState()
{
m_writeMessageBlock.resetState();
m_readMessageBlock.resetState();
}
void BaseServerProxy::setLocalSocket(QLocalSocket *localSocket)
{
QObject::connect(localSocket, &QIODevice::readyRead, [this]() {
BaseServerProxy::readMessages();
});
m_writeMessageBlock.setLocalSocket(localSocket);
m_readMessageBlock.setIoDevice(localSocket);
}
} // namespace ClangBackEnd

View File

@@ -1,58 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "ipcclientinterface.h"
#include "readmessageblock.h"
#include "writemessageblock.h"
namespace ClangBackEnd {
class CLANGSUPPORT_EXPORT BaseServerProxy
{
BaseServerProxy(const BaseServerProxy&) = delete;
BaseServerProxy &operator=(const BaseServerProxy&) = delete;
public:
BaseServerProxy(IpcClientInterface *client, QLocalSocket *localSocket);
BaseServerProxy(IpcClientInterface *client, QIODevice *ioDevice);
void readMessages();
void resetState();
void setLocalSocket(QLocalSocket *localSocket);
protected:
~BaseServerProxy() = default;
protected:
ClangBackEnd::WriteMessageBlock m_writeMessageBlock;
ClangBackEnd::ReadMessageBlock m_readMessageBlock;
IpcClientInterface *m_client;
};
} // namespace ClangBackEnd

View File

@@ -1,65 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "clangcodemodelclientinterface.h"
#include "clangcodemodelclientmessages.h"
#include "messageenvelop.h"
#include <QDebug>
#include <QVariant>
namespace ClangBackEnd {
void ClangCodeModelClientInterface::dispatch(const MessageEnvelop &messageEnvelop)
{
switch (messageEnvelop.messageType()) {
case MessageType::AliveMessage:
alive();
break;
case MessageType::EchoMessage:
echo(messageEnvelop.message<EchoMessage>());
break;
case MessageType::CompletionsMessage:
completions(messageEnvelop.message<CompletionsMessage>());
break;
case MessageType::AnnotationsMessage:
annotations(messageEnvelop.message<AnnotationsMessage>());
break;
case MessageType::ReferencesMessage:
references(messageEnvelop.message<ReferencesMessage>());
break;
case MessageType::FollowSymbolMessage:
followSymbol(messageEnvelop.message<FollowSymbolMessage>());
break;
case MessageType::ToolTipMessage:
tooltip(messageEnvelop.message<ToolTipMessage>());
break;
default:
qWarning() << "Unknown ClangCodeModelClientMessage";
}
}
} // namespace ClangBackEnd

View File

@@ -1,66 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "ipcclientinterface.h"
namespace ClangBackEnd {
class ClangCodeModelServerInterface;
class AnnotationsMessage;
class CompletionsMessage;
class DocumentVisibilityChangedMessage;
class DocumentsChangedMessage;
class DocumentsClosedMessage;
class DocumentsOpenedMessage;
class EchoMessage;
class FollowSymbolMessage;
class ReferencesMessage;
class RequestAnnotationsMessage;
class RequestCompletionsMessage;
class RequestFollowSymbolMessage;
class RequestReferencesMessage;
class RequestToolTipMessage;
class ToolTipMessage;
class UnsavedFilesRemovedMessage;
class UnsavedFilesUpdatedMessage;
class CLANGSUPPORT_EXPORT ClangCodeModelClientInterface : public IpcClientInterface
{
public:
void dispatch(const MessageEnvelop &messageEnvelop) override;
virtual void alive() = 0;
virtual void echo(const EchoMessage &message) = 0;
virtual void completions(const CompletionsMessage &message) = 0;
virtual void annotations(const AnnotationsMessage &message) = 0;
virtual void references(const ReferencesMessage &message) = 0;
virtual void followSymbol(const FollowSymbolMessage &message) = 0;
virtual void tooltip(const ToolTipMessage &message) = 0;
};
} // namespace ClangBackEnd

View File

@@ -1,34 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "alivemessage.h"
#include "completionsmessage.h"
#include "echomessage.h"
#include "annotationsmessage.h"
#include "referencesmessage.h"
#include "followsymbolmessage.h"
#include "tooltipmessage.h"

View File

@@ -1,130 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "clangcodemodelclientproxy.h"
#include "clangcodemodelclientmessages.h"
#include "clangcodemodelserverinterface.h"
#include "ipcserverinterface.h"
#include "messageenvelop.h"
#include <QDebug>
#include <QLocalSocket>
#include <QVariant>
#include <QVector>
namespace ClangBackEnd {
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();
});
}
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)
: m_writeMessageBlock(std::move(other.m_writeMessageBlock)),
m_readMessageBlock(std::move(other.m_readMessageBlock)),
m_server(std::move(other.m_server)),
m_ioDevice(std::move(other.m_ioDevice))
{
}
ClangCodeModelClientProxy &ClangCodeModelClientProxy::operator=(ClangCodeModelClientProxy &&other)
{
m_writeMessageBlock = std::move(other.m_writeMessageBlock);
m_readMessageBlock = std::move(other.m_readMessageBlock);
m_server = std::move(other.m_server);
m_ioDevice = std::move(other.m_ioDevice);
return *this;
}
void ClangCodeModelClientProxy::alive()
{
m_writeMessageBlock.write(AliveMessage());
}
void ClangCodeModelClientProxy::echo(const EchoMessage &message)
{
m_writeMessageBlock.write(message);
}
void ClangCodeModelClientProxy::completions(const CompletionsMessage &message)
{
m_writeMessageBlock.write(message);
}
void ClangCodeModelClientProxy::annotations(const AnnotationsMessage &message)
{
m_writeMessageBlock.write(message);
}
void ClangCodeModelClientProxy::references(const ReferencesMessage &message)
{
m_writeMessageBlock.write(message);
}
void ClangCodeModelClientProxy::followSymbol(const FollowSymbolMessage &message)
{
m_writeMessageBlock.write(message);
}
void ClangCodeModelClientProxy::tooltip(const ToolTipMessage &message)
{
m_writeMessageBlock.write(message);
}
void ClangCodeModelClientProxy::readMessages()
{
for (const MessageEnvelop &message : m_readMessageBlock.readAll())
m_server->dispatch(message);
}
bool ClangCodeModelClientProxy::isUsingThatIoDevice(QIODevice *ioDevice) const
{
return m_ioDevice == ioDevice;
}
} // namespace ClangBackEnd

View File

@@ -1,76 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include "clangcodemodelclientinterface.h"
#include "readmessageblock.h"
#include "writemessageblock.h"
#include <QtGlobal>
#include <memory>
QT_BEGIN_NAMESPACE
class QLocalServer;
class QLocalSocket;
class QIODevice;
QT_END_NAMESPACE
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;
ClangCodeModelClientProxy(ClangCodeModelClientProxy&&other);
ClangCodeModelClientProxy &operator=(ClangCodeModelClientProxy&&other);
void alive() override;
void echo(const EchoMessage &message) override;
void completions(const CompletionsMessage &message) override;
void annotations(const AnnotationsMessage &message) override;
void references(const ReferencesMessage &message) override;
void followSymbol(const FollowSymbolMessage &message) override;
void tooltip(const ToolTipMessage &message) override;
void readMessages();
bool isUsingThatIoDevice(QIODevice *ioDevice) const;
private:
ClangBackEnd::WriteMessageBlock m_writeMessageBlock;
ClangBackEnd::ReadMessageBlock m_readMessageBlock;
ClangCodeModelServerInterface *m_server = nullptr;
QIODevice *m_ioDevice = nullptr;
};
} // namespace ClangBackEnd

View File

@@ -1,91 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "clangcodemodelconnectionclient.h"
#include <utils/environment.h>
#include <utils/temporarydirectory.h>
#include <QCoreApplication>
namespace ClangBackEnd {
namespace {
QString currentProcessId()
{
return QString::number(QCoreApplication::applicationPid());
}
}
ClangCodeModelConnectionClient::ClangCodeModelConnectionClient(ClangCodeModelClientInterface *client)
: ConnectionClient(Utils::TemporaryDirectory::masterDirectoryPath()
+ QStringLiteral("/ClangBackEnd-") + currentProcessId())
, m_serverProxy(client)
{
m_processCreator.setTemporaryDirectoryPattern("clangbackend-XXXXXX");
m_processCreator.setArguments({connectionName()});
Utils::Environment environment;
environment.set(QStringLiteral("LIBCLANG_NOTHREADS"), QString());
environment.set(QStringLiteral("LIBCLANG_DISABLE_CRASH_RECOVERY"), QString());
m_processCreator.setEnvironment(environment);
stdErrPrefixer().setPrefix("clangbackend.stderr: ");
stdOutPrefixer().setPrefix("clangbackend.stdout: ");
}
ClangCodeModelConnectionClient::~ClangCodeModelConnectionClient()
{
finishProcess();
}
ClangCodeModelServerProxy &ClangCodeModelConnectionClient::serverProxy()
{
return m_serverProxy;
}
void ClangCodeModelConnectionClient::sendEndCommand()
{
m_serverProxy.end();
}
void ClangCodeModelConnectionClient::resetState()
{
m_serverProxy.resetState();
}
QString ClangCodeModelConnectionClient::outputName() const
{
return QStringLiteral("ClangCodeModelConnectionClient");
}
void ClangCodeModelConnectionClient::newConnectedServer(QLocalSocket *localSocket)
{
m_serverProxy.setLocalSocket(localSocket);
}
} // namespace ClangBackEnd

View File

@@ -1,50 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "connectionclient.h"
namespace ClangBackEnd {
class CLANGSUPPORT_EXPORT ClangCodeModelConnectionClient : public ConnectionClient
{
public:
ClangCodeModelConnectionClient(ClangCodeModelClientInterface *client);
~ClangCodeModelConnectionClient();
ClangCodeModelServerProxy &serverProxy();
protected:
void sendEndCommand() override;
void resetState() override;
QString outputName() const override;
void newConnectedServer(QLocalSocket *localSocket) override;
private:
ClangCodeModelServerProxy m_serverProxy;
};
} // namespace ClangBackEnd

View File

@@ -1,80 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "clangcodemodelserverinterface.h"
#include "clangcodemodelservermessages.h"
#include "messageenvelop.h"
#include <QDebug>
#include <QVariant>
namespace ClangBackEnd {
void ClangCodeModelServerInterface::dispatch(const MessageEnvelop &messageEnvelop)
{
switch (messageEnvelop.messageType()) {
case MessageType::EndMessage:
end();
break;
case MessageType::DocumentsOpenedMessage:
documentsOpened(messageEnvelop.message<DocumentsOpenedMessage>());
break;
case MessageType::DocumentsChangedMessage:
documentsChanged(messageEnvelop.message<DocumentsChangedMessage>());
break;
case MessageType::DocumentsClosedMessage:
documentsClosed(messageEnvelop.message<DocumentsClosedMessage>());
break;
case MessageType::DocumentVisibilityChangedMessage:
documentVisibilityChanged(messageEnvelop.message<DocumentVisibilityChangedMessage>());
break;
case MessageType::UnsavedFilesUpdatedMessage:
unsavedFilesUpdated(messageEnvelop.message<UnsavedFilesUpdatedMessage>());
break;
case MessageType::UnsavedFilesRemovedMessage:
unsavedFilesRemoved(messageEnvelop.message<UnsavedFilesRemovedMessage>());
break;
case MessageType::RequestCompletionsMessage:
requestCompletions(messageEnvelop.message<RequestCompletionsMessage>());
break;
case MessageType::RequestAnnotationsMessage:
requestAnnotations(messageEnvelop.message<RequestAnnotationsMessage>());
break;
case MessageType::RequestReferencesMessage:
requestReferences(messageEnvelop.message<RequestReferencesMessage>());
break;
case MessageType::RequestFollowSymbolMessage:
requestFollowSymbol(messageEnvelop.message<RequestFollowSymbolMessage>());
break;
case MessageType::RequestToolTipMessage:
requestToolTip(messageEnvelop.message<RequestToolTipMessage>());
break;
default:
qWarning() << "Unknown ClangCodeModelServerMessage";
}
}
} // namespace ClangBackEnd

View File

@@ -1,60 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "ipcserverinterface.h"
#include "clangcodemodelclientinterface.h"
namespace ClangBackEnd {
class ClangCodeModelClientInterface;
class CLANGSUPPORT_EXPORT ClangCodeModelServerInterface : public IpcServerInterface
{
public:
~ClangCodeModelServerInterface() override = default;
void dispatch(const MessageEnvelop &messageEnvelop) override;
virtual void end() = 0;
virtual void documentsOpened(const DocumentsOpenedMessage &message) = 0;
virtual void documentsChanged(const DocumentsChangedMessage &message) = 0;
virtual void documentsClosed(const DocumentsClosedMessage &message) = 0;
virtual void documentVisibilityChanged(const DocumentVisibilityChangedMessage &message) = 0;
virtual void unsavedFilesUpdated(const UnsavedFilesUpdatedMessage &message) = 0;
virtual void unsavedFilesRemoved(const UnsavedFilesRemovedMessage &message) = 0;
virtual void requestCompletions(const RequestCompletionsMessage &message) = 0;
virtual void requestAnnotations(const RequestAnnotationsMessage &message) = 0;
virtual void requestReferences(const RequestReferencesMessage &message) = 0;
virtual void requestFollowSymbol(const RequestFollowSymbolMessage &message) = 0;
virtual void requestToolTip(const RequestToolTipMessage &message) = 0;
};
} // namespace ClangBackEnd

View File

@@ -1,43 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "echomessage.h"
#include "endmessage.h"
#include "documentsopenedmessage.h"
#include "documentsclosedmessage.h"
#include "documentschangedmessage.h"
#include "documentvisibilitychangedmessage.h"
#include "unsavedfilesupdatedmessage.h"
#include "unsavedfilesremovedmessage.h"
#include "requestannotationsmessage.h"
#include "requestcompletionsmessage.h"
#include "requestfollowsymbolmessage.h"
#include "requestreferencesmessage.h"
#include "requesttooltipmessage.h"

View File

@@ -1,107 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "clangcodemodelserverproxy.h"
#include <clangcodemodelclientinterface.h>
#include <clangcodemodelservermessages.h>
#include <messageenvelop.h>
namespace ClangBackEnd {
ClangCodeModelServerProxy::ClangCodeModelServerProxy(ClangCodeModelClientInterface *client,
QLocalSocket *localSocket)
: BaseServerProxy(client, localSocket)
{}
ClangCodeModelServerProxy::ClangCodeModelServerProxy(ClangCodeModelClientInterface *client,
QIODevice *ioDevice)
: BaseServerProxy(client, ioDevice)
{
}
void ClangCodeModelServerProxy::end()
{
m_writeMessageBlock.write(EndMessage());
}
void ClangCodeModelServerProxy::documentsOpened(const DocumentsOpenedMessage &message)
{
m_writeMessageBlock.write(message);
}
void ClangCodeModelServerProxy::documentsChanged(const DocumentsChangedMessage &message)
{
m_writeMessageBlock.write(message);
}
void ClangCodeModelServerProxy::documentsClosed(const DocumentsClosedMessage &message)
{
m_writeMessageBlock.write(message);
}
void ClangCodeModelServerProxy::unsavedFilesUpdated(const UnsavedFilesUpdatedMessage &message)
{
m_writeMessageBlock.write(message);
}
void ClangCodeModelServerProxy::unsavedFilesRemoved(const UnsavedFilesRemovedMessage &message)
{
m_writeMessageBlock.write(message);
}
void ClangCodeModelServerProxy::requestCompletions(const RequestCompletionsMessage &message)
{
m_writeMessageBlock.write(message);
}
void ClangCodeModelServerProxy::requestAnnotations(const RequestAnnotationsMessage &message)
{
m_writeMessageBlock.write(message);
}
void ClangCodeModelServerProxy::requestReferences(const RequestReferencesMessage &message)
{
m_writeMessageBlock.write(message);
}
void ClangCodeModelServerProxy::requestFollowSymbol(const RequestFollowSymbolMessage &message)
{
m_writeMessageBlock.write(message);
}
void ClangCodeModelServerProxy::requestToolTip(const RequestToolTipMessage &message)
{
m_writeMessageBlock.write(message);
}
void ClangCodeModelServerProxy::documentVisibilityChanged(
const DocumentVisibilityChangedMessage &message)
{
m_writeMessageBlock.write(message);
}
} // namespace ClangBackEnd

View File

@@ -1,68 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "baseserverproxy.h"
#include "clangcodemodelserverinterface.h"
#include <QtGlobal>
#include <QTimer>
#include <memory>
QT_BEGIN_NAMESPACE
class QVariant;
class QLocalServer;
class QLocalSocket;
QT_END_NAMESPACE
namespace ClangBackEnd {
class CLANGSUPPORT_EXPORT ClangCodeModelServerProxy : public BaseServerProxy,
public ClangCodeModelServerInterface
{
public:
ClangCodeModelServerProxy(ClangCodeModelClientInterface *client, QLocalSocket *localSocket = {});
ClangCodeModelServerProxy(ClangCodeModelClientInterface *client, QIODevice *ioDevice);
void end() override;
void documentsOpened(const DocumentsOpenedMessage &message) override;
void documentsChanged(const DocumentsChangedMessage &message) override;
void documentsClosed(const DocumentsClosedMessage &message) override;
void documentVisibilityChanged(const DocumentVisibilityChangedMessage &message) override;
void unsavedFilesUpdated(const UnsavedFilesUpdatedMessage &message) override;
void unsavedFilesRemoved(const UnsavedFilesRemovedMessage &message) override;
void requestCompletions(const RequestCompletionsMessage &message) override;
void requestAnnotations(const RequestAnnotationsMessage &message) override;
void requestReferences(const RequestReferencesMessage &message) override;
void requestFollowSymbol(const RequestFollowSymbolMessage &message) override;
void requestToolTip(const RequestToolTipMessage &message) override;
};
} // namespace ClangBackEnd

View File

@@ -1,27 +0,0 @@
import qbs 1.0
QtcLibrary {
name: "ClangSupport"
targetName: "Clangbackendipc"
Depends { name: "Qt.network" }
Depends { name: "Utils" }
cpp.defines: base.concat("CLANGSUPPORT_LIBRARY")
cpp.includePaths: base.concat(".")
Group {
files: [
"*.h",
"*.cpp"
]
}
Export {
Depends { name: "Utils" }
Depends { name: "Qt.network" }
cpp.includePaths: [
"."
]
}
}

View File

@@ -1,228 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include <utils/sizedarray.h>
#include <QtCore/qglobal.h>
#include <utils/smallstringfwd.h>
#if defined(CLANGSUPPORT_LIBRARY)
# define CLANGSUPPORT_EXPORT Q_DECL_EXPORT
#elif defined(CLANGSUPPORT_STATIC_LIBRARY)
# define CLANGSUPPORT_EXPORT
#else
# define CLANGSUPPORT_EXPORT Q_DECL_IMPORT
#endif
#ifdef Q_CC_GNU
# define CLANGSUPPORT_GCCEXPORT __attribute__((visibility("default")))
#else
# define CLANGSUPPORT_GCCEXPORT
#endif
#ifndef CLANGBACKENDPROCESSPATH
# define CLANGBACKENDPROCESSPATH ""
#endif
#ifdef UNIT_TESTS
#define unittest_public public
#else
#define unittest_public private
#endif
namespace ClangBackEnd {
enum class DiagnosticSeverity : quint32 // one to one mapping of the clang enum numbers
{
Ignored = 0,
Note = 1,
Warning = 2,
Error = 3,
Fatal = 4
};
enum class HighlightingType : quint8
{
Invalid,
Keyword,
StringLiteral,
NumberLiteral,
Comment,
Function,
VirtualFunction,
Type,
PrimitiveType,
LocalVariable,
Parameter,
Field,
GlobalVariable,
Enumeration,
Operator,
OverloadedOperator,
Preprocessor,
PreprocessorDefinition,
PreprocessorExpansion,
Punctuation,
Label,
Declaration,
FunctionDefinition,
OutputArgument,
Namespace,
Class,
Struct,
Enum,
Union,
TypeAlias,
Typedef,
QtProperty,
ObjectiveCClass,
ObjectiveCCategory,
ObjectiveCProtocol,
ObjectiveCInterface,
ObjectiveCImplementation,
ObjectiveCProperty,
ObjectiveCMethod,
TemplateTypeParameter,
TemplateTemplateParameter,
AngleBracketOpen,
AngleBracketClose,
DoubleAngleBracketClose, // clang parses ">>" as one token, even if it's closing a nested template
TernaryIf,
TernaryElse,
};
enum class StorageClass : quint8
{
Invalid,
None,
Extern,
Static,
PrivateExtern,
Auto,
Register
};
enum class AccessSpecifier : quint8
{
Invalid,
Public,
Protected,
Private
};
enum class CompletionCorrection : quint32
{
NoCorrection,
DotToArrowCorrection
};
enum class MessageType : quint8 {
InvalidMessage,
AliveMessage,
EchoMessage,
EndMessage,
DocumentsOpenedMessage,
DocumentsChangedMessage,
DocumentsClosedMessage,
DocumentVisibilityChangedMessage,
UnsavedFilesUpdatedMessage,
UnsavedFilesRemovedMessage,
RequestAnnotationsMessage,
AnnotationsMessage,
RequestReferencesMessage,
ReferencesMessage,
RequestFollowSymbolMessage,
FollowSymbolMessage,
RequestToolTipMessage,
ToolTipMessage,
RequestCompletionsMessage,
CompletionsMessage,
};
template<MessageType messageEnumeration>
struct MessageTypeTrait;
template<class Message>
struct MessageTrait;
#define DECLARE_MESSAGE(Message) \
template<> \
struct MessageTrait<Message> \
{ \
static const MessageType enumeration = MessageType::Message; \
};
using MixinHighlightingTypes = Utils::SizedArray<HighlightingType, 6>;
struct HighlightingTypes {
HighlightingType mainHighlightingType = HighlightingType::Invalid;
MixinHighlightingTypes mixinHighlightingTypes;
};
enum class SourceLocationKind : uchar {
Definition = 1,
Declaration,
DeclarationReference,
MacroDefinition = 128,
MacroUndefinition,
MacroUsage,
None = 255,
};
enum class SymbolKind : uchar
{
None = 0,
Enumeration,
Record,
Function,
Variable,
Macro
};
using SymbolKinds = Utils::SizedArray<SymbolKind, 8>;
enum class SymbolTag : uchar
{
None = 0,
Class,
Struct,
Union,
MsvcInterface
};
using SymbolTags = Utils::SizedArray<SymbolTag, 7>;
enum class ProgressType { Invalid, PrecompiledHeader, Indexing, DependencyCreation };
} // namespace ClangBackEnd

View File

@@ -1,108 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "clangsupportdebugutils.h"
#include "filecontainer.h"
#include "utf8string.h"
#include <QDir>
#include <QLoggingCategory>
#include <QString>
#include <QTemporaryDir>
#include <QTemporaryFile>
namespace {
static Q_LOGGING_CATEGORY(timersLog, "qtc.clangbackend.timers", QtWarningMsg);
class DebugInspectionDir : public QTemporaryDir
{
public:
DebugInspectionDir()
: QTemporaryDir(QDir::tempPath() + QLatin1String("/qtc-clangsupport-XXXXXX"))
{
setAutoRemove(false); // Keep around for later inspection.
}
};
class DebugInspectionFile : public QTemporaryFile
{
public:
DebugInspectionFile(const QString &directoryPath,
const Utf8String &id,
const Utf8String &fileContent)
: QTemporaryFile(directoryPath + QString::fromUtf8("/%1-XXXXXX").arg(id.toString()))
{
setAutoRemove(false); // Keep around for later inspection.
m_isValid = open() && write(fileContent.constData(), fileContent.byteSize());
}
bool isValid() const
{
return m_isValid;
}
private:
bool m_isValid = false;
};
}
namespace ClangBackEnd {
Utf8String debugWriteFileForInspection(const Utf8String &fileContent, const Utf8String &id)
{
static DebugInspectionDir debugInspectionDir;
if (!debugInspectionDir.isValid())
return Utf8String();
DebugInspectionFile file(debugInspectionDir.path(), id, fileContent);
if (file.isValid())
return Utf8String::fromString(file.fileName());
return Utf8String();
}
Utf8String debugId(const FileContainer &fileContainer)
{
Utf8String id(Utf8StringLiteral("unsavedfilecontent-"));
id.append(QFileInfo(fileContainer.filePath).fileName());
return id;
}
VerboseScopeDurationTimer::VerboseScopeDurationTimer(const char *id)
: m_id(id)
{
if (timersLog().isDebugEnabled())
m_timer.start();
}
VerboseScopeDurationTimer::~VerboseScopeDurationTimer()
{
qCDebug(timersLog) << m_id << "needed" << m_timer.elapsed() << "ms";
}
} // namespace ClangBackEnd

View File

@@ -1,53 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include <QElapsedTimer>
class FileContainer;
class Utf8String;
namespace ClangBackEnd {
Utf8String debugWriteFileForInspection(const Utf8String &fileContent, const Utf8String &id);
Utf8String debugId(const FileContainer &fileContainer);
class CLANGSUPPORT_EXPORT VerboseScopeDurationTimer
{
public:
VerboseScopeDurationTimer(const char *id = nullptr);
~VerboseScopeDurationTimer();
private:
const char * const m_id;
QElapsedTimer m_timer;
};
} // namespace ClangBackEnd
#define TIME_SCOPE_DURATION(id) ClangBackEnd::VerboseScopeDurationTimer scopeDurationTimer(id)

View File

@@ -1,101 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "codecompletion.h"
#include <QDebug>
#include <ostream>
namespace ClangBackEnd {
static const char *completionKindToString(CodeCompletion::Kind kind)
{
switch (kind) {
case CodeCompletion::Other: return "Other";
case CodeCompletion::FunctionCompletionKind: return "Function";
case CodeCompletion::FunctionDefinitionCompletionKind: return "FunctionDefinitionCompletion";
case CodeCompletion::TemplateFunctionCompletionKind: return "TemplateFunction";
case CodeCompletion::FunctionOverloadCompletionKind: return "FunctionOverload";
case CodeCompletion::ConstructorCompletionKind: return "Constructor";
case CodeCompletion::DestructorCompletionKind: return "Destructor";
case CodeCompletion::VariableCompletionKind: return "Variable";
case CodeCompletion::ClassCompletionKind: return "Class";
case CodeCompletion::TypeAliasCompletionKind: return "TypeAlias";
case CodeCompletion::TemplateClassCompletionKind: return "TemplateClass";
case CodeCompletion::EnumerationCompletionKind: return "Enumeration";
case CodeCompletion::EnumeratorCompletionKind: return "Enumerator";
case CodeCompletion::NamespaceCompletionKind: return "Namespace";
case CodeCompletion::PreProcessorCompletionKind: return "PreProcessor";
case CodeCompletion::SignalCompletionKind: return "Signal";
case CodeCompletion::SlotCompletionKind: return "Slot";
case CodeCompletion::ObjCMessageCompletionKind: return "ObjCMessage";
case CodeCompletion::KeywordCompletionKind: return "Keyword";
case CodeCompletion::ClangSnippetKind: return "ClangSnippet";
}
return nullptr;
}
static const char *availabilityToString(CodeCompletion::Availability availability)
{
switch (availability) {
case CodeCompletion::Available: return "Available";
case CodeCompletion::Deprecated: return "Deprecated";
case CodeCompletion::NotAvailable: return "NotAvailable";
case CodeCompletion::NotAccessible: return "NotAccessible";
}
return nullptr;
}
QDebug operator<<(QDebug debug, const CodeCompletion &message)
{
debug.nospace() << "CodeCompletion(";
debug.nospace() << message.text << ", ";
debug.nospace() << message.priority << ", ";
debug.nospace() << completionKindToString(message.completionKind) << ", ";
debug.nospace() << availabilityToString(message.availability) << ", ";
if (!message.requiredFixIts.isEmpty())
debug.nospace() << message.requiredFixIts << ", ";
debug.nospace() << message.hasParameters;
debug.nospace() << ")";
return debug;
}
std::ostream &operator<<(std::ostream &os, const CodeCompletion::Kind kind)
{
return os << completionKindToString(kind);
}
std::ostream &operator<<(std::ostream &os, const CodeCompletion::Availability availability)
{
return os << availabilityToString(availability);
}
} // namespace ClangBackEnd

View File

@@ -1,147 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include "codecompletionchunk.h"
#include "fixitcontainer.h"
#include "utf8string.h"
#include <QDataStream>
#include <QVector>
namespace ClangBackEnd {
class CodeCompletion;
using CodeCompletions = QVector<CodeCompletion>;
class CodeCompletion
{
public:
enum Kind : uint8_t {
Other = 0,
FunctionCompletionKind,
FunctionDefinitionCompletionKind,
FunctionOverloadCompletionKind,
TemplateFunctionCompletionKind,
ClassCompletionKind,
ConstructorCompletionKind,
DestructorCompletionKind,
VariableCompletionKind,
TypeAliasCompletionKind,
TemplateClassCompletionKind,
EnumerationCompletionKind,
EnumeratorCompletionKind,
NamespaceCompletionKind,
PreProcessorCompletionKind,
SignalCompletionKind,
SlotCompletionKind,
ObjCMessageCompletionKind,
KeywordCompletionKind,
ClangSnippetKind
};
enum Availability : quint32 {
Available,
Deprecated,
NotAvailable,
NotAccessible
};
public:
CodeCompletion() = default;
CodeCompletion(const Utf8String &text,
quint32 priority = 0,
Kind completionKind = Other,
Availability availability = Available,
bool hasParameters = false)
: text(text),
priority(priority),
completionKind(completionKind),
availability(availability),
hasParameters(hasParameters)
{
}
friend QDataStream &operator<<(QDataStream &out, const CodeCompletion &message)
{
out << message.text;
out << message.briefComment;
out << message.chunks;
out << message.requiredFixIts;
out << message.priority;
out << static_cast<quint32>(message.completionKind);
out << static_cast<quint32>(message.availability);
out << message.hasParameters;
return out;
}
friend QDataStream &operator>>(QDataStream &in, CodeCompletion &message)
{
quint32 completionKind;
quint32 availability;
in >> message.text;
in >> message.briefComment;
in >> message.chunks;
in >> message.requiredFixIts;
in >> message.priority;
in >> completionKind;
in >> availability;
in >> message.hasParameters;
message.completionKind = static_cast<CodeCompletion::Kind>(completionKind);
message.availability = static_cast<CodeCompletion::Availability>(availability);
return in;
}
friend bool operator==(const CodeCompletion &first, const CodeCompletion &second)
{
return first.text == second.text
&& first.completionKind == second.completionKind
&& first.requiredFixIts == second.requiredFixIts;
}
public:
Utf8String text;
Utf8String briefComment;
CodeCompletionChunks chunks;
QVector<FixItContainer> requiredFixIts;
quint32 priority = 0;
Kind completionKind = Other;
Availability availability = NotAvailable;
bool hasParameters = false;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const CodeCompletion &message);
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, CodeCompletion::Kind kind);
CLANGSUPPORT_EXPORT std::ostream &operator<<(std::ostream &os, const CodeCompletion::Kind kind);
CLANGSUPPORT_EXPORT std::ostream &operator<<(std::ostream &os, const CodeCompletion::Availability availability);
} // namespace ClangBackEnd

View File

@@ -1,84 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "codecompletionchunk.h"
#include <QDebug>
#include <ostream>
namespace ClangBackEnd {
static const char *completionChunkKindToString(CodeCompletionChunk::Kind kind)
{
switch (kind) {
case CodeCompletionChunk::Optional: return "Optional";
case CodeCompletionChunk::TypedText: return "TypedText";
case CodeCompletionChunk::Text: return "Text";
case CodeCompletionChunk::Placeholder: return "Placeholder";
case CodeCompletionChunk::Informative: return "Informative";
case CodeCompletionChunk::CurrentParameter: return "CurrentParameter";
case CodeCompletionChunk::LeftParen: return "LeftParen";
case CodeCompletionChunk::RightParen: return "RightParen";
case CodeCompletionChunk::LeftBracket: return "LeftBracket";
case CodeCompletionChunk::RightBracket: return "RightBracket";
case CodeCompletionChunk::LeftBrace: return "LeftBrace";
case CodeCompletionChunk::RightBrace: return "RightBrace";
case CodeCompletionChunk::LeftAngle: return "LeftAngle";
case CodeCompletionChunk::RightAngle: return "RightAngle";
case CodeCompletionChunk::Comma: return "Comma";
case CodeCompletionChunk::ResultType: return "ResultType";
case CodeCompletionChunk::Colon: return "Colon";
case CodeCompletionChunk::SemiColon: return "SemiColon";
case CodeCompletionChunk::Equal: return "Equal";
case CodeCompletionChunk::HorizontalSpace: return "HorizontalSpace";
case CodeCompletionChunk::VerticalSpace: return "VerticalSpace";
case CodeCompletionChunk::Invalid: return "Invalid";
}
return nullptr;
}
QDebug operator<<(QDebug debug, const CodeCompletionChunk &chunk)
{
debug.nospace() << "CodeCompletionChunk(";
debug.nospace() << completionChunkKindToString(chunk.kind) << ", ";
debug.nospace() << chunk.text;
if (chunk.isOptional)
debug.nospace() << ", optional";
debug.nospace() << ")";
return debug;
}
std::ostream &operator<<(std::ostream &os, const CodeCompletionChunk::Kind &kind)
{
return os << completionChunkKindToString(kind);
}
} // namespace ClangBackEnd

View File

@@ -1,117 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include "utf8string.h"
#include <QDataStream>
#include <QVector>
namespace ClangBackEnd {
class CodeCompletionChunk;
using CodeCompletionChunks = QVector<CodeCompletionChunk>;
class CodeCompletionChunk
{
public:
enum Kind : quint8 {
Optional,
TypedText,
Text,
Placeholder,
Informative,
CurrentParameter,
LeftParen,
RightParen,
LeftBracket,
RightBracket,
LeftBrace,
RightBrace,
LeftAngle,
RightAngle,
Comma,
ResultType,
Colon,
SemiColon,
Equal,
HorizontalSpace,
VerticalSpace,
Invalid = 255
};
CodeCompletionChunk() = default;
CodeCompletionChunk(Kind kind,
const Utf8String &text,
bool isOptional = false)
: text(text),
kind(kind),
isOptional(isOptional)
{
}
friend QDataStream &operator<<(QDataStream &out, const CodeCompletionChunk &chunk)
{
out << static_cast<quint8>(chunk.kind);
out << chunk.text;
out << chunk.isOptional;
return out;
}
friend QDataStream &operator>>(QDataStream &in, CodeCompletionChunk &chunk)
{
quint8 kind;
in >> kind;
in >> chunk.text;
in >> chunk.isOptional;
chunk.kind = static_cast<CodeCompletionChunk::Kind>(kind);
return in;
}
friend bool operator==(const CodeCompletionChunk &first, const CodeCompletionChunk &second)
{
return first.kind == second.kind
&& first.text == second.text
&& first.isOptional == second.isOptional;
}
public:
Utf8String text;
Kind kind = Invalid;
bool isOptional = false;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const CodeCompletionChunk &chunk);
CLANGSUPPORT_EXPORT std::ostream &operator<<(std::ostream &os, const CodeCompletionChunk::Kind &kind);
} // namespace ClangBackEnd

View File

@@ -1,45 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "completionsmessage.h"
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const CompletionsMessage &message)
{
debug.nospace() << "CompletionsMessage(";
debug.nospace() << message.codeCompletions << ", "
<< message.ticketNumber;
debug.nospace() << ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,77 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "codecompletion.h"
#include <utf8stringvector.h>
#include <QDataStream>
namespace ClangBackEnd {
class CompletionsMessage
{
public:
CompletionsMessage() = default;
CompletionsMessage(const CodeCompletions &codeCompletions,
quint64 ticketNumber)
: codeCompletions(codeCompletions)
, ticketNumber(ticketNumber)
{
}
friend QDataStream &operator<<(QDataStream &out, const CompletionsMessage &message)
{
out << message.codeCompletions;
out << message.ticketNumber;
return out;
}
friend QDataStream &operator>>(QDataStream &in, CompletionsMessage &message)
{
in >> message.codeCompletions;
in >> message.ticketNumber;
return in;
}
friend bool operator==(const CompletionsMessage &first, const CompletionsMessage &second)
{
return first.ticketNumber == second.ticketNumber
&& first.codeCompletions == second.codeCompletions;
}
public:
CodeCompletions codeCompletions;
quint64 ticketNumber = 0;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const CompletionsMessage &message);
DECLARE_MESSAGE(CompletionsMessage)
} // namespace ClangBackEnd

View File

@@ -1,393 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "connectionclient.h"
#include "clangsupportdebugutils.h"
#include "processstartedevent.h"
#include "processexception.h"
#include <utils/hostosinfo.h>
#include <QCoreApplication>
#include <QMetaMethod>
#include <QProcess>
#include <QThread>
using namespace Utils;
namespace ClangBackEnd {
ConnectionClient::ConnectionClient(const QString &connectionName)
: m_connectionName(connectionName)
{
m_processCreator.setObserver(this);
listenForConnections();
m_processAliveTimer.setInterval(10000);
resetTemporaryDirectory();
static const bool startAliveTimer = !qEnvironmentVariableIntValue("QTC_CLANG_NO_ALIVE_TIMER");
if (startAliveTimer)
connectAliveTimer();
connectNewConnection();
}
ConnectionClient::~ConnectionClient()
{
QLocalServer::removeServer(connectionName());
}
void ConnectionClient::startProcessAndConnectToServerAsynchronously()
{
m_processIsStarting = true;
m_processFuture = m_processCreator.createProcess();
}
void ConnectionClient::disconnectFromServer()
{
if (m_localSocket)
m_localSocket->disconnectFromServer();
}
bool ConnectionClient::isConnected() const
{
return m_localSocket && m_localSocket->state() == QLocalSocket::ConnectedState;
}
void ConnectionClient::ensureMessageIsWritten()
{
while (isConnected() && m_localSocket->bytesToWrite() > 0)
m_localSocket->waitForBytesWritten(50);
}
void ConnectionClient::sendEndMessage()
{
sendEndCommand();
m_localSocket->flush();
ensureMessageIsWritten();
}
void ConnectionClient::resetProcessAliveTimer()
{
m_isAliveTimerResetted = true;
m_processAliveTimer.start();
}
void ConnectionClient::setProcessAliveTimerInterval(int processTimerInterval)
{
m_processAliveTimer.setInterval(processTimerInterval);
}
const QTemporaryDir &ConnectionClient::temporaryDirectory() const
{
return m_processCreator.temporaryDirectory();
}
LinePrefixer &ConnectionClient::stdErrPrefixer()
{
return m_stdErrPrefixer;
}
LinePrefixer &ConnectionClient::stdOutPrefixer()
{
return m_stdOutPrefixer;
}
QString ConnectionClient::connectionName() const
{
return m_connectionName;
}
bool ConnectionClient::event(QEvent *event)
{
if (event->type() == int(ProcessStartedEvent::ProcessStarted)) {
getProcessFromFuture();
return true;
};
return false;
}
void ConnectionClient::restartProcessAsynchronously()
{
getProcessFromFuture();
finishProcess(std::move(m_process));
resetTemporaryDirectory(); // clear left-over preambles
startProcessAndConnectToServerAsynchronously();
}
void ConnectionClient::restartProcessIfTimerIsNotResettedAndSocketIsEmpty()
{
if (m_isAliveTimerResetted) {
m_isAliveTimerResetted = false;
return; // Already reset, but we were scheduled after.
}
if (!m_localSocket || m_localSocket->bytesAvailable() > 0)
return; // We come first, the incoming data was not yet processed.
disconnectLocalSocketDisconnected();
disconnectFromServer();
restartProcessAsynchronously();
}
void ConnectionClient::endProcess(QtcProcess *process)
{
if (isProcessRunning(process) && isConnected()) {
sendEndMessage();
process->waitForFinished();
}
}
void ConnectionClient::terminateProcess(QtcProcess *process)
{
if (!HostOsInfo::isWindowsHost() && isProcessRunning()) {
process->terminate();
process->waitForFinished(1000);
}
}
void ConnectionClient::killProcess(QtcProcess *process)
{
if (isProcessRunning(process)) {
process->kill();
process->waitForFinished(1000);
}
}
void ConnectionClient::finishConnection()
{
if (m_localSocket) {
if (m_localSocket->state() != QLocalSocket::UnconnectedState)
m_localSocket->disconnectFromServer();
m_localSocket = nullptr;
}
}
void ConnectionClient::printLocalSocketError(QLocalSocket::LocalSocketError socketError)
{
if (m_localSocket && socketError != QLocalSocket::ServerNotFoundError)
qWarning() << outputName() << "LocalSocket Error:" << m_localSocket->errorString();
}
void ConnectionClient::printStandardOutput()
{
qDebug("%s", m_stdOutPrefixer.prefix(m_process->readAllStandardOutput()).constData());
}
void ConnectionClient::printStandardError()
{
qDebug("%s", m_stdErrPrefixer.prefix(m_process->readAllStandardError()).constData());
}
void ConnectionClient::resetTemporaryDirectory()
{
m_processCreator.resetTemporaryDirectory();
}
void ConnectionClient::initializeProcess(QtcProcess *process)
{
connectStandardOutputAndError(process);
resetProcessAliveTimer();
}
void ConnectionClient::connectLocalSocketDisconnected()
{
connect(m_localSocket,
&QLocalSocket::disconnected,
this,
&ConnectionClient::disconnectedFromLocalSocket);
connect(m_localSocket,
&QLocalSocket::disconnected,
this,
&ConnectionClient::restartProcessAsynchronously);
}
void ConnectionClient::disconnectLocalSocketDisconnected()
{
if (m_localSocket) {
disconnect(m_localSocket,
&QLocalSocket::disconnected,
this,
&ConnectionClient::restartProcessAsynchronously);
}
}
void ConnectionClient::finishProcess()
{
finishProcess(std::move(m_process));
emit processFinished();
}
bool ConnectionClient::isProcessRunning()
{
getProcessFromFuture();
return isProcessRunning(m_process.get());
}
void ConnectionClient::finishProcess(QProcessUniquePointer &&process)
{
disconnectLocalSocketDisconnected();
if (process) {
m_processAliveTimer.stop();
endProcess(process.get());
finishConnection();
terminateProcess(process.get());
killProcess(process.get());
resetState();
} else {
finishConnection();
}
}
bool ConnectionClient::waitForEcho()
{
return m_localSocket->waitForReadyRead();
}
bool ConnectionClient::waitForConnected()
{
bool isConnected = false;
for (int counter = 0; counter < 100; counter++) {
isConnected = m_localSocket && m_localSocket->waitForConnected(20);
if (isConnected)
return isConnected;
else {
QThread::msleep(30);
QCoreApplication::processEvents();
}
}
if (m_localSocket)
qWarning() << outputName() << "cannot connect:" << m_localSocket->errorString();
return isConnected;
}
QtcProcess *ConnectionClient::processForTestOnly()
{
getProcessFromFuture();
return m_process.get();
}
QIODevice *ConnectionClient::ioDevice()
{
return m_localSocket;
}
bool ConnectionClient::isProcessRunning(QtcProcess *process)
{
return process && process->state() == QProcess::Running;
}
void ConnectionClient::connectStandardOutputAndError(QtcProcess *process) const
{
connect(process, &QtcProcess::readyReadStandardOutput, this, &ConnectionClient::printStandardOutput);
connect(process, &QtcProcess::readyReadStandardError, this, &ConnectionClient::printStandardError);
}
void ConnectionClient::connectLocalSocketError() const
{
connect(m_localSocket,
&QLocalSocket::errorOccurred,
this,
&ConnectionClient::printLocalSocketError);
}
void ConnectionClient::connectAliveTimer()
{
connect(&m_processAliveTimer,
&QTimer::timeout,
this,
&ConnectionClient::restartProcessIfTimerIsNotResettedAndSocketIsEmpty);
}
void ConnectionClient::connectNewConnection()
{
QObject::connect(&m_localServer,
&QLocalServer::newConnection,
this,
&ConnectionClient::handleNewConnection);
}
void ConnectionClient::handleNewConnection()
{
m_localSocket = m_localServer.nextPendingConnection();
connectLocalSocketError();
connectLocalSocketDisconnected();
newConnectedServer(m_localSocket);
emit connectedToLocalSocket();
}
void ConnectionClient::getProcessFromFuture()
{
try {
if (m_processFuture.valid()) {
m_process = m_processFuture.get();
m_processIsStarting = false;
initializeProcess(m_process.get());
}
} catch (const ProcessException &processExeption) {
qWarning() << "Clang backend process is not working."
<< QLatin1String(processExeption.what());
}
}
void ConnectionClient::listenForConnections()
{
bool isListing = m_localServer.listen(connectionName());
if (!isListing)
qWarning() << "ConnectionClient: QLocalServer is not listing for connections!";
}
void ConnectionClient::setProcessPath(const QString &processPath)
{
m_processCreator.setProcessPath(processPath);
}
} // namespace ClangBackEnd

View File

@@ -1,146 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangcodemodelserverproxy.h"
#include "lineprefixer.h"
#include "processcreator.h"
#include "processhandle.h"
#include <QLocalServer>
#include <QLocalSocket>
#include <QScopedPointer>
#include <QTemporaryDir>
#include <future>
#include <memory>
namespace Utils { class QtcProcess; }
class Utf8String;
class Utf8StringVector;
namespace ClangBackEnd {
class FileContainer;
class CLANGSUPPORT_EXPORT ConnectionClient : public QObject
{
Q_OBJECT
public:
ConnectionClient(const QString &connectionName);
ConnectionClient(const ConnectionClient &) = delete;
ConnectionClient &operator=(const ConnectionClient &) = delete;
void startProcessAndConnectToServerAsynchronously();
void disconnectFromServer();
bool isConnected() const;
void sendEndMessage();
void resetProcessAliveTimer();
void setProcessAliveTimerInterval(int processTimerInterval);
void setProcessPath(const QString &processPath);
void restartProcessAsynchronously();
void restartProcessIfTimerIsNotResettedAndSocketIsEmpty();
void finishProcess();
bool isProcessRunning();
bool waitForEcho();
bool waitForConnected();
Utils::QtcProcess *processForTestOnly();
signals:
void connectedToLocalSocket();
void disconnectedFromLocalSocket();
void processFinished();
protected:
~ConnectionClient();
protected:
QIODevice *ioDevice();
const QTemporaryDir &temporaryDirectory() const;
LinePrefixer &stdErrPrefixer();
LinePrefixer &stdOutPrefixer();
virtual void sendEndCommand() = 0;
virtual void resetState() = 0;
virtual QString outputName() const = 0;
QString connectionName() const;
bool event(QEvent* event) override;
virtual void newConnectedServer(QLocalSocket *localSocket) = 0;
private:
static bool isProcessRunning(Utils::QtcProcess *process);
void finishProcess(QProcessUniquePointer &&process);
void endProcess(Utils::QtcProcess *process);
void terminateProcess(Utils::QtcProcess *process);
void killProcess(Utils::QtcProcess *process);
void finishConnection();
void printLocalSocketError(QLocalSocket::LocalSocketError socketError);
void printStandardOutput();
void printStandardError();
void initializeProcess(Utils::QtcProcess *process);
void resetTemporaryDirectory();
void connectLocalSocketDisconnected();
void disconnectLocalSocketDisconnected();
void connectStandardOutputAndError(Utils::QtcProcess *process) const;
void connectLocalSocketError() const;
void connectAliveTimer();
void connectNewConnection();
void handleNewConnection();
void getProcessFromFuture();
void listenForConnections();
void ensureMessageIsWritten();
protected:
ProcessCreator m_processCreator;
private:
LinePrefixer m_stdErrPrefixer;
LinePrefixer m_stdOutPrefixer;
QLocalServer m_localServer;
std::future<QProcessUniquePointer> m_processFuture;
mutable QProcessUniquePointer m_process;
QLocalSocket *m_localSocket = nullptr;
QTimer m_processAliveTimer;
QString m_connectionName;
bool m_isAliveTimerResetted = false;
bool m_processIsStarting = false;
};
} // namespace ClangBackEnd

View File

@@ -1,31 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "connectionserver.h"
namespace ClangBackEnd {
} // namespace ClangBackEnd

View File

@@ -1,142 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include <QCoreApplication>
#include <QLocalServer>
#include <QLocalSocket>
#include <QTimer>
#include <QDebug>
#include <cstdlib>
#include <memory>
#include <vector>
namespace ClangBackEnd {
class ClangCodeModelServerInterface;
class ClangCodeModelClientProxy;
template <typename ServerInterface,
typename ClientProxy>
class ConnectionServer
{
public:
ConnectionServer()
{
m_aliveTimer.start(5000);
connectAliveTimer();
connectLocalSocketDisconnet();
}
~ConnectionServer()
{
if (m_localSocket.state() != QLocalSocket::UnconnectedState)
m_localSocket.disconnectFromServer();
}
void start(const QString &connectionName)
{
connectToLocalServer(connectionName);
}
void setServer(ServerInterface *ipcServer)
{
this->m_ipcServer = ipcServer;
}
void ensureAliveMessageIsSent()
{
if (m_aliveTimer.remainingTime() == 0)
sendAliveMessage();
}
private:
void connectToLocalServer(const QString &connectionName)
{
QObject::connect(&m_localSocket,
&QLocalSocket::errorOccurred,
[&] (QLocalSocket::LocalSocketError) {
qWarning() << "ConnectionServer error:" << m_localSocket.errorString() << connectionName;
});
m_localSocket.connectToServer(connectionName);
m_ipcClientProxy = std::make_unique<ClientProxy>(m_ipcServer, &m_localSocket);
m_ipcServer->setClient(m_ipcClientProxy.get());
}
void sendAliveMessage()
{
if (m_ipcClientProxy)
m_ipcClientProxy->alive();
}
void handleSocketDisconnect()
{
m_ipcClientProxy.reset();
delayedExitApplicationIfNoSockedIsConnected();
}
void delayedExitApplicationIfNoSockedIsConnected()
{
QTimer::singleShot(60000, [&] { exitApplicationIfNoSockedIsConnected(); });
}
void exitApplicationIfNoSockedIsConnected()
{
if (m_localSocket.state() != QLocalSocket::UnconnectedState)
m_localSocket.disconnectFromServer();
QCoreApplication::exit();
}
void connectAliveTimer()
{
QObject::connect(&m_aliveTimer,
&QTimer::timeout,
[&] { sendAliveMessage(); });
}
void connectLocalSocketDisconnet()
{
QObject::connect(&m_localSocket,
&QLocalSocket::disconnected,
[&] { handleSocketDisconnect(); });
}
private:
QLocalSocket m_localSocket;
QTimer m_aliveTimer;
std::unique_ptr<ClientProxy> m_ipcClientProxy;
ServerInterface *m_ipcServer = nullptr;
};
} // namespace ClangBackEnd

View File

@@ -1,63 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "diagnosticcontainer.h"
#include <utf8stringvector.h>
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const DiagnosticContainer &container)
{
debug.nospace() << "DiagnosticContainer("
<< container.text << ", "
<< container.category << ", "
<< container.enableOption << ", "
<< container.disableOption << ", "
<< container.location << ", "
<< container.ranges << ", "
<< container.fixIts << ", "
<< container.children
<< ")";
return debug;
}
QDebug operator<<(QDebug debug, const QVector<DiagnosticContainer> &containers)
{
debug.nospace() << "{";
for (int i = 0; i < containers.size(); i++) {
debug.nospace() << containers[i];
if (i < containers.size() - 1)
debug.nospace() << ", ";
}
debug.nospace() << "}";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,130 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "sourcerangecontainer.h"
#include "fixitcontainer.h"
#include <QDataStream>
#include <QVector>
#include <utility>
namespace ClangBackEnd {
class DiagnosticContainer
{
public:
DiagnosticContainer() = default;
DiagnosticContainer(const Utf8String &text,
const Utf8String &category,
const std::pair<Utf8String,Utf8String> &options,
DiagnosticSeverity severity,
const SourceLocationContainer &location,
const QVector<SourceRangeContainer> &ranges,
const QVector<FixItContainer> &fixIts,
const QVector<DiagnosticContainer> &children)
: location(location),
ranges(ranges),
text(text),
category(category),
enableOption(options.first),
disableOption(options.second),
children(children),
fixIts(fixIts),
severity(severity)
{
for (auto it = this->children.begin(); it != this->children.end(); ++it) {
if (it->text == "note: remove constant to silence this warning") {
this->children.erase(it);
break;
}
}
}
friend QDataStream &operator<<(QDataStream &out, const DiagnosticContainer &container)
{
out << container.text;
out << container.category;
out << container.enableOption;
out << container.disableOption;
out << container.location;
out << static_cast<quint32>(container.severity);
out << container.ranges;
out << container.fixIts;
out << container.children;
return out;
}
friend QDataStream &operator>>(QDataStream &in, DiagnosticContainer &container)
{
quint32 severity;
in >> container.text;
in >> container.category;
in >> container.enableOption;
in >> container.disableOption;
in >> container.location;
in >> severity;
in >> container.ranges;
in >> container.fixIts;
in >> container.children;
container.severity = static_cast<DiagnosticSeverity>(severity);
return in;
}
friend bool operator==(const DiagnosticContainer &first, const DiagnosticContainer &second)
{
return first.text == second.text
&& first.location == second.location;
}
friend bool operator!=(const DiagnosticContainer &first, const DiagnosticContainer &second)
{
return !(first == second);
}
public:
SourceLocationContainer location;
QVector<SourceRangeContainer> ranges;
Utf8String text;
Utf8String category;
Utf8String enableOption;
Utf8String disableOption;
QVector<DiagnosticContainer> children;
QVector<FixItContainer> fixIts;
DiagnosticSeverity severity = DiagnosticSeverity::Ignored;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const DiagnosticContainer &container);
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const QVector<DiagnosticContainer> &container);
} // namespace ClangBackEnd

View File

@@ -1,45 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "documentschangedmessage.h"
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const DocumentsChangedMessage &message)
{
debug.nospace() << "DocumentsChangedMessage(";
for (const FileContainer &fileContainer : message.fileContainers)
debug.nospace() << fileContainer<< ", ";
debug.nospace() << ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,70 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "filecontainer.h"
#include <QVector>
namespace ClangBackEnd {
class DocumentsChangedMessage
{
public:
DocumentsChangedMessage() = default;
DocumentsChangedMessage(const QVector<FileContainer> &fileContainers)
: fileContainers(fileContainers)
{
}
friend QDataStream &operator<<(QDataStream &out, const DocumentsChangedMessage &message)
{
out << message.fileContainers;
return out;
}
friend QDataStream &operator>>(QDataStream &in, DocumentsChangedMessage &message)
{
in >> message.fileContainers;
return in;
}
friend bool operator==(const DocumentsChangedMessage &first,
const DocumentsChangedMessage &second)
{
return first.fileContainers == second.fileContainers;
}
public:
QVector<FileContainer> fileContainers;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const DocumentsChangedMessage &message);
DECLARE_MESSAGE(DocumentsChangedMessage)
} // namespace ClangBackEnd

View File

@@ -1,45 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "documentsclosedmessage.h"
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const DocumentsClosedMessage &message)
{
debug.nospace() << "DocumentsClosedMessage(";
for (const FileContainer &fileContainer : message.fileContainers)
debug.nospace() << fileContainer << ", ";
debug.nospace() << ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,71 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include "filecontainer.h"
#include <QVector>
namespace ClangBackEnd {
class DocumentsClosedMessage
{
public:
DocumentsClosedMessage() = default;
DocumentsClosedMessage(const QVector<FileContainer> &fileContainers)
: fileContainers(fileContainers)
{
}
friend QDataStream &operator<<(QDataStream &out, const DocumentsClosedMessage &message)
{
out << message.fileContainers;
return out;
}
friend QDataStream &operator>>(QDataStream &in, DocumentsClosedMessage &message)
{
in >> message.fileContainers;
return in;
}
friend bool operator==(const DocumentsClosedMessage &first, const DocumentsClosedMessage &second)
{
return first.fileContainers == second.fileContainers;
}
public:
QVector<FileContainer> fileContainers;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const DocumentsClosedMessage &message);
DECLARE_MESSAGE(DocumentsClosedMessage);
} // namespace ClangBackEnd

View File

@@ -1,50 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "documentsopenedmessage.h"
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const DocumentsOpenedMessage &message)
{
debug.nospace() << "DocumentsOpenedMessage(";
for (const FileContainer &fileContainer : message.fileContainers)
debug.nospace() << fileContainer<< ", ";
debug.nospace() << message.currentEditorFilePath << ", ";
for (const Utf8String &visibleEditorFilePath : message.visibleEditorFilePaths)
debug.nospace() << visibleEditorFilePath << ", ";
debug.nospace() << ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,81 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "filecontainer.h"
#include <QDataStream>
#include <QVector>
namespace ClangBackEnd {
class DocumentsOpenedMessage
{
public:
DocumentsOpenedMessage() = default;
DocumentsOpenedMessage(const QVector<FileContainer> &fileContainers,
const Utf8String &currentEditorFilePath,
const Utf8StringVector &visibleEditorFilePaths)
: fileContainers(fileContainers)
, currentEditorFilePath(currentEditorFilePath)
, visibleEditorFilePaths(visibleEditorFilePaths)
{
}
friend QDataStream &operator<<(QDataStream &out, const DocumentsOpenedMessage &message)
{
out << message.fileContainers;
out << message.currentEditorFilePath;
out << message.visibleEditorFilePaths;
return out;
}
friend QDataStream &operator>>(QDataStream &in, DocumentsOpenedMessage &message)
{
in >> message.fileContainers;
in >> message.currentEditorFilePath;
in >> message.visibleEditorFilePaths;
return in;
}
friend bool operator==(const DocumentsOpenedMessage &first, const DocumentsOpenedMessage &second)
{
return first.fileContainers == second.fileContainers
&& first.currentEditorFilePath == second.currentEditorFilePath
&& first.visibleEditorFilePaths == second.visibleEditorFilePaths;
}
public:
QVector<FileContainer> fileContainers;
Utf8String currentEditorFilePath;
Utf8StringVector visibleEditorFilePaths;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const DocumentsOpenedMessage &message);
DECLARE_MESSAGE(DocumentsOpenedMessage);
} // namespace ClangBackEnd

View File

@@ -1,46 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "documentvisibilitychangedmessage.h"
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const DocumentVisibilityChangedMessage &message)
{
debug.nospace() << "DocumentVisibilityChangedMessage(";
debug.nospace() << message.currentEditorFilePath << ", ";
for (const Utf8String &visibleEditorFilePath : message.visibleEditorFilePaths)
debug.nospace() << visibleEditorFilePath << ", ";
debug.nospace() << ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,78 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include <utf8stringvector.h>
#include <QDataStream>
namespace ClangBackEnd {
class DocumentVisibilityChangedMessage
{
public:
DocumentVisibilityChangedMessage() = default;
DocumentVisibilityChangedMessage(const Utf8String &currentEditorFilePath,
const Utf8StringVector &visibleEditorFilePaths)
: currentEditorFilePath(currentEditorFilePath)
, visibleEditorFilePaths(visibleEditorFilePaths)
{
}
friend QDataStream &operator<<(QDataStream &out, const DocumentVisibilityChangedMessage &message)
{
out << message.currentEditorFilePath;
out << message.visibleEditorFilePaths;
return out;
}
friend QDataStream &operator>>(QDataStream &in, DocumentVisibilityChangedMessage &message)
{
in >> message.currentEditorFilePath;
in >> message.visibleEditorFilePaths;
return in;
}
friend bool operator==(const DocumentVisibilityChangedMessage &first,
const DocumentVisibilityChangedMessage &second)
{
return first.currentEditorFilePath == second.currentEditorFilePath
&& first.visibleEditorFilePaths == second.visibleEditorFilePaths;
}
public:
Utf8String currentEditorFilePath;
Utf8StringVector visibleEditorFilePaths;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const DocumentVisibilityChangedMessage &message);
DECLARE_MESSAGE(DocumentVisibilityChangedMessage)
} // namespace ClangBackEnd

View File

@@ -1,38 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "echomessage.h"
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const EchoMessage &)
{
return debug.nospace() << "EchoMessage()";
}
} // namespace ClangBackEnd

View File

@@ -1,69 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include "messageenvelop.h"
namespace ClangBackEnd {
class EchoMessage
{
public:
EchoMessage() = default;
explicit EchoMessage(const MessageEnvelop &message)
: message(message)
{
}
friend QDataStream &operator<<(QDataStream &out, const EchoMessage &message)
{
out << message.message;
return out;
}
friend QDataStream &operator>>(QDataStream &in, EchoMessage &message)
{
in >> message.message;
return in;
}
friend bool operator==(const EchoMessage &first, const EchoMessage &second)
{
return first.message == second.message;
}
public:
MessageEnvelop message;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const EchoMessage &message);
DECLARE_MESSAGE(EchoMessage)
} // namespace ClangBackEnd

View File

@@ -1,37 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "endmessage.h"
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const EndMessage &/*message*/)
{
return debug.nospace() << "EndMessage()";
}
} // namespace ClangBackEnd

View File

@@ -1,56 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include <QDataStream>
namespace ClangBackEnd {
class EndMessage
{
public:
friend QDataStream &operator<<(QDataStream &out, const EndMessage &/*message*/)
{
return out;
}
friend QDataStream &operator>>(QDataStream &in, EndMessage &/*message*/)
{
return in;
}
friend bool operator==(const EndMessage &/*first*/, const EndMessage &/*second*/)
{
return true;
}
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const EndMessage &message);
DECLARE_MESSAGE(EndMessage)
}

View File

@@ -1,57 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "filecontainer.h"
#include "clangsupportdebugutils.h"
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const FileContainer &container)
{
debug.nospace() << "FileContainer("
<< container.filePath << ", "
<< container.compilationArguments << ", "
<< container.headerPaths << ", "
<< container.documentRevision << ", "
<< container.textCodecName;
if (container.hasUnsavedFileContent) {
const Utf8String fileWithContent = debugWriteFileForInspection(
container.unsavedFileContent,
debugId(container));
debug.nospace() << ", "
<< "<" << fileWithContent << ">";
}
debug.nospace() << ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,124 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include "utf8string.h"
#include <utf8stringvector.h>
#include <QDataStream>
namespace ClangBackEnd {
class FileContainer
{
public:
FileContainer() = default;
FileContainer(const Utf8String &filePath,
const Utf8String &unsavedFileContent = Utf8String(),
bool hasUnsavedFileContent = false,
quint32 documentRevision = 0,
const Utf8String &textCodecName = Utf8String())
: filePath(filePath),
unsavedFileContent(unsavedFileContent),
textCodecName(textCodecName),
documentRevision(documentRevision),
hasUnsavedFileContent(hasUnsavedFileContent)
{
}
FileContainer(const Utf8String &filePath,
const Utf8StringVector &compilationArguments,
const Utf8StringVector &headerPaths,
const Utf8String &unsavedFileContent = Utf8String(),
bool hasUnsavedFileContent = false,
quint32 documentRevision = 0)
: filePath(filePath),
compilationArguments(compilationArguments),
headerPaths(headerPaths),
unsavedFileContent(unsavedFileContent),
documentRevision(documentRevision),
hasUnsavedFileContent(hasUnsavedFileContent)
{
}
FileContainer(const Utf8String &filePath,
const Utf8StringVector &compilationArguments,
const Utf8StringVector &headerPaths,
quint32 documentRevision)
: filePath(filePath),
compilationArguments(compilationArguments),
headerPaths(headerPaths),
documentRevision(documentRevision),
hasUnsavedFileContent(false)
{
}
friend QDataStream &operator<<(QDataStream &out, const FileContainer &container)
{
out << container.filePath;
out << container.compilationArguments;
out << container.headerPaths;
out << container.unsavedFileContent;
out << container.textCodecName;
out << container.documentRevision;
out << container.hasUnsavedFileContent;
return out;
}
friend QDataStream &operator>>(QDataStream &in, FileContainer &container)
{
in >> container.filePath;
in >> container.compilationArguments;
in >> container.headerPaths;
in >> container.unsavedFileContent;
in >> container.textCodecName;
in >> container.documentRevision;
in >> container.hasUnsavedFileContent;
return in;
}
friend bool operator==(const FileContainer &first, const FileContainer &second)
{
return first.filePath == second.filePath;
}
friend CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const FileContainer &container);
public:
Utf8String filePath;
Utf8StringVector compilationArguments;
Utf8StringVector headerPaths;
Utf8String unsavedFileContent;
Utf8String textCodecName;
quint32 documentRevision = 0;
bool hasUnsavedFileContent = false;
};
} // namespace ClangBackEnd

View File

@@ -1,55 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "fixitcontainer.h"
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const FixItContainer &container)
{
debug.nospace() << "FixItContainer("
<< container.text << ", "
<< container.range
<< ")";
return debug;
}
QDebug operator<<(QDebug debug, const QVector<FixItContainer> &containers)
{
debug.nospace() << "{";
for (int i = 0; i < containers.size(); i++) {
debug.nospace() << containers[i];
if (i < containers.size() - 1)
debug.nospace() << ", ";
}
debug.nospace() << "}";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,74 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "sourcerangecontainer.h"
#include <QDataStream>
namespace ClangBackEnd {
class FixItContainer
{
public:
FixItContainer() = default;
FixItContainer(const Utf8String &text,
const SourceRangeContainer &range)
: range(range),
text(text)
{
}
friend QDataStream &operator<<(QDataStream &out, const FixItContainer &container)
{
out << container.text;
out << container.range;
return out;
}
friend QDataStream &operator>>(QDataStream &in, FixItContainer &container)
{
in >> container.text;
in >> container.range;
return in;
}
friend bool operator==(const FixItContainer &first, const FixItContainer &second)
{
return first.text == second.text && first.range == second.range;
}
public:
SourceRangeContainer range;
Utf8String text;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const FixItContainer &container);
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const QVector<FixItContainer> &container);
} // namespace ClangBackEnd

View File

@@ -1,55 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "followsymbolmessage.h"
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const FollowSymbolResult &result)
{
debug.nospace() << "FollowSymbolResult("
<< result.range
<< ", " << result.isResultOnlyForFallBack;
debug.nospace() << ")";
return debug;
}
QDebug operator<<(QDebug debug, const FollowSymbolMessage &message)
{
debug.nospace() << "FollowSymbolMessage("
<< message.fileContainer
<< ", " << message.ticketNumber
<< ", " << message.result;
debug.nospace() << ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,121 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "filecontainer.h"
#include "sourcerangecontainer.h"
#include <QDataStream>
#include <QVector>
namespace ClangBackEnd {
class FollowSymbolResult
{
public:
FollowSymbolResult() = default;
FollowSymbolResult(SourceRangeContainer range)
: range(std::move(range))
{}
FollowSymbolResult(SourceRangeContainer range, bool isResultOnlyForFallBack)
: range(std::move(range))
, isResultOnlyForFallBack(isResultOnlyForFallBack)
{}
friend QDataStream &operator<<(QDataStream &out, const FollowSymbolResult &container)
{
out << container.range;
out << container.isResultOnlyForFallBack;
return out;
}
friend QDataStream &operator>>(QDataStream &in, FollowSymbolResult &container)
{
in >> container.range;
in >> container.isResultOnlyForFallBack;
return in;
}
friend bool operator==(const FollowSymbolResult &first, const FollowSymbolResult &second)
{
return first.range == second.range
&& first.isResultOnlyForFallBack == second.isResultOnlyForFallBack;
}
SourceRangeContainer range;
bool isResultOnlyForFallBack = false;
};
class FollowSymbolMessage
{
public:
FollowSymbolMessage() = default;
FollowSymbolMessage(const FileContainer &fileContainer,
const FollowSymbolResult &result,
quint64 ticketNumber)
: fileContainer(fileContainer)
, result(result)
, ticketNumber(ticketNumber)
{
}
friend QDataStream &operator<<(QDataStream &out, const FollowSymbolMessage &message)
{
out << message.fileContainer;
out << message.result;
out << message.ticketNumber;
return out;
}
friend QDataStream &operator>>(QDataStream &in, FollowSymbolMessage &message)
{
in >> message.fileContainer;
in >> message.result;
in >> message.ticketNumber;
return in;
}
friend bool operator==(const FollowSymbolMessage &first, const FollowSymbolMessage &second)
{
return first.ticketNumber == second.ticketNumber
&& first.fileContainer == second.fileContainer
&& first.result == second.result;
}
public:
FileContainer fileContainer;
FollowSymbolResult result;
quint64 ticketNumber = 0;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const FollowSymbolResult &result);
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const FollowSymbolMessage &message);
DECLARE_MESSAGE(FollowSymbolMessage);
} // namespace ClangBackEnd

View File

@@ -1,35 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "ipcinterface.h"
namespace ClangBackEnd {
class IpcClientInterface : public IpcInterface
{};
} // namespace ClangBackEnd

View File

@@ -1,53 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
namespace ClangBackEnd {
template <typename ClientType>
class IpcClientProvider
{
public:
void setClient(ClientType *client)
{
client_ = client;
}
void resetClient()
{
client_ = nullptr;
}
ClientType *client()
{
return client_;
}
private:
ClientType *client_;
};
} // namespace ClangBackEnd

View File

@@ -1,49 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include <QtGlobal>
namespace ClangBackEnd {
class MessageEnvelop;
class IpcInterface
{
public:
IpcInterface() = default;
IpcInterface(const IpcInterface &) = delete;
IpcInterface &operator=(const IpcInterface &) = delete;
virtual void dispatch(const MessageEnvelop &messageEnvelop) = 0;
protected:
virtual ~IpcInterface() = default;
};
} // namespace ClangBackEnd

View File

@@ -1,35 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "ipcinterface.h"
namespace ClangBackEnd {
class IpcServerInterface : public IpcInterface
{};
} // namespace ClangBackEnd

View File

@@ -1,60 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "lineprefixer.h"
namespace ClangBackEnd {
LinePrefixer::LinePrefixer(const QByteArray &prefix)
: m_prefix(prefix)
{}
void LinePrefixer::setPrefix(const QByteArray &prefix)
{
m_prefix = prefix;
}
QByteArray LinePrefixer::prefix(const QByteArray &text)
{
QByteArray output = text;
if (m_previousIsEndingWithNewLine)
output.prepend(m_prefix);
if (output.endsWith('\n')) {
m_previousIsEndingWithNewLine = true;
output.chop(1);
} else {
m_previousIsEndingWithNewLine = false;
}
output.replace("\n", QByteArray("\n" + m_prefix));
if (m_previousIsEndingWithNewLine)
output.append('\n');
return output;
}
} // namespace ClangBackEnd

View File

@@ -1,49 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include "utf8string.h"
#include <QString>
#include <QTextStream>
namespace ClangBackEnd {
class CLANGSUPPORT_EXPORT LinePrefixer
{
public:
LinePrefixer() = default;
LinePrefixer(const QByteArray &prefix);
void setPrefix(const QByteArray &prefix);
QByteArray prefix(const QByteArray &text);
private:
QByteArray m_prefix;
bool m_previousIsEndingWithNewLine = true;
};
} // namespace ClangBackEnd

View File

@@ -1,98 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "messageenvelop.h"
#include "clangcodemodelclientmessages.h"
#include "clangcodemodelservermessages.h"
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const MessageEnvelop &messageEnvelop)
{
debug.nospace() << "MessageEnvelop(";
switch (messageEnvelop.messageType()) {
case MessageType::EndMessage:
qDebug() << "EndMessage()";
break;
case MessageType::DocumentsOpenedMessage:
qDebug() << messageEnvelop.message<DocumentsOpenedMessage>();
break;
case MessageType::DocumentsChangedMessage:
qDebug() << messageEnvelop.message<DocumentsChangedMessage>();
break;
case MessageType::DocumentsClosedMessage:
qDebug() << messageEnvelop.message<DocumentsClosedMessage>();
break;
case MessageType::DocumentVisibilityChangedMessage:
qDebug() << messageEnvelop.message<DocumentVisibilityChangedMessage>();
break;
case MessageType::UnsavedFilesUpdatedMessage:
qDebug() << messageEnvelop.message<UnsavedFilesUpdatedMessage>();
break;
case MessageType::UnsavedFilesRemovedMessage:
qDebug() << messageEnvelop.message<UnsavedFilesRemovedMessage>();
break;
case MessageType::RequestCompletionsMessage:
qDebug() << messageEnvelop.message<RequestCompletionsMessage>();
break;
case MessageType::RequestAnnotationsMessage:
qDebug() << messageEnvelop.message<RequestAnnotationsMessage>();
break;
case MessageType::RequestReferencesMessage:
qDebug() << messageEnvelop.message<RequestReferencesMessage>();
break;
case MessageType::RequestToolTipMessage:
qDebug() << messageEnvelop.message<RequestToolTipMessage>();
break;
case MessageType::AliveMessage:
qDebug() << "AliveMessage()";
break;
case MessageType::EchoMessage:
qDebug() << messageEnvelop.message<EchoMessage>();
break;
case MessageType::CompletionsMessage:
qDebug() << messageEnvelop.message<CompletionsMessage>();
break;
case MessageType::ReferencesMessage:
qDebug() << messageEnvelop.message<ReferencesMessage>();
break;
case MessageType::ToolTipMessage:
qDebug() << messageEnvelop.message<ToolTipMessage>();
break;
case MessageType::AnnotationsMessage:
qDebug() << messageEnvelop.message<AnnotationsMessage>();
break;
default:
qWarning() << "Unknown Message";
}
debug.nospace() << ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,118 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include <QByteArray>
#include <QDataStream>
#include <QDebug>
#include <QIODevice>
namespace ClangBackEnd {
class MessageEnvelop
{
public:
MessageEnvelop() = default;
template <class Message, typename = std::enable_if_t<
std::is_enum_v<decltype(MessageTrait<Message>::enumeration)>>>
MessageEnvelop(const Message &message)
: messageType_(MessageTrait<Message>::enumeration)
{
QDataStream stream(&data, QIODevice::WriteOnly);
stream << message;
}
template <class Message>
Message message() const
{
Message message;
QDataStream stream(&data, QIODevice::ReadOnly);
stream >> message;
return message;
}
MessageType messageType() const
{
return messageType_;
}
bool isValid() const
{
return messageType_ != MessageType::InvalidMessage;
}
friend
QDataStream &operator >>(QDataStream& in, MessageType& messageType)
{
quint32 messageTypeAsInt;
in >> messageTypeAsInt;
messageType = MessageType(messageTypeAsInt);
return in;
}
friend
QDataStream &operator<<(QDataStream &out, const MessageEnvelop &messageEnvelop)
{
out << static_cast<quint8>(messageEnvelop.messageType_);
out << messageEnvelop.data;
return out;
}
friend
QDataStream &operator>>(QDataStream &in, MessageEnvelop &messageEnvelop)
{
quint8 messageType;
in >> messageType;
in >> messageEnvelop.data;
messageEnvelop.messageType_ = static_cast<MessageType>(messageType);
return in;
}
friend
bool operator==(const MessageEnvelop &first, const MessageEnvelop &second)
{
return first.messageType_ == second.messageType_
&& first.data == second.data;
}
friend QDebug operator<<(QDebug debug, const MessageEnvelop &messageEnvelop);
private:
mutable QByteArray data;
MessageType messageType_ = MessageType::InvalidMessage;
};
} // namespace ClangBackEnd

View File

@@ -1,190 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "processcreator.h"
#include "processexception.h"
#include "processstartedevent.h"
#include <utils/commandline.h>
#include <utils/qtcprocess.h>
#include <QCoreApplication>
#include <QFileInfo>
#include <QTemporaryDir>
using namespace Utils;
namespace ClangBackEnd {
using namespace std::chrono_literals;
ProcessCreator::ProcessCreator()
{
}
void ProcessCreator::setTemporaryDirectoryPattern(const QString &temporaryDirectoryPattern)
{
m_temporaryDirectoryPattern = temporaryDirectoryPattern;
resetTemporaryDirectory();
}
void ProcessCreator::setProcessPath(const QString &processPath)
{
m_processPath = processPath;
}
void ProcessCreator::setArguments(const QStringList &arguments)
{
m_arguments = arguments;
}
void ProcessCreator::setEnvironment(const Environment &environment)
{
m_environment = environment;
}
std::future<QProcessUniquePointer> ProcessCreator::createProcess() const
{
return std::async(std::launch::async, [&] {
checkIfProcessPathExists();
auto process = QProcessUniquePointer(new QtcProcess);
process->setProcessChannelMode(QProcess::ForwardedChannels);
process->setEnvironment(processEnvironment());
process->setCommand(CommandLine(FilePath::fromString(m_processPath), m_arguments));
process->start();
process->waitForStarted(5000);
checkIfProcessWasStartingSuccessful(process.get());
postProcessStartedEvent();
process->moveToThread(QCoreApplication::instance()->thread());
return process;
});
}
void ProcessCreator::setObserver(QObject *observer)
{
this->m_observer = observer;
}
void ProcessCreator::checkIfProcessPathExists() const
{
if (!QFileInfo::exists(m_processPath)) {
const QString messageTemplate = QCoreApplication::translate("ProcessCreator",
"Executable does not exist: %1");
throwProcessException(messageTemplate.arg(m_processPath));
}
}
void ProcessCreator::checkIfProcessWasStartingSuccessful(QtcProcess *process) const
{
if (process->exitStatus() == QProcess::CrashExit || process->exitCode() != 0)
dispatchProcessError(process);
}
void ProcessCreator::dispatchProcessError(QtcProcess *process) const
{
switch (process->error()) {
case QProcess::UnknownError: {
const QString message = QCoreApplication::translate("ProcessCreator",
"Unknown error occurred.");
throwProcessException(message);
};
case QProcess::Crashed: {
const QString message = QCoreApplication::translate("ProcessCreator",
"Process crashed.");
throwProcessException(message);
};
case QProcess::FailedToStart: {
const QString message = QCoreApplication::translate("ProcessCreator",
"Process failed at startup.");
throwProcessException(message);
};
case QProcess::Timedout: {
const QString message = QCoreApplication::translate("ProcessCreator",
"Process timed out.");
throwProcessException(message);
};
case QProcess::WriteError: {
const QString message = QCoreApplication::translate("ProcessCreator",
"Cannot write to process.");
throwProcessException(message);
};
case QProcess::ReadError: {
const QString message = QCoreApplication::translate("ProcessCreator",
"Cannot read from process.");
throwProcessException(message);
};
}
throwProcessException("Internal impossible error!");
}
void ProcessCreator::postProcessStartedEvent() const
{
if (m_observer)
QCoreApplication::postEvent(m_observer, new ProcessStartedEvent);
}
void ProcessCreator::throwProcessException(const QString &message) const
{
postProcessStartedEvent();
throw ProcessException(message);
}
const QTemporaryDir &ProcessCreator::temporaryDirectory() const
{
return *m_temporaryDirectory.get();
}
void ProcessCreator::resetTemporaryDirectory()
{
m_temporaryDirectory = std::make_unique<TemporaryDirectory>(m_temporaryDirectoryPattern);
}
Environment ProcessCreator::processEnvironment() const
{
auto processEnvironment = Environment::systemEnvironment();
if (temporaryDirectory().isValid()) {
const QString temporaryDirectoryPath = temporaryDirectory().path();
processEnvironment.set("TMPDIR", temporaryDirectoryPath);
processEnvironment.set("TMP", temporaryDirectoryPath);
processEnvironment.set("TEMP", temporaryDirectoryPath);
}
const Environment &env = m_environment;
for (auto it = env.constBegin(); it != env.constEnd(); ++it) {
if (env.isEnabled(it))
processEnvironment.set(env.key(it), env.expandedValueForKey(env.key(it)));
}
return processEnvironment;
}
} // namespace ClangBackEnd

View File

@@ -1,85 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include <clangsupport_global.h>
#include "processhandle.h"
#include <utils/environment.h>
#include <utils/temporarydirectory.h>
#include <QStringList>
#include <future>
#include <memory>
QT_BEGIN_NAMESPACE
class QTemporaryDir;
QT_END_NAMESPACE
namespace Utils {
class Environment;
class QtcProcess;
}
namespace ClangBackEnd {
class CLANGSUPPORT_EXPORT ProcessCreator
{
public:
ProcessCreator();
void setTemporaryDirectoryPattern(const QString &temporaryDirectoryPattern);
void setProcessPath(const QString &m_processPath);
void setArguments(const QStringList &m_arguments);
void setEnvironment(const Utils::Environment &environment);
void setObserver(QObject *m_observer);
std::future<QProcessUniquePointer> createProcess() const;
const QTemporaryDir &temporaryDirectory() const;
void resetTemporaryDirectory();
private:
void checkIfProcessPathExists() const;
void checkIfProcessWasStartingSuccessful(Utils::QtcProcess *process) const;
[[noreturn]] void dispatchProcessError(Utils::QtcProcess *process) const;
void postProcessStartedEvent() const;
[[noreturn]] void throwProcessException(const QString &message) const;
Utils::Environment processEnvironment() const;
private:
std::unique_ptr<Utils::TemporaryDirectory> m_temporaryDirectory;
QString m_processPath;
QString m_temporaryDirectoryPattern;
QStringList m_arguments;
Utils::Environment m_environment;
QObject *m_observer = nullptr;
};
} // namespace ClangBackEnd

View File

@@ -1,40 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "processexception.h"
namespace ClangBackEnd {
ProcessException::ProcessException(Utils::SmallString &&what)
: what_(std::move(what))
{
}
const char *ProcessException::what() const noexcept
{
return what_.data();
}
} // namespace ClangBackEnd

View File

@@ -1,48 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include <utils/smallstring.h>
#include <exception>
#include "clangsupport_global.h"
namespace ClangBackEnd {
class CLANGSUPPORT_EXPORT ProcessException : public std::exception
{
public:
ProcessException() = default;
ProcessException(Utils::SmallString &&what);
const char *what() const noexcept final;
private:
Utils::SmallString what_;
};
} // namespace ClangBackEnd

View File

@@ -1,47 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include <utils/qtcprocess.h>
#include <memory>
namespace ClangBackEnd {
class QProcessUniquePointerDeleter
{
public:
void operator()(Utils::QtcProcess* process)
{
process->kill();
process->waitForFinished();
delete process;
}
};
using QProcessUniquePointer = std::unique_ptr<Utils::QtcProcess, QProcessUniquePointerDeleter>;
} // namespace ClangBackEnd

View File

@@ -1,34 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "processstartedevent.h"
namespace ClangBackEnd {
ProcessStartedEvent::~ProcessStartedEvent()
{
}
} // namespace ClangBackEnd

View File

@@ -1,44 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include <QEvent>
namespace ClangBackEnd {
class ProcessStartedEvent : public QEvent
{
public:
enum Type {
ProcessStarted = QEvent::User + 3456
};
ProcessStartedEvent()
: QEvent(static_cast<QEvent::Type>(ProcessStarted))
{}
~ProcessStartedEvent() override;
};
} // namespace ClangBackEnd

View File

@@ -1,122 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "readmessageblock.h"
#include "messageenvelop.h"
#include <QDataStream>
#include <QDebug>
#include <QIODevice>
#include <QVariant>
namespace ClangBackEnd {
ReadMessageBlock::ReadMessageBlock(QIODevice *ioDevice)
: m_ioDevice(ioDevice),
m_messageCounter(0),
m_blockSize(0)
{
}
bool ReadMessageBlock::checkIfMessageIsLost(QDataStream &in)
{
qint64 currentMessageCounter;
in >> currentMessageCounter;
bool messageIsLost = false;
#ifndef DONT_CHECK_MESSAGE_COUNTER
messageIsLost = !((currentMessageCounter == 0 && m_messageCounter == 0) || (m_messageCounter + 1 == currentMessageCounter));
if (messageIsLost)
qWarning() << "message lost: " << m_messageCounter << currentMessageCounter;
#endif
m_messageCounter = currentMessageCounter;
return messageIsLost;
}
MessageEnvelop ReadMessageBlock::read()
{
QDataStream in(m_ioDevice);
MessageEnvelop message;
if (isTheWholeMessageReadable(in)) {
bool messageIsLost = checkIfMessageIsLost(in);
in >> message;
if (messageIsLost)
qDebug() << message;
}
return message;
}
std::vector<MessageEnvelop> ReadMessageBlock::readAll()
{
std::vector<MessageEnvelop> messages;
while (true) {
MessageEnvelop message = read();
if (message.isValid())
messages.push_back(std::move(message));
else
return messages;
}
Q_UNREACHABLE();
}
void ReadMessageBlock::resetState()
{
m_messageCounter = 0;
}
void ReadMessageBlock::setIoDevice(QIODevice *ioDevice)
{
m_ioDevice = ioDevice;
}
bool ReadMessageBlock::isTheWholeMessageReadable(QDataStream &in)
{
if (m_ioDevice->bytesAvailable() < qint64(sizeof(m_blockSize)))
return false;
if (m_blockSize == 0)
in >> m_blockSize;
if (m_ioDevice->bytesAvailable() < m_blockSize)
return false;
m_blockSize = 0;
return true;
}
} // namespace ClangBackEnd

View File

@@ -1,65 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include <QtGlobal>
#include <vector>
#include "clangsupport_global.h"
QT_BEGIN_NAMESPACE
class QDataStream;
class QIODevice;
QT_END_NAMESPACE
namespace ClangBackEnd {
class MessageEnvelop;
class CLANGSUPPORT_EXPORT ReadMessageBlock
{
public:
ReadMessageBlock(QIODevice *ioDevice = nullptr);
MessageEnvelop read();
std::vector<MessageEnvelop> readAll();
void resetState();
void setIoDevice(QIODevice *ioDevice);
private:
bool isTheWholeMessageReadable(QDataStream &in);
bool checkIfMessageIsLost(QDataStream &in);
private:
QIODevice *m_ioDevice;
qint64 m_messageCounter;
qint32 m_blockSize;
};
} // namespace ClangBackEnd

View File

@@ -1,45 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "referencesmessage.h"
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const ReferencesMessage &message)
{
debug.nospace() << "ReferencesMessage("
<< message.fileContainer
<< ", " << message.ticketNumber
<< ", " << message.isLocalVariable
<< ", " << message.references;
debug.nospace() << ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,89 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "filecontainer.h"
#include "sourcerangecontainer.h"
#include <QDataStream>
#include <QVector>
namespace ClangBackEnd {
class ReferencesMessage
{
public:
ReferencesMessage() = default;
ReferencesMessage(const FileContainer &fileContainer,
const QVector<SourceRangeContainer> &references,
bool isLocalVariable,
quint64 ticketNumber)
: fileContainer(fileContainer)
, references(references)
, ticketNumber(ticketNumber)
, isLocalVariable(isLocalVariable)
{
}
friend QDataStream &operator<<(QDataStream &out, const ReferencesMessage &message)
{
out << message.fileContainer;
out << message.isLocalVariable;
out << message.references;
out << message.ticketNumber;
return out;
}
friend QDataStream &operator>>(QDataStream &in, ReferencesMessage &message)
{
in >> message.fileContainer;
in >> message.isLocalVariable;
in >> message.references;
in >> message.ticketNumber;
return in;
}
friend bool operator==(const ReferencesMessage &first, const ReferencesMessage &second)
{
return first.ticketNumber == second.ticketNumber
&& first.isLocalVariable == second.isLocalVariable
&& first.fileContainer == second.fileContainer
&& first.references == second.references;
}
public:
FileContainer fileContainer;
QVector<SourceRangeContainer> references;
quint64 ticketNumber = 0;
bool isLocalVariable = false;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const ReferencesMessage &message);
DECLARE_MESSAGE(ReferencesMessage)
} // namespace ClangBackEnd

View File

@@ -1,41 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "requestannotationsmessage.h"
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const RequestAnnotationsMessage &message)
{
debug.nospace() << "RequestAnnotationsMessage("
<< message.fileContainer
<< ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,68 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "filecontainer.h"
namespace ClangBackEnd {
class RequestAnnotationsMessage
{
public:
RequestAnnotationsMessage() = default;
RequestAnnotationsMessage(const FileContainer &fileContainer)
: fileContainer(fileContainer)
{
}
friend QDataStream &operator<<(QDataStream &out, const RequestAnnotationsMessage &message)
{
out << message.fileContainer;
return out;
}
friend QDataStream &operator>>(QDataStream &in, RequestAnnotationsMessage &message)
{
in >> message.fileContainer;
return in;
}
friend bool operator==(const RequestAnnotationsMessage &first,
const RequestAnnotationsMessage &second)
{
return first.fileContainer == second.fileContainer;
}
public:
FileContainer fileContainer;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const RequestAnnotationsMessage &message);
DECLARE_MESSAGE(RequestAnnotationsMessage);
} // namespace ClangBackEnd

View File

@@ -1,51 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "requestcompletionsmessage.h"
#include <QDebug>
namespace ClangBackEnd {
quint64 RequestCompletionsMessage::ticketCounter = 0;
QDebug operator<<(QDebug debug, const RequestCompletionsMessage &message)
{
debug.nospace() << "RequestCompletionsMessage(";
debug.nospace() << message.filePath << ", ";
debug.nospace() << message.line << ", ";
debug.nospace() << message.column << ", ";
debug.nospace() << message.ticketNumber;
debug.nospace() << message.funcNameStartLine << ", ";
debug.nospace() << message.funcNameStartColumn << ", ";
debug.nospace() << ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,102 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include "utf8string.h"
#include <QDataStream>
namespace ClangBackEnd {
class RequestCompletionsMessage
{
public:
RequestCompletionsMessage() = default;
RequestCompletionsMessage(const Utf8String &filePath,
quint32 line,
quint32 column,
qint32 funcNameStartLine = -1,
qint32 funcNameStartColumn = -1)
: filePath(filePath)
, ticketNumber(++ticketCounter)
, line(line)
, column(column)
, funcNameStartLine(funcNameStartLine)
, funcNameStartColumn(funcNameStartColumn)
{
}
friend QDataStream &operator<<(QDataStream &out, const RequestCompletionsMessage &message)
{
out << message.filePath;
out << message.ticketNumber;
out << message.line;
out << message.column;
out << message.funcNameStartLine;
out << message.funcNameStartColumn;
return out;
}
friend QDataStream &operator>>(QDataStream &in, RequestCompletionsMessage &message)
{
in >> message.filePath;
in >> message.ticketNumber;
in >> message.line;
in >> message.column;
in >> message.funcNameStartLine;
in >> message.funcNameStartColumn;
return in;
}
friend bool operator==(const RequestCompletionsMessage &first,
const RequestCompletionsMessage &second)
{
return first.ticketNumber == second.ticketNumber
&& first.filePath == second.filePath
&& first.line == second.line
&& first.column == second.column
&& first.funcNameStartLine == second.funcNameStartLine
&& first.funcNameStartColumn == second.funcNameStartColumn;
}
public:
Utf8String filePath;
static CLANGSUPPORT_EXPORT quint64 ticketCounter;
quint64 ticketNumber = 0;
quint32 line = 0;
quint32 column = 0;
qint32 funcNameStartLine = -1;
qint32 funcNameStartColumn = -1;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const RequestCompletionsMessage &message);
DECLARE_MESSAGE(RequestCompletionsMessage);
} // namespace ClangBackEnd

View File

@@ -1,48 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "requestfollowsymbolmessage.h"
#include <QDebug>
namespace ClangBackEnd {
quint64 RequestFollowSymbolMessage::ticketCounter = 0;
QDebug operator<<(QDebug debug, const RequestFollowSymbolMessage &message)
{
debug.nospace() << "RequestFollowSymbolMessage(";
debug.nospace() << message.fileContainer << ", ";
debug.nospace() << message.ticketNumber << ", ";
debug.nospace() << message.line << ", ";
debug.nospace() << message.column << ", ";
debug.nospace() << ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,90 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include "filecontainer.h"
#include <QDataStream>
namespace ClangBackEnd {
class RequestFollowSymbolMessage
{
public:
RequestFollowSymbolMessage() = default;
RequestFollowSymbolMessage(const FileContainer &fileContainer,
quint32 line,
quint32 column)
: fileContainer(fileContainer)
, ticketNumber(++ticketCounter)
, line(line)
, column(column)
{
}
friend QDataStream &operator<<(QDataStream &out, const RequestFollowSymbolMessage &message)
{
out << message.fileContainer;
out << message.ticketNumber;
out << message.line;
out << message.column;
return out;
}
friend QDataStream &operator>>(QDataStream &in, RequestFollowSymbolMessage &message)
{
in >> message.fileContainer;
in >> message.ticketNumber;
in >> message.line;
in >> message.column;
return in;
}
friend bool operator==(const RequestFollowSymbolMessage &first,
const RequestFollowSymbolMessage &second)
{
return first.ticketNumber == second.ticketNumber
&& first.line == second.line
&& first.column == second.column
&& first.fileContainer == second.fileContainer;
}
public:
FileContainer fileContainer;
quint64 ticketNumber = 0;
quint32 line = 0;
quint32 column = 0;
static CLANGSUPPORT_EXPORT quint64 ticketCounter;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const RequestFollowSymbolMessage &message);
DECLARE_MESSAGE(RequestFollowSymbolMessage);
} // namespace ClangBackEnd

View File

@@ -1,49 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "requestreferencesmessage.h"
#include <QDebug>
namespace ClangBackEnd {
quint64 RequestReferencesMessage::ticketCounter = 0;
QDebug operator<<(QDebug debug, const RequestReferencesMessage &message)
{
debug.nospace() << "RequestReferencesMessage(";
debug.nospace() << message.fileContainer << ", ";
debug.nospace() << message.ticketNumber << ", ";
debug.nospace() << message.line << ", ";
debug.nospace() << message.column << ", ";
debug.nospace() << message.local << ", ";
debug.nospace() << ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,96 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include "filecontainer.h"
#include <QDataStream>
namespace ClangBackEnd {
class RequestReferencesMessage
{
public:
RequestReferencesMessage() = default;
RequestReferencesMessage(const FileContainer &fileContainer,
quint32 line,
quint32 column,
bool local = false)
: fileContainer(fileContainer)
, ticketNumber(++ticketCounter)
, line(line)
, column(column)
, local(local)
{
}
friend QDataStream &operator<<(QDataStream &out, const RequestReferencesMessage &message)
{
out << message.fileContainer;
out << message.ticketNumber;
out << message.line;
out << message.column;
out << message.local;
return out;
}
friend QDataStream &operator>>(QDataStream &in, RequestReferencesMessage &message)
{
in >> message.fileContainer;
in >> message.ticketNumber;
in >> message.line;
in >> message.column;
in >> message.local;
return in;
}
friend bool operator==(const RequestReferencesMessage &first,
const RequestReferencesMessage &second)
{
return first.ticketNumber == second.ticketNumber
&& first.line == second.line
&& first.column == second.column
&& first.fileContainer == second.fileContainer
&& first.local == second.local;
}
public:
FileContainer fileContainer;
quint64 ticketNumber = 0;
quint32 line = 0;
quint32 column = 0;
bool local = false;
static CLANGSUPPORT_EXPORT quint64 ticketCounter;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const RequestReferencesMessage &message);
DECLARE_MESSAGE(RequestReferencesMessage);
} // namespace ClangBackEnd

View File

@@ -1,48 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "requesttooltipmessage.h"
#include <QDebug>
namespace ClangBackEnd {
quint64 RequestToolTipMessage::ticketCounter = 0;
QDebug operator<<(QDebug debug, const RequestToolTipMessage &message)
{
debug.nospace() << "RequestToolTipMessage(";
debug.nospace() << message.fileContainer << ", ";
debug.nospace() << message.ticketNumber << ", ";
debug.nospace() << message.line << ", ";
debug.nospace() << message.column << ", ";
debug.nospace() << ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,89 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include "filecontainer.h"
#include <QDataStream>
namespace ClangBackEnd {
// TODO: De-duplicate with RequestReferencesMessage?
class RequestToolTipMessage
{
public:
RequestToolTipMessage() = default;
RequestToolTipMessage(const FileContainer &fileContainer, quint32 line, quint32 column)
: fileContainer(fileContainer)
, ticketNumber(++ticketCounter)
, line(line)
, column(column)
{
}
friend QDataStream &operator<<(QDataStream &out, const RequestToolTipMessage &message)
{
out << message.fileContainer;
out << message.ticketNumber;
out << message.line;
out << message.column;
return out;
}
friend QDataStream &operator>>(QDataStream &in, RequestToolTipMessage &message)
{
in >> message.fileContainer;
in >> message.ticketNumber;
in >> message.line;
in >> message.column;
return in;
}
friend bool operator==(const RequestToolTipMessage &first,
const RequestToolTipMessage &second)
{
return first.ticketNumber == second.ticketNumber
&& first.line == second.line
&& first.column == second.column
&& first.fileContainer == second.fileContainer;
}
public:
FileContainer fileContainer;
quint64 ticketNumber = 0;
quint32 line = 0;
quint32 column = 0;
static CLANGSUPPORT_EXPORT quint64 ticketCounter;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const RequestToolTipMessage &message);
DECLARE_MESSAGE(RequestToolTipMessage);
} // namespace ClangBackEnd

View File

@@ -1,74 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "sourcelocationcontainer.h"
#include <QDataStream>
#include <QDebug>
namespace ClangBackEnd {
QDataStream &operator<<(QDataStream &out, const SourceLocationContainer &container)
{
out << container.filePath;
out << container.line;
out << container.column;
return out;
}
QDataStream &operator>>(QDataStream &in, SourceLocationContainer &container)
{
in >> container.filePath;
in >> container.line;
in >> container.column;
return in;
}
bool operator==(const SourceLocationContainer &first, const SourceLocationContainer &second)
{
return !(first != second);
}
bool operator!=(const SourceLocationContainer &first, const SourceLocationContainer &second)
{
return first.line != second.line
|| first.column != second.column
|| first.filePath != second.filePath;
}
QDebug operator<<(QDebug debug, const SourceLocationContainer &container)
{
debug.nospace() << "SourceLocationContainer("
<< container.filePath << ", "
<< container.line << ", "
<< container.column
<< ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,60 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include "utf8string.h"
namespace ClangBackEnd {
class CLANGSUPPORT_EXPORT SourceLocationContainer
{
public:
SourceLocationContainer() = default;
SourceLocationContainer(const Utf8String &filePath,
int line,
int column)
: filePath(filePath),
line(line),
column(column)
{
}
public:
Utf8String filePath;
int line = 0;
int column = 0;
};
CLANGSUPPORT_EXPORT QDataStream &operator<<(QDataStream &out, const SourceLocationContainer &container);
CLANGSUPPORT_EXPORT QDataStream &operator>>(QDataStream &in, SourceLocationContainer &container);
CLANGSUPPORT_EXPORT bool operator==(const SourceLocationContainer &first, const SourceLocationContainer &second);
CLANGSUPPORT_EXPORT bool operator!=(const SourceLocationContainer &first, const SourceLocationContainer &second);
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const SourceLocationContainer &container);
} // namespace ClangBackEnd

View File

@@ -1,47 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "sourcelocationscontainer.h"
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const SourceLocationsContainer &container)
{
debug.nospace() << "SourceLocationsContainer([";
for (const auto &sourceLocation: container.sourceLocationContainers()) {
debug.nospace() << "("
<< sourceLocation.filePath << ","
<< sourceLocation.line << ","
<< sourceLocation.column << "), ";
}
debug.nospace() << "])";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,92 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "sourcelocationcontainer.h"
#include <utils/smallstringio.h>
namespace ClangBackEnd {
class CLANGSUPPORT_EXPORT SourceLocationsContainer
{
public:
SourceLocationsContainer() = default;
SourceLocationsContainer(std::vector<SourceLocationContainer> &&sourceLocationContainers)
: m_sourceLocationContainers(std::move(sourceLocationContainers))
{}
const std::vector<SourceLocationContainer> &sourceLocationContainers() const
{
return m_sourceLocationContainers;
}
bool hasContent() const
{
return !m_sourceLocationContainers.empty();
}
void insertSourceLocation(const Utf8String &filePath, int line, int column)
{
m_sourceLocationContainers.emplace_back(filePath, line, column);
}
void reserve(std::size_t size)
{
m_sourceLocationContainers.reserve(size);
}
friend QDataStream &operator<<(QDataStream &out, const SourceLocationsContainer &container)
{
out << container.m_sourceLocationContainers;
return out;
}
friend QDataStream &operator>>(QDataStream &in, SourceLocationsContainer &container)
{
in >> container.m_sourceLocationContainers;
return in;
}
friend bool operator==(const SourceLocationsContainer &first, const SourceLocationsContainer &second)
{
return first.m_sourceLocationContainers == second.m_sourceLocationContainers;
}
SourceLocationsContainer clone() const
{
return *this;
}
std::vector<SourceLocationContainer> m_sourceLocationContainers;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const SourceLocationsContainer &container);
} // namespace ClangBackEnd

View File

@@ -1,54 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "sourcerangecontainer.h"
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const SourceRangeContainer &container)
{
debug.nospace() << "SourceRangeContainer("
<< container.start << ", "
<< container.end
<< ")";
return debug;
}
QDebug operator<<(QDebug debug, const QVector<SourceRangeContainer> &containers)
{
debug.nospace() << "{";
for (int i = 0; i < containers.size(); i++) {
debug.nospace() << containers[i];
if (i < containers.size() - 1)
debug.nospace() << ", ";
}
debug.nospace() << "}";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,90 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "sourcelocationcontainer.h"
#include <QDataStream>
namespace ClangBackEnd {
class SourceRangeContainer
{
public:
SourceRangeContainer() = default;
SourceRangeContainer(SourceLocationContainer start,
SourceLocationContainer end)
: start(start),
end(end)
{
}
bool contains(int line, int column) const
{
if (line < start.line || line > end.line)
return false;
if (line == start.line && column < start.column)
return false;
if (line == end.line && column > end.column)
return false;
return true;
}
bool contains(const SourceLocationContainer &sourceLocation) const
{
return contains(sourceLocation.line, sourceLocation.column);
}
friend QDataStream &operator<<(QDataStream &out, const SourceRangeContainer &container)
{
out << container.start;
out << container.end;
return out;
}
friend QDataStream &operator>>(QDataStream &in, SourceRangeContainer &container)
{
in >> container.start;
in >> container.end;
return in;
}
friend bool operator==(const SourceRangeContainer &first, const SourceRangeContainer &second)
{
return first.start == second.start && first.end == second.end;
}
public:
SourceLocationContainer start;
SourceLocationContainer end;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const SourceRangeContainer &container);
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const QVector<SourceRangeContainer> &container);
} // namespace ClangBackEnd

View File

@@ -1,114 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "tokeninfocontainer.h"
#include <QDebug>
namespace ClangBackEnd {
#define RETURN_TEXT_FOR_CASE(enumValue) case HighlightingType::enumValue: return #enumValue
static const char *highlightingTypeToCStringLiteral(HighlightingType type)
{
switch (type) {
RETURN_TEXT_FOR_CASE(Invalid);
RETURN_TEXT_FOR_CASE(Comment);
RETURN_TEXT_FOR_CASE(Keyword);
RETURN_TEXT_FOR_CASE(StringLiteral);
RETURN_TEXT_FOR_CASE(NumberLiteral);
RETURN_TEXT_FOR_CASE(Function);
RETURN_TEXT_FOR_CASE(VirtualFunction);
RETURN_TEXT_FOR_CASE(Type);
RETURN_TEXT_FOR_CASE(LocalVariable);
RETURN_TEXT_FOR_CASE(GlobalVariable);
RETURN_TEXT_FOR_CASE(Field);
RETURN_TEXT_FOR_CASE(Enumeration);
RETURN_TEXT_FOR_CASE(Operator);
RETURN_TEXT_FOR_CASE(OverloadedOperator);
RETURN_TEXT_FOR_CASE(Preprocessor);
RETURN_TEXT_FOR_CASE(Label);
RETURN_TEXT_FOR_CASE(FunctionDefinition);
RETURN_TEXT_FOR_CASE(OutputArgument);
RETURN_TEXT_FOR_CASE(PreprocessorDefinition);
RETURN_TEXT_FOR_CASE(PreprocessorExpansion);
RETURN_TEXT_FOR_CASE(Punctuation);
RETURN_TEXT_FOR_CASE(Namespace);
RETURN_TEXT_FOR_CASE(Class);
RETURN_TEXT_FOR_CASE(Struct);
RETURN_TEXT_FOR_CASE(Enum);
RETURN_TEXT_FOR_CASE(Union);
RETURN_TEXT_FOR_CASE(TypeAlias);
RETURN_TEXT_FOR_CASE(Typedef);
RETURN_TEXT_FOR_CASE(QtProperty);
RETURN_TEXT_FOR_CASE(ObjectiveCClass);
RETURN_TEXT_FOR_CASE(ObjectiveCCategory);
RETURN_TEXT_FOR_CASE(ObjectiveCProtocol);
RETURN_TEXT_FOR_CASE(ObjectiveCInterface);
RETURN_TEXT_FOR_CASE(ObjectiveCImplementation);
RETURN_TEXT_FOR_CASE(ObjectiveCProperty);
RETURN_TEXT_FOR_CASE(ObjectiveCMethod);
RETURN_TEXT_FOR_CASE(PrimitiveType);
RETURN_TEXT_FOR_CASE(Declaration);
RETURN_TEXT_FOR_CASE(TemplateTypeParameter);
RETURN_TEXT_FOR_CASE(TemplateTemplateParameter);
default: return "UnhandledHighlightingType";
}
}
#undef RETURN_TEXT_FOR_CASE
QDebug operator<<(QDebug debug, const ExtraInfo &extraInfo)
{
debug.nospace() << "ExtraInfo("
<< extraInfo.token << ", "
<< extraInfo.typeSpelling << ", "
<< extraInfo.semanticParentTypeSpelling << ", "
<< extraInfo.cursorRange << ", "
<< extraInfo.lexicalParentIndex << ", "
<< static_cast<uint>(extraInfo.accessSpecifier) << ", "
<< static_cast<uint>(extraInfo.storageClass) << ", "
<< extraInfo.identifier << ", "
<< extraInfo.includeDirectivePath << ", "
<< extraInfo.declaration << ", "
<< extraInfo.definition << ", "
<< extraInfo.signal << ", "
<< extraInfo.slot << ", "
<< ")";
return debug;
}
QDebug operator<<(QDebug debug, const TokenInfoContainer &container)
{
debug.nospace() << "TokenInfosContainer("
<< container.line << ", "
<< container.column << ", "
<< container.length << ", "
<< highlightingTypeToCStringLiteral(container.types.mainHighlightingType) << ", "
<< container.extraInfo
<< ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,344 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "clangsupport_global.h"
#include "sourcerangecontainer.h"
#include "utf8string.h"
#include <QDataStream>
#include <bitset>
namespace ClangBackEnd {
inline QDataStream &operator<<(QDataStream &out, HighlightingType highlightingType);
inline QDataStream &operator<<(QDataStream &out, HighlightingTypes highlightingTypes);
inline QDataStream &operator>>(QDataStream &in, HighlightingType &highlightingType);
inline QDataStream &operator>>(QDataStream &in, HighlightingTypes &highlightingTypes);
inline bool operator==(const MixinHighlightingTypes &first, const MixinHighlightingTypes &second);
inline bool operator==(const HighlightingTypes &first, const HighlightingTypes &second);
using ByteSizeBitset = std::bitset<8>;
inline QDataStream &operator<<(QDataStream &out, ByteSizeBitset bits);
inline QDataStream &operator>>(QDataStream &in, ByteSizeBitset &bits);
struct ExtraInfo
{
ExtraInfo()
: identifier(false)
, includeDirectivePath(false)
, declaration(false)
, definition(false)
, signal(false)
, slot(false)
{
}
ExtraInfo(Utf8String token, Utf8String typeSpelling,
Utf8String semanticParentTypeSpelling, SourceRangeContainer cursorRange,
int lexicalParentIndex, AccessSpecifier accessSpecifier, StorageClass storageClass,
bool isIdentifier, bool isInclusion, bool isDeclaration, bool isDefinition,
bool isSignal, bool isSlot)
: token(token)
, typeSpelling(typeSpelling)
, semanticParentTypeSpelling(semanticParentTypeSpelling)
, cursorRange(cursorRange)
, lexicalParentIndex(lexicalParentIndex)
, accessSpecifier(accessSpecifier)
, storageClass(storageClass)
, identifier(isIdentifier)
, includeDirectivePath(isInclusion)
, declaration(isDeclaration)
, definition(isDefinition)
, signal(isSignal)
, slot(isSlot)
{
}
Utf8String token;
Utf8String typeSpelling;
Utf8String semanticParentTypeSpelling;
SourceRangeContainer cursorRange;
int lexicalParentIndex = -1;
AccessSpecifier accessSpecifier = AccessSpecifier::Invalid;
StorageClass storageClass = StorageClass::Invalid;
bool identifier : 1;
bool includeDirectivePath : 1;
bool declaration : 1;
bool definition : 1;
bool signal : 1;
bool slot : 1;
};
inline QDataStream &operator<<(QDataStream &out, const ExtraInfo &extraInfo);
inline QDataStream &operator>>(QDataStream &in, ExtraInfo &extraInfo);
inline bool operator==(const ExtraInfo &first, const ExtraInfo &second);
class TokenInfoContainer
{
public:
TokenInfoContainer() = default;
TokenInfoContainer(int line, int column, int length, HighlightingTypes types)
: line(line)
, column(column)
, length(length)
, types(types)
{
}
TokenInfoContainer(int line, int column, int length, HighlightingTypes types,
const ExtraInfo &extraInfo)
: line(line)
, column(column)
, length(length)
, types(types)
, extraInfo(extraInfo)
, noExtraInfo(false)
{
}
bool isInvalid() const
{
return line == 0 && column == 0 && length == 0;
}
bool isGlobalDeclaration() const
{
if (types.mixinHighlightingTypes.contains(
ClangBackEnd::HighlightingType::TemplateTypeParameter)
|| types.mixinHighlightingTypes.contains(
ClangBackEnd::HighlightingType::TemplateTemplateParameter)) {
return false;
}
return extraInfo.declaration
&& types.mainHighlightingType != HighlightingType::LocalVariable
&& types.mainHighlightingType != HighlightingType::Parameter
&& (types.mixinHighlightingTypes.contains(HighlightingType::Operator)
== extraInfo.token.startsWith("operator"));
}
friend QDataStream &operator<<(QDataStream &out, const TokenInfoContainer &container)
{
out << container.line;
out << container.column;
out << container.length;
out << container.types;
out << container.noExtraInfo;
if (container.noExtraInfo)
return out;
out << container.extraInfo;
return out;
}
friend QDataStream &operator>>(QDataStream &in, TokenInfoContainer &container)
{
in >> container.line;
in >> container.column;
in >> container.length;
in >> container.types;
in >> container.noExtraInfo;
if (container.noExtraInfo)
return in;
in >> container.extraInfo;
return in;
}
friend bool operator==(const TokenInfoContainer &first, const TokenInfoContainer &second)
{
return first.line == second.line
&& first.column == second.column
&& first.length == second.length
&& first.types == second.types
&& first.noExtraInfo == second.noExtraInfo
&& first.extraInfo == second.extraInfo;
}
int line = 0;
int column = 0;
int length = 0;
HighlightingTypes types;
ExtraInfo extraInfo;
bool noExtraInfo = true;
};
inline QDataStream &operator<<(QDataStream &out, const ExtraInfo &extraInfo)
{
out << extraInfo.token;
out << extraInfo.typeSpelling;
out << extraInfo.semanticParentTypeSpelling;
out << extraInfo.cursorRange;
out << extraInfo.lexicalParentIndex;
out << static_cast<uint>(extraInfo.accessSpecifier);
out << static_cast<uint>(extraInfo.storageClass);
out << extraInfo.identifier;
out << extraInfo.includeDirectivePath;
out << extraInfo.declaration;
out << extraInfo.definition;
out << extraInfo.signal;
out << extraInfo.slot;
return out;
}
inline QDataStream &operator>>(QDataStream &in, ExtraInfo &extraInfo)
{
in >> extraInfo.token;
in >> extraInfo.typeSpelling;
in >> extraInfo.semanticParentTypeSpelling;
in >> extraInfo.cursorRange;
in >> extraInfo.lexicalParentIndex;
uint accessSpecifier;
uint storageClass;
bool isIdentifier;
bool isInclusion;
bool isDeclaration;
bool isDefinition;
bool isSignal;
bool isSlot;
in >> accessSpecifier;
in >> storageClass;
in >> isIdentifier;
in >> isInclusion;
in >> isDeclaration;
in >> isDefinition;
in >> isSignal;
in >> isSlot;
extraInfo.accessSpecifier = static_cast<AccessSpecifier>(accessSpecifier);
extraInfo.storageClass = static_cast<StorageClass>(storageClass);
extraInfo.identifier = isIdentifier;
extraInfo.includeDirectivePath = isInclusion;
extraInfo.declaration = isDeclaration;
extraInfo.definition = isDefinition;
extraInfo.signal = isSignal;
extraInfo.slot = isSlot;
return in;
}
inline bool operator==(const ExtraInfo &first, const ExtraInfo &second)
{
return first.token == second.token
&& first.typeSpelling == second.typeSpelling
&& first.semanticParentTypeSpelling == second.semanticParentTypeSpelling
&& first.cursorRange == second.cursorRange
&& first.lexicalParentIndex == second.lexicalParentIndex
&& first.accessSpecifier == second.accessSpecifier
&& first.storageClass == second.storageClass
&& first.identifier == second.identifier
&& first.includeDirectivePath == second.includeDirectivePath
&& first.declaration == second.declaration
&& first.definition == second.definition
&& first.signal == second.signal
&& first.slot == second.slot;
}
inline QDataStream &operator<<(QDataStream &out, HighlightingType highlightingType)
{
out << static_cast<quint8>(highlightingType);
return out;
}
inline QDataStream &operator<<(QDataStream &out, HighlightingTypes highlightingTypes)
{
out << highlightingTypes.mainHighlightingType;
out << highlightingTypes.mixinHighlightingTypes.size();
for (HighlightingType type : highlightingTypes.mixinHighlightingTypes)
out << type;
return out;
}
inline QDataStream &operator>>(QDataStream &in, HighlightingType &highlightingType)
{
quint8 highlightingTypeInt;
in >> highlightingTypeInt;
highlightingType = static_cast<HighlightingType>(highlightingTypeInt);
return in;
}
inline QDataStream &operator>>(QDataStream &in, HighlightingTypes &highlightingTypes)
{
in >> highlightingTypes.mainHighlightingType ;
quint8 size;
in >> size;
for (int counter = 0; counter < size; ++counter) {
HighlightingType type;
in >> type;
highlightingTypes.mixinHighlightingTypes.push_back(type);
}
return in;
}
inline bool operator==(const MixinHighlightingTypes &first, const MixinHighlightingTypes &second)
{
return first.size() == second.size()
&& std::equal(first.begin(), first.end(), second.begin());
}
inline bool operator==(const HighlightingTypes &first, const HighlightingTypes &second)
{
return first.mainHighlightingType == second.mainHighlightingType
&& first.mixinHighlightingTypes == second.mixinHighlightingTypes;
}
inline QDataStream &operator<<(QDataStream &out, ByteSizeBitset bits)
{
// Narrow unsigned long to uint8_t
out << static_cast<uint8_t>(bits.to_ulong());
return out;
}
inline QDataStream &operator>>(QDataStream &in, ByteSizeBitset &bits)
{
uint8_t byteValue;
in >> byteValue;
bits = ByteSizeBitset(byteValue);
return in;
}
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const TokenInfoContainer &container);
} // namespace ClangBackEnd

View File

@@ -1,65 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "tooltipinfo.h"
#include <QDebug>
namespace ClangBackEnd {
#define RETURN_TEXT_FOR_CASE(enumValue) case ToolTipInfo::enumValue: return #enumValue
const char *qdocCategoryToString(ToolTipInfo::QdocCategory category)
{
switch (category) {
RETURN_TEXT_FOR_CASE(Unknown);
RETURN_TEXT_FOR_CASE(ClassOrNamespace);
RETURN_TEXT_FOR_CASE(Enum);
RETURN_TEXT_FOR_CASE(Typedef);
RETURN_TEXT_FOR_CASE(Macro);
RETURN_TEXT_FOR_CASE(Brief);
RETURN_TEXT_FOR_CASE(Function);
}
return "UnhandledQdocCategory";
}
#undef RETURN_TEXT_FOR_CASE
QDebug operator<<(QDebug debug, const ToolTipInfo &message)
{
debug.nospace() << "ToolTipInfo(";
debug.nospace() << message.text << ", ";
debug.nospace() << message.briefComment << ", ";
debug.nospace() << message.qdocIdCandidates << ", ";
debug.nospace() << message.qdocMark << ", ";
debug.nospace() << qdocCategoryToString(message.qdocCategory) << ", ";
debug.nospace() << message.sizeInBytes << ", ";
debug.nospace() << ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,113 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "utf8string.h"
#include <utf8stringvector.h>
#include <QVariant>
#include "clangsupport_global.h"
namespace ClangBackEnd {
class ToolTipInfo
{
public:
enum QdocCategory : quint8 {
Unknown,
ClassOrNamespace,
Enum,
Typedef,
Macro,
Brief,
Function,
};
public:
ToolTipInfo() = default;
ToolTipInfo(const Utf8String &text) : text(text) {}
friend QDataStream &operator<<(QDataStream &out, const ToolTipInfo &message)
{
out << message.text;
out << message.briefComment;
out << message.qdocIdCandidates;
out << message.qdocMark;
out << static_cast<quint8>(message.qdocCategory);
out << message.value;
out << message.sizeInBytes;
return out;
}
friend QDataStream &operator>>(QDataStream &in, ToolTipInfo &message)
{
quint8 qdocCategory;
in >> message.text;
in >> message.briefComment;
in >> message.qdocIdCandidates;
in >> message.qdocMark;
in >> qdocCategory;
in >> message.value;
in >> message.sizeInBytes;
message.qdocCategory = static_cast<QdocCategory>(qdocCategory);
return in;
}
friend bool operator==(const ToolTipInfo &first, const ToolTipInfo &second)
{
return first.text == second.text
&& first.briefComment == second.briefComment
&& first.qdocIdCandidates == second.qdocIdCandidates
&& first.qdocMark == second.qdocMark
&& first.qdocCategory == second.qdocCategory
&& first.value == second.value
&& first.sizeInBytes == second.sizeInBytes;
}
public:
Utf8String text;
Utf8String briefComment;
Utf8StringVector qdocIdCandidates;
Utf8String qdocMark;
QdocCategory qdocCategory = Unknown;
QVariant value;
// For class definition and for class fields.
Utf8String sizeInBytes;
};
QDebug operator<<(QDebug debug, const ToolTipInfo &message);
std::ostream &operator<<(std::ostream &os, const ToolTipInfo &message);
CLANGSUPPORT_EXPORT const char *qdocCategoryToString(ToolTipInfo::QdocCategory category);
} // namespace ClangBackEnd

View File

@@ -1,44 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "tooltipmessage.h"
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const ToolTipMessage &message)
{
debug.nospace() << "ToolTipMessage("
<< message.fileContainer
<< ", " << message.ticketNumber
<< ", " << message.toolTipInfo;
debug.nospace() << ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,82 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "filecontainer.h"
#include "tooltipinfo.h"
#include <QDataStream>
namespace ClangBackEnd {
class ToolTipMessage
{
public:
ToolTipMessage() = default;
ToolTipMessage(const FileContainer &fileContainer,
const ToolTipInfo &toolTipInfo,
quint64 ticketNumber)
: fileContainer(fileContainer)
, toolTipInfo(toolTipInfo)
, ticketNumber(ticketNumber)
{
}
friend QDataStream &operator<<(QDataStream &out, const ToolTipMessage &message)
{
out << message.fileContainer;
out << message.toolTipInfo;;
out << message.ticketNumber;
return out;
}
friend QDataStream &operator>>(QDataStream &in, ToolTipMessage &message)
{
in >> message.fileContainer;
in >> message.toolTipInfo;
in >> message.ticketNumber;
return in;
}
friend bool operator==(const ToolTipMessage &first, const ToolTipMessage &second)
{
return first.ticketNumber == second.ticketNumber
&& first.fileContainer == second.fileContainer
&& first.toolTipInfo == second.toolTipInfo;
}
public:
FileContainer fileContainer;
ToolTipInfo toolTipInfo;
quint64 ticketNumber = 0;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const ToolTipMessage &message);
DECLARE_MESSAGE(ToolTipMessage)
} // namespace ClangBackEnd

View File

@@ -1,45 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "unsavedfilesremovedmessage.h"
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const UnsavedFilesRemovedMessage &message)
{
debug.nospace() << "UnsavedFilesRemovedMessage(";
for (const FileContainer &fileContainer : message.fileContainers)
debug.nospace() << fileContainer<< ", ";
debug.nospace() << ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,70 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "filecontainer.h"
#include <QVector>
namespace ClangBackEnd {
class UnsavedFilesRemovedMessage
{
public:
UnsavedFilesRemovedMessage() = default;
UnsavedFilesRemovedMessage(const QVector<FileContainer> &fileContainers)
: fileContainers(fileContainers)
{
}
friend QDataStream &operator<<(QDataStream &out, const UnsavedFilesRemovedMessage &message)
{
out << message.fileContainers;
return out;
}
friend QDataStream &operator>>(QDataStream &in, UnsavedFilesRemovedMessage &message)
{
in >> message.fileContainers;
return in;
}
friend bool operator==(const UnsavedFilesRemovedMessage &first,
const UnsavedFilesRemovedMessage &second)
{
return first.fileContainers == second.fileContainers;
}
public:
QVector<FileContainer> fileContainers;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const UnsavedFilesRemovedMessage &message);
DECLARE_MESSAGE(UnsavedFilesRemovedMessage)
} // namespace ClangBackEnd

View File

@@ -1,45 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "unsavedfilesupdatedmessage.h"
#include <QDebug>
namespace ClangBackEnd {
QDebug operator<<(QDebug debug, const UnsavedFilesUpdatedMessage &message)
{
debug.nospace() << "UnsavedFilesUpdatedMessage(";
for (const FileContainer &fileContainer : message.fileContainers)
debug.nospace() << fileContainer<< ", ";
debug.nospace() << ")";
return debug;
}
} // namespace ClangBackEnd

View File

@@ -1,70 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#pragma once
#include "filecontainer.h"
#include <QVector>
namespace ClangBackEnd {
class UnsavedFilesUpdatedMessage
{
public:
UnsavedFilesUpdatedMessage() = default;
UnsavedFilesUpdatedMessage(const QVector<FileContainer> &fileContainers)
: fileContainers(fileContainers)
{
}
friend QDataStream &operator<<(QDataStream &out, const UnsavedFilesUpdatedMessage &message)
{
out << message.fileContainers;
return out;
}
friend QDataStream &operator>>(QDataStream &in, UnsavedFilesUpdatedMessage &message)
{
in >> message.fileContainers;
return in;
}
friend bool operator==(const UnsavedFilesUpdatedMessage &first,
const UnsavedFilesUpdatedMessage &second)
{
return first.fileContainers == second.fileContainers;
}
public:
QVector<FileContainer> fileContainers;
};
CLANGSUPPORT_EXPORT QDebug operator<<(QDebug debug, const UnsavedFilesUpdatedMessage &message);
DECLARE_MESSAGE(UnsavedFilesUpdatedMessage);
} // namespace ClangBackEnd

View File

@@ -1,58 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
****************************************************************************/
#include "utf8string.h"
#include "utf8stringvector.h"
#include <QString>
#include <QDebug>
#include <ostream>
QDebug operator<<(QDebug debug, const Utf8String &text)
{
debug << text.constData();
return debug;
}
std::ostream& operator<<(std::ostream &os, const Utf8String &utf8String)
{
using std::ostream;
os << utf8String.constData();
return os;
}
Utf8StringVector Utf8String::split(char separator) const
{
Utf8StringVector utf8Vector;
for (const QByteArray &byteArrayPart : byteArray.split(separator))
utf8Vector.append(Utf8String::fromByteArray(byteArrayPart));
return utf8Vector;
}

Some files were not shown because too many files have changed in this diff Show More