ExecuteFilter: Remove the old matchesFor() implementation

Change-Id: Ib1f001f366ef78f359d7c04cf8861ae59b9d22a9
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
Jarek Kobus
2023-04-24 21:16:32 +02:00
parent a3e9fc37ba
commit ef0cc8a1d9
2 changed files with 19 additions and 57 deletions

View File

@@ -104,47 +104,15 @@ void ExecuteFilter::acceptCommand(const QString &cmd)
if (result == QMessageBox::Cancel) if (result == QMessageBox::Cancel)
return; return;
if (result == QMessageBox::No) { if (result == QMessageBox::No) {
m_taskQueue.enqueue(data); m_taskQueue.append(data);
return; return;
} }
removeProcess(); removeProcess();
} }
m_taskQueue.enqueue(data); m_taskQueue.append(data);
runHeadCommand(); runHeadCommand();
} }
QList<LocatorFilterEntry> ExecuteFilter::matchesFor(QFutureInterface<LocatorFilterEntry> &future,
const QString &entry)
{
QList<LocatorFilterEntry> results;
if (!entry.isEmpty()) { // avoid empty entry
LocatorFilterEntry filterEntry;
filterEntry.displayName = entry;
filterEntry.acceptor = [this, entry] { acceptCommand(entry); return AcceptResult(); };
results.append(filterEntry);
}
QList<LocatorFilterEntry> others;
const Qt::CaseSensitivity entryCaseSensitivity = caseSensitivity(entry);
for (const QString &cmd : std::as_const(m_commandHistory)) {
if (future.isCanceled())
break;
if (cmd == entry) // avoid repeated entry
continue;
LocatorFilterEntry filterEntry;
filterEntry.displayName = cmd;
filterEntry.acceptor = [this, cmd] { acceptCommand(cmd); return AcceptResult(); };
const int index = cmd.indexOf(entry, 0, entryCaseSensitivity);
if (index >= 0) {
filterEntry.highlightInfo = {index, int(entry.length())};
results.append(filterEntry);
} else {
others.append(filterEntry);
}
}
results.append(others);
return results;
}
void ExecuteFilter::done() void ExecuteFilter::done()
{ {
QTC_ASSERT(m_process, return); QTC_ASSERT(m_process, return);
@@ -155,7 +123,7 @@ void ExecuteFilter::done()
runHeadCommand(); runHeadCommand();
} }
void ExecuteFilter::readStandardOutput() void ExecuteFilter::readStdOutput()
{ {
QTC_ASSERT(m_process, return); QTC_ASSERT(m_process, return);
const QByteArray data = m_process->readAllRawStandardOutput(); const QByteArray data = m_process->readAllRawStandardOutput();
@@ -163,7 +131,7 @@ void ExecuteFilter::readStandardOutput()
QTextCodec::codecForLocale()->toUnicode(data.constData(), data.size(), &m_stdoutState)); QTextCodec::codecForLocale()->toUnicode(data.constData(), data.size(), &m_stdoutState));
} }
void ExecuteFilter::readStandardError() void ExecuteFilter::readStdError()
{ {
QTC_ASSERT(m_process, return); QTC_ASSERT(m_process, return);
const QByteArray data = m_process->readAllRawStandardError(); const QByteArray data = m_process->readAllRawStandardError();
@@ -174,11 +142,11 @@ void ExecuteFilter::readStandardError()
void ExecuteFilter::runHeadCommand() void ExecuteFilter::runHeadCommand()
{ {
if (!m_taskQueue.isEmpty()) { if (!m_taskQueue.isEmpty()) {
const ExecuteData &d = m_taskQueue.head(); const ExecuteData &d = m_taskQueue.first();
if (d.command.executable().isEmpty()) { if (d.command.executable().isEmpty()) {
MessageManager::writeDisrupting( MessageManager::writeDisrupting(Tr::tr("Could not find executable for \"%1\".")
Tr::tr("Could not find executable for \"%1\".").arg(d.command.executable().toUserOutput())); .arg(d.command.executable().toUserOutput()));
m_taskQueue.dequeue(); m_taskQueue.removeFirst();
runHeadCommand(); runHeadCommand();
return; return;
} }
@@ -199,8 +167,8 @@ void ExecuteFilter::createProcess()
m_process = new Process; m_process = new Process;
m_process->setEnvironment(Environment::systemEnvironment()); m_process->setEnvironment(Environment::systemEnvironment());
connect(m_process, &Process::done, this, &ExecuteFilter::done); connect(m_process, &Process::done, this, &ExecuteFilter::done);
connect(m_process, &Process::readyReadStandardOutput, this, &ExecuteFilter::readStandardOutput); connect(m_process, &Process::readyReadStandardOutput, this, &ExecuteFilter::readStdOutput);
connect(m_process, &Process::readyReadStandardError, this, &ExecuteFilter::readStandardError); connect(m_process, &Process::readyReadStandardError, this, &ExecuteFilter::readStdError);
} }
void ExecuteFilter::removeProcess() void ExecuteFilter::removeProcess()
@@ -208,7 +176,7 @@ void ExecuteFilter::removeProcess()
if (!m_process) if (!m_process)
return; return;
m_taskQueue.dequeue(); m_taskQueue.removeFirst();
m_process->deleteLater(); m_process->deleteLater();
m_process = nullptr; m_process = nullptr;
} }
@@ -231,8 +199,8 @@ QString ExecuteFilter::headCommand() const
{ {
if (m_taskQueue.isEmpty()) if (m_taskQueue.isEmpty())
return QString(); return QString();
const ExecuteData &data = m_taskQueue.head(); const ExecuteData &data = m_taskQueue.first();
return data.command.toUserOutput(); return data.command.toUserOutput();
} }
} // Core::Internal } // namespace Core::Internal

View File

@@ -7,19 +7,15 @@
#include <utils/commandline.h> #include <utils/commandline.h>
#include <QQueue>
#include <QStringList> #include <QStringList>
#include <QTextCodec> #include <QTextCodec>
namespace Utils { class Process; } namespace Utils { class Process; }
namespace Core { namespace Core::Internal {
namespace Internal {
class ExecuteFilter : public Core::ILocatorFilter class ExecuteFilter : public Core::ILocatorFilter
{ {
Q_OBJECT
struct ExecuteData struct ExecuteData
{ {
Utils::CommandLine command; Utils::CommandLine command;
@@ -29,14 +25,13 @@ class ExecuteFilter : public Core::ILocatorFilter
public: public:
ExecuteFilter(); ExecuteFilter();
~ExecuteFilter() override; ~ExecuteFilter() override;
QList<LocatorFilterEntry> matchesFor(QFutureInterface<LocatorFilterEntry> &future,
const QString &entry) override;
private: private:
LocatorMatcherTasks matchers() final; LocatorMatcherTasks matchers() final;
void acceptCommand(const QString &cmd); void acceptCommand(const QString &cmd);
void done(); void done();
void readStandardOutput(); void readStdOutput();
void readStandardError(); void readStdError();
void runHeadCommand(); void runHeadCommand();
void createProcess(); void createProcess();
@@ -47,12 +42,11 @@ private:
QString headCommand() const; QString headCommand() const;
QQueue<ExecuteData> m_taskQueue; QList<ExecuteData> m_taskQueue;
QStringList m_commandHistory; QStringList m_commandHistory;
Utils::Process *m_process = nullptr; Utils::Process *m_process = nullptr;
QTextCodec::ConverterState m_stdoutState; QTextCodec::ConverterState m_stdoutState;
QTextCodec::ConverterState m_stderrState; QTextCodec::ConverterState m_stderrState;
}; };
} // namespace Internal } // namespace Core::Internal
} // namespace Core