forked from qt-creator/qt-creator
Clang: Reparse only if files are changed
Includes are now watched by a file watcher. Unsaved file changes are watched too. If they are changed the translation units which depend on them are set to a state which require a reparse. Later the diagnostics of this units are collected and send back to creator. Change-Id: I2fb5c7dd6644687f22399edd8d18edd6215c9505 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
@@ -57,6 +57,7 @@ ConnectionServer::ConnectionServer(const QString &connectionName)
|
||||
|
||||
ConnectionServer::~ConnectionServer()
|
||||
{
|
||||
killTimer(aliveTimerId);
|
||||
removeServer();
|
||||
}
|
||||
|
||||
|
||||
@@ -38,11 +38,9 @@
|
||||
namespace ClangBackEnd {
|
||||
|
||||
DiagnosticsChangedMessage::DiagnosticsChangedMessage(const FileContainer &file,
|
||||
const QVector<DiagnosticContainer> &diagnostics,
|
||||
quint32 documentRevision)
|
||||
const QVector<DiagnosticContainer> &diagnostics)
|
||||
: file_(file),
|
||||
diagnostics_(diagnostics),
|
||||
documentRevision_(documentRevision)
|
||||
diagnostics_(diagnostics)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -56,16 +54,10 @@ const QVector<DiagnosticContainer> &DiagnosticsChangedMessage::diagnostics() con
|
||||
return diagnostics_;
|
||||
}
|
||||
|
||||
quint32 DiagnosticsChangedMessage::documentRevision() const
|
||||
{
|
||||
return documentRevision_;
|
||||
}
|
||||
|
||||
QDataStream &operator<<(QDataStream &out, const DiagnosticsChangedMessage &message)
|
||||
{
|
||||
out << message.file_;
|
||||
out << message.diagnostics_;
|
||||
out << message.documentRevision_;
|
||||
|
||||
return out;
|
||||
}
|
||||
@@ -74,7 +66,6 @@ QDataStream &operator>>(QDataStream &in, DiagnosticsChangedMessage &message)
|
||||
{
|
||||
in >> message.file_;
|
||||
in >> message.diagnostics_;
|
||||
in >> message.documentRevision_;
|
||||
|
||||
return in;
|
||||
}
|
||||
@@ -94,8 +85,7 @@ bool operator<(const DiagnosticsChangedMessage &first, const DiagnosticsChangedM
|
||||
QDebug operator<<(QDebug debug, const DiagnosticsChangedMessage &message)
|
||||
{
|
||||
debug.nospace() << "DiagnosticsChangedMessage("
|
||||
<< message.file_ << QStringLiteral(", ")
|
||||
<< message.documentRevision_
|
||||
<< message.file_
|
||||
<< ")";
|
||||
|
||||
return debug;
|
||||
|
||||
@@ -51,17 +51,14 @@ class CMBIPC_EXPORT DiagnosticsChangedMessage
|
||||
public:
|
||||
DiagnosticsChangedMessage() = default;
|
||||
DiagnosticsChangedMessage(const FileContainer &file,
|
||||
const QVector<DiagnosticContainer> &diagnostics,
|
||||
quint32 documentRevision);
|
||||
const QVector<DiagnosticContainer> &diagnostics);
|
||||
|
||||
const FileContainer &file() const;
|
||||
const QVector<DiagnosticContainer> &diagnostics() const;
|
||||
quint32 documentRevision() const;
|
||||
|
||||
private:
|
||||
FileContainer file_;
|
||||
QVector<DiagnosticContainer> diagnostics_;
|
||||
quint32 documentRevision_;
|
||||
};
|
||||
|
||||
CMBIPC_EXPORT QDataStream &operator<<(QDataStream &out, const DiagnosticsChangedMessage &message);
|
||||
|
||||
@@ -39,17 +39,29 @@
|
||||
|
||||
namespace ClangBackEnd {
|
||||
|
||||
FileContainer::FileContainer(const Utf8String &fileName,
|
||||
FileContainer::FileContainer(const Utf8String &filePath,
|
||||
const Utf8String &projectPartId,
|
||||
const Utf8String &unsavedFileContent,
|
||||
bool hasUnsavedFileContent)
|
||||
: filePath_(fileName),
|
||||
bool hasUnsavedFileContent,
|
||||
quint32 documentRevision)
|
||||
: filePath_(filePath),
|
||||
projectPartId_(projectPartId),
|
||||
unsavedFileContent_(unsavedFileContent),
|
||||
documentRevision_(documentRevision),
|
||||
hasUnsavedFileContent_(hasUnsavedFileContent)
|
||||
{
|
||||
}
|
||||
|
||||
FileContainer::FileContainer(const Utf8String &filePath,
|
||||
const Utf8String &projectPartId,
|
||||
quint32 documentRevision)
|
||||
: filePath_(filePath),
|
||||
projectPartId_(projectPartId),
|
||||
documentRevision_(documentRevision),
|
||||
hasUnsavedFileContent_(false)
|
||||
{
|
||||
}
|
||||
|
||||
const Utf8String &FileContainer::filePath() const
|
||||
{
|
||||
return filePath_;
|
||||
@@ -70,11 +82,17 @@ bool FileContainer::hasUnsavedFileContent() const
|
||||
return hasUnsavedFileContent_;
|
||||
}
|
||||
|
||||
quint32 FileContainer::documentRevision() const
|
||||
{
|
||||
return documentRevision_;
|
||||
}
|
||||
|
||||
QDataStream &operator<<(QDataStream &out, const FileContainer &container)
|
||||
{
|
||||
out << container.filePath_;
|
||||
out << container.projectPartId_;
|
||||
out << container.unsavedFileContent_;
|
||||
out << container.documentRevision_;
|
||||
out << container.hasUnsavedFileContent_;
|
||||
|
||||
return out;
|
||||
@@ -85,6 +103,7 @@ QDataStream &operator>>(QDataStream &in, FileContainer &container)
|
||||
in >> container.filePath_;
|
||||
in >> container.projectPartId_;
|
||||
in >> container.unsavedFileContent_;
|
||||
in >> container.documentRevision_;
|
||||
in >> container.hasUnsavedFileContent_;
|
||||
|
||||
return in;
|
||||
@@ -106,9 +125,9 @@ bool operator<(const FileContainer &first, const FileContainer &second)
|
||||
QDebug operator<<(QDebug debug, const FileContainer &container)
|
||||
{
|
||||
debug.nospace() << "FileContainer("
|
||||
<< container.filePath()
|
||||
<< ", "
|
||||
<< container.projectPartId();
|
||||
<< container.filePath() << ", "
|
||||
<< container.projectPartId() << ", "
|
||||
<< container.documentRevision();
|
||||
|
||||
if (container.hasUnsavedFileContent()) {
|
||||
const Utf8String fileWithContent = debugWriteFileForInspection(
|
||||
@@ -126,9 +145,9 @@ QDebug operator<<(QDebug debug, const FileContainer &container)
|
||||
void PrintTo(const FileContainer &container, ::std::ostream* os)
|
||||
{
|
||||
*os << "FileContainer("
|
||||
<< container.filePath().constData()
|
||||
<< ", "
|
||||
<< container.projectPartId().constData();
|
||||
<< container.filePath().constData() << ", "
|
||||
<< container.projectPartId().constData() << ", "
|
||||
<< container.documentRevision();
|
||||
|
||||
if (container.hasUnsavedFileContent())
|
||||
*os << ", "
|
||||
|
||||
@@ -50,17 +50,23 @@ public:
|
||||
FileContainer(const Utf8String &filePath,
|
||||
const Utf8String &projectPartId,
|
||||
const Utf8String &unsavedFileContent = Utf8String(),
|
||||
bool hasUnsavedFileContent = false);
|
||||
bool hasUnsavedFileContent = false,
|
||||
quint32 documentRevision = 0);
|
||||
FileContainer(const Utf8String &filePath,
|
||||
const Utf8String &projectPartId,
|
||||
quint32 documentRevision);
|
||||
|
||||
const Utf8String &filePath() const;
|
||||
const Utf8String &projectPartId() const;
|
||||
const Utf8String &unsavedFileContent() const;
|
||||
bool hasUnsavedFileContent() const;
|
||||
quint32 documentRevision() const;
|
||||
|
||||
private:
|
||||
Utf8String filePath_;
|
||||
Utf8String projectPartId_;
|
||||
Utf8String unsavedFileContent_;
|
||||
quint32 documentRevision_;
|
||||
bool hasUnsavedFileContent_ = false;
|
||||
};
|
||||
|
||||
|
||||
@@ -35,10 +35,8 @@
|
||||
|
||||
namespace ClangBackEnd {
|
||||
|
||||
RequestDiagnosticsMessage::RequestDiagnosticsMessage(const FileContainer &file,
|
||||
quint32 documentRevision)
|
||||
: file_(file),
|
||||
documentRevision_(documentRevision)
|
||||
RequestDiagnosticsMessage::RequestDiagnosticsMessage(const FileContainer &file)
|
||||
: file_(file)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -47,15 +45,9 @@ const FileContainer RequestDiagnosticsMessage::file() const
|
||||
return file_;
|
||||
}
|
||||
|
||||
quint32 RequestDiagnosticsMessage::documentRevision() const
|
||||
{
|
||||
return documentRevision_;
|
||||
}
|
||||
|
||||
QDataStream &operator<<(QDataStream &out, const RequestDiagnosticsMessage &message)
|
||||
{
|
||||
out << message.file_;
|
||||
out << message.documentRevision_;
|
||||
|
||||
return out;
|
||||
}
|
||||
@@ -63,14 +55,13 @@ QDataStream &operator<<(QDataStream &out, const RequestDiagnosticsMessage &messa
|
||||
QDataStream &operator>>(QDataStream &in, RequestDiagnosticsMessage &message)
|
||||
{
|
||||
in >> message.file_;
|
||||
in >> message.documentRevision_;
|
||||
|
||||
return in;
|
||||
}
|
||||
|
||||
bool operator==(const RequestDiagnosticsMessage &first, const RequestDiagnosticsMessage &second)
|
||||
{
|
||||
return first.file_ == second.file_ && first.documentRevision_ == second.documentRevision_;
|
||||
return first.file_ == second.file_;
|
||||
}
|
||||
|
||||
bool operator<(const RequestDiagnosticsMessage &first, const RequestDiagnosticsMessage &second)
|
||||
@@ -81,8 +72,7 @@ bool operator<(const RequestDiagnosticsMessage &first, const RequestDiagnosticsM
|
||||
QDebug operator<<(QDebug debug, const RequestDiagnosticsMessage &message)
|
||||
{
|
||||
debug.nospace() << "RequestDiagnosticsMessage("
|
||||
<< message.file() << ", "
|
||||
<< message.documentRevision()
|
||||
<< message.file()
|
||||
<< ")";
|
||||
|
||||
return debug;
|
||||
|
||||
@@ -46,10 +46,9 @@ class CMBIPC_EXPORT RequestDiagnosticsMessage
|
||||
|
||||
public:
|
||||
RequestDiagnosticsMessage() = default;
|
||||
RequestDiagnosticsMessage(const FileContainer &file, quint32 documentRevision);
|
||||
RequestDiagnosticsMessage(const FileContainer &file);
|
||||
|
||||
const FileContainer file() const;
|
||||
quint32 documentRevision() const;
|
||||
|
||||
private:
|
||||
FileContainer file_;
|
||||
|
||||
Reference in New Issue
Block a user