diff options
Diffstat (limited to 'src/plugins/coreplugin/locator/javascriptfilter.cpp')
-rw-r--r-- | src/plugins/coreplugin/locator/javascriptfilter.cpp | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/plugins/coreplugin/locator/javascriptfilter.cpp b/src/plugins/coreplugin/locator/javascriptfilter.cpp index 6255101dca..a4c20e7a7e 100644 --- a/src/plugins/coreplugin/locator/javascriptfilter.cpp +++ b/src/plugins/coreplugin/locator/javascriptfilter.cpp @@ -27,14 +27,16 @@ #include <QClipboard> #include <QGuiApplication> -#include <QJSEngine> +#include <QScriptEngine> +#include <QTimer> namespace Core { namespace Internal { enum JavaScriptAction { - ResetEngine = QVariant::UserType + 1 + ResetEngine = QVariant::UserType + 1, + AbortEngine }; JavaScriptFilter::JavaScriptFilter() @@ -66,12 +68,24 @@ QList<LocatorFilterEntry> JavaScriptFilter::matchesFor( if (entry.trimmed().isEmpty()) { entries.append({this, tr("Reset Engine"), QVariant(ResetEngine, nullptr)}); } else { + bool aborted = false; + + QTimer::singleShot(1000, this, [this, &aborted]() { + m_engine->abortEvaluation(); + aborted = true; + }); + const QString result = m_engine->evaluate(entry).toString(); - const QString expression = entry + " = " + result; - entries.append({this, expression, QVariant()}); - entries.append({this, tr("Copy to clipboard: %1").arg(result), result}); - entries.append({this, tr("Copy to clipboard: %1").arg(expression), expression}); + if (aborted) { + const QString message = entry + " = " + tr("Engine aborted after timeout."); + entries.append({this, message, QVariant(AbortEngine, nullptr)}); + } else { + const QString expression = entry + " = " + result; + entries.append({this, expression, QVariant()}); + entries.append({this, tr("Copy to clipboard: %1").arg(result), result}); + entries.append({this, tr("Copy to clipboard: %1").arg(expression), expression}); + } } return entries; @@ -104,7 +118,7 @@ void JavaScriptFilter::refresh(QFutureInterface<void> &future) void JavaScriptFilter::setupEngine() { - m_engine.reset(new QJSEngine); + m_engine.reset(new QScriptEngine); m_engine->evaluate( "function abs(x) { return Math.abs(x); }\n" "function acos(x) { return Math.acos(x); }\n" |