forked from qt-creator/qt-creator
ExtraCompiler: Use a hash for contents
Avoid recurring scans of the targets. From a simple test, there is usually a single target. This is mostly done for correctness. Change-Id: Ic025de0825133f1096c400278c929a7e9087c643 Reviewed-by: Ulf Hermann <ulf.hermann@theqtcompany.com>
This commit is contained in:
committed by
Orgad Shaneh
parent
b692c1379a
commit
13c3972a75
@@ -51,8 +51,8 @@ class ExtraCompilerPrivate
|
|||||||
public:
|
public:
|
||||||
const Project *project;
|
const Project *project;
|
||||||
Utils::FileName source;
|
Utils::FileName source;
|
||||||
|
QHash<Utils::FileName, QByteArray> contents;
|
||||||
Utils::FileNameList targets;
|
Utils::FileNameList targets;
|
||||||
QVector<QByteArray> contents;
|
|
||||||
QList<Task> issues;
|
QList<Task> issues;
|
||||||
QDateTime compileTime;
|
QDateTime compileTime;
|
||||||
Core::IEditor *lastEditor = 0;
|
Core::IEditor *lastEditor = 0;
|
||||||
@@ -71,7 +71,8 @@ ExtraCompiler::ExtraCompiler(const Project *project, const Utils::FileName &sour
|
|||||||
d->project = project;
|
d->project = project;
|
||||||
d->source = source;
|
d->source = source;
|
||||||
d->targets = targets;
|
d->targets = targets;
|
||||||
d->contents.resize(targets.size());
|
foreach (const Utils::FileName &target, targets)
|
||||||
|
d->contents.insert(target, QByteArray());
|
||||||
d->timer.setSingleShot(true);
|
d->timer.setSingleShot(true);
|
||||||
|
|
||||||
connect(d->project, &Project::activeTargetChanged, this, &ExtraCompiler::onActiveTargetChanged);
|
connect(d->project, &Project::activeTargetChanged, this, &ExtraCompiler::onActiveTargetChanged);
|
||||||
@@ -148,11 +149,7 @@ Utils::FileName ExtraCompiler::source() const
|
|||||||
|
|
||||||
QByteArray ExtraCompiler::content(const Utils::FileName &file) const
|
QByteArray ExtraCompiler::content(const Utils::FileName &file) const
|
||||||
{
|
{
|
||||||
for (int i = 0; i < d->targets.length(); ++i) {
|
return d->contents.value(file);
|
||||||
if (d->targets[i] == file)
|
|
||||||
return d->contents[i];
|
|
||||||
}
|
|
||||||
return QByteArray();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Utils::FileNameList ExtraCompiler::targets() const
|
Utils::FileNameList ExtraCompiler::targets() const
|
||||||
@@ -335,14 +332,12 @@ void ExtraCompilerPrivate::updateIssues()
|
|||||||
|
|
||||||
void ExtraCompiler::setContent(const Utils::FileName &file, const QByteArray &contents)
|
void ExtraCompiler::setContent(const Utils::FileName &file, const QByteArray &contents)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < d->targets.length(); ++i) {
|
auto it = d->contents.find(file);
|
||||||
if (d->targets[i] == file) {
|
if (it != d->contents.end()) {
|
||||||
if (d->contents[i] != contents) {
|
if (it.value() != contents) {
|
||||||
d->contents[i] = contents;
|
it.value() = contents;
|
||||||
emit contentsChanged(file);
|
emit contentsChanged(file);
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user