CppTools: Let BaseEditorDocumentParser acquire the mutex

...so derived classes are freed from doing this.

Change-Id: I73f3eca54be14cfd6542a466f0e9c024457bef07
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
This commit is contained in:
Nikolai Kosjar
2015-07-10 12:34:40 +02:00
parent 442bdbded2
commit 5902a62298
6 changed files with 18 additions and 18 deletions

View File

@@ -31,6 +31,7 @@
#include "baseeditordocumentparser.h"
#include "baseeditordocumentprocessor.h"
#include "cppworkingcopy.h"
#include "editordocumenthandle.h"
namespace CppTools {
@@ -44,14 +45,13 @@ namespace CppTools {
It's meant to be used in the C++ editor to get precise results by using
the "best" project part for a file.
Derived classes are expected to implement update() this way:
Derived classes are expected to implement updateHelper() this way:
\list
\li Get a copy of the configuration and the last state.
\li Acquire the protected m_updateIsRunning for the duration of update().
\li Work on the data and do whatever is necessary. At least, update
the project part with the help of determineProjectPart().
\li Ensure the new state is set before update() returns.
\li Ensure the new state is set before updateHelper() returns.
\endlist
*/
@@ -81,6 +81,12 @@ void BaseEditorDocumentParser::setConfiguration(const Configuration &configurati
m_configuration = configuration;
}
void BaseEditorDocumentParser::update(WorkingCopy workingCopy)
{
QMutexLocker locker(&m_updateIsRunning);
updateHelper(workingCopy);
}
BaseEditorDocumentParser::State BaseEditorDocumentParser::state() const
{
QMutexLocker locker(&m_stateAndConfigurationMutex);

View File

@@ -56,11 +56,10 @@ public:
virtual ~BaseEditorDocumentParser();
QString filePath() const;
Configuration configuration() const;
void setConfiguration(const Configuration &configuration);
virtual void update(WorkingCopy workingCopy) = 0;
void update(WorkingCopy workingCopy);
ProjectPart::Ptr projectPart() const;
@@ -69,7 +68,6 @@ protected:
QByteArray editorDefines;
ProjectPart::Ptr projectPart;
};
State state() const;
void setState(const State &state);
@@ -77,14 +75,15 @@ protected:
const Configuration &config,
const State &state);
mutable QMutex m_updateIsRunning;
mutable QMutex m_stateAndConfigurationMutex;
private:
const QString m_filePath;
virtual void updateHelper(WorkingCopy workingCopy) = 0;
const QString m_filePath;
Configuration m_configuration;
State m_state;
mutable QMutex m_updateIsRunning;
};
} // namespace CppTools

View File

@@ -44,10 +44,8 @@ BuiltinEditorDocumentParser::BuiltinEditorDocumentParser(const QString &filePath
qRegisterMetaType<CPlusPlus::Snapshot>("CPlusPlus::Snapshot");
}
void BuiltinEditorDocumentParser::update(WorkingCopy workingCopy)
void BuiltinEditorDocumentParser::updateHelper(WorkingCopy workingCopy)
{
QMutexLocker locker(&m_updateIsRunning);
const Configuration baseConfig = configuration();
const bool releaseSourceAndAST_ = releaseSourceAndAST();

View File

@@ -51,8 +51,6 @@ public:
bool releaseSourceAndAST() const;
void setReleaseSourceAndAST(bool release);
void update(WorkingCopy workingCopy) override;
CPlusPlus::Document::Ptr document() const;
CPlusPlus::Snapshot snapshot() const;
ProjectPart::HeaderPaths headerPaths() const;
@@ -66,6 +64,7 @@ public:
static BuiltinEditorDocumentParser *get(const QString &filePath);
private:
void updateHelper(WorkingCopy workingCopy) override;
void addFileAndDependencies(CPlusPlus::Snapshot *snapshot,
QSet<Utils::FileName> *toRemove,
const Utils::FileName &fileName) const;
@@ -80,7 +79,6 @@ private:
CPlusPlus::Snapshot snapshot;
bool forceSnapshotInvalidation = false;
};
ExtraState extraState() const;
void setExtraState(const ExtraState &extraState);