From e9984c72f0f95bdead21094cf411d869e2bb23b3 Mon Sep 17 00:00:00 2001 From: ksuprynowicz Date: Tue, 23 Aug 2022 00:22:59 +0200 Subject: [PATCH] Added QTimer* script data type and some nullptr checks --- interface/src/Application.cpp | 3 +++ interface/src/LocationBookmarks.cpp | 1 + interface/src/networking/CloseEventSender.cpp | 1 + .../src/scripting/WindowScriptingInterface.cpp | 1 + libraries/audio/src/ScriptAudioInjector.cpp | 3 +-- libraries/auto-updater/src/AutoUpdater.cpp | 1 + libraries/baking/src/JSBaker.cpp | 1 + libraries/baking/src/ModelBaker.cpp | 1 + libraries/baking/src/TextureBaker.cpp | 1 + .../src/controllers/ScriptingInterface.cpp | 3 +-- .../src/ModelScriptingInterface.cpp | 1 + libraries/networking/src/AssetClient.cpp | 7 ++++--- libraries/render-utils/src/text/Font.cpp | 1 + libraries/script-engine/src/ScriptCache.cpp | 1 + libraries/script-engine/src/ScriptEngines.cpp | 1 + libraries/script-engine/src/ScriptValueUtils.cpp | 13 +++++++++++-- libraries/script-engine/src/ScriptValueUtils.h | 5 +++++ libraries/script-engine/src/WebSocketClass.cpp | 3 +-- libraries/ui/src/ui/TabletScriptingInterface.cpp | 1 + libraries/ui/src/ui/ToolbarScriptingInterface.cpp | 2 ++ tools/oven/src/ui/ModesWidget.cpp | 3 +++ 21 files changed, 43 insertions(+), 11 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index e995194608..73fdae54b7 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -7989,6 +7989,7 @@ void Application::addAssetToWorldFromURL(QString url) { void Application::addAssetToWorldFromURLRequestFinished() { auto request = qobject_cast(sender()); + Q_ASSERT(request != nullptr); auto url = request->getUrl().toString(); auto result = request->getResult(); @@ -9357,6 +9358,7 @@ void Application::setActiveDisplayPlugin(const QString& pluginName) { void Application::handleLocalServerConnection() const { auto server = qobject_cast(sender()); + Q_ASSERT(server != nullptr); qCDebug(interfaceapp) << "Got connection on local server from additional instance - waiting for parameters"; @@ -9370,6 +9372,7 @@ void Application::handleLocalServerConnection() const { void Application::readArgumentsFromLocalSocket() const { auto socket = qobject_cast(sender()); + Q_ASSERT(socket != nullptr); auto message = socket->readAll(); socket->deleteLater(); diff --git a/interface/src/LocationBookmarks.cpp b/interface/src/LocationBookmarks.cpp index fda70d379d..4a9689bb27 100644 --- a/interface/src/LocationBookmarks.cpp +++ b/interface/src/LocationBookmarks.cpp @@ -73,6 +73,7 @@ QString LocationBookmarks::getAddress(const QString& bookmarkName) { void LocationBookmarks::teleportToBookmark() { QAction* action = qobject_cast(sender()); + Q_ASSERT(action != nullptr); QString address = action->data().toString(); DependencyManager::get()->handleLookupString(address); } diff --git a/interface/src/networking/CloseEventSender.cpp b/interface/src/networking/CloseEventSender.cpp index 9cfcda108a..78937ffc85 100644 --- a/interface/src/networking/CloseEventSender.cpp +++ b/interface/src/networking/CloseEventSender.cpp @@ -74,6 +74,7 @@ void CloseEventSender::handleQuitEventFinished() { _hasFinishedQuitEvent = true; auto reply = qobject_cast(sender()); + Q_ASSERT(reply != nullptr); if (reply->error() == QNetworkReply::NoError) { qCDebug(networking) << "Quit event sent successfully"; } else { diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index f8443a2da6..13af6f5386 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -604,6 +604,7 @@ void WindowScriptingInterface::closeMessageBox(int id) { void WindowScriptingInterface::onMessageBoxSelected(int button) { auto messageBox = qobject_cast(sender()); + Q_ASSERT(messageBox != nullptr); auto keys = _messageBoxes.keys(messageBox); if (keys.length() > 0) { auto id = keys[0]; // Should be just one message box. diff --git a/libraries/audio/src/ScriptAudioInjector.cpp b/libraries/audio/src/ScriptAudioInjector.cpp index eb1cb1dd0a..6e1a1c4796 100644 --- a/libraries/audio/src/ScriptAudioInjector.cpp +++ b/libraries/audio/src/ScriptAudioInjector.cpp @@ -34,8 +34,7 @@ ScriptValue injectorToScriptValue(ScriptEngine* engine, ScriptAudioInjector* con } bool injectorFromScriptValue(const ScriptValue& object, ScriptAudioInjector*& out) { - out = qobject_cast(object.toQObject()); - return true; + return (out = qobject_cast(object.toQObject())) != nullptr; } ScriptAudioInjector::ScriptAudioInjector(const AudioInjectorPointer& injector) : diff --git a/libraries/auto-updater/src/AutoUpdater.cpp b/libraries/auto-updater/src/AutoUpdater.cpp index 280fbc0328..95a1cb7245 100644 --- a/libraries/auto-updater/src/AutoUpdater.cpp +++ b/libraries/auto-updater/src/AutoUpdater.cpp @@ -58,6 +58,7 @@ void AutoUpdater::getLatestVersionData() { void AutoUpdater::parseLatestVersionData() { QNetworkReply* sender = qobject_cast(QObject::sender()); + Q_ASSERT(sender != nullptr); QXmlStreamReader xml(sender); diff --git a/libraries/baking/src/JSBaker.cpp b/libraries/baking/src/JSBaker.cpp index bd93ac313d..19e9a8c73f 100644 --- a/libraries/baking/src/JSBaker.cpp +++ b/libraries/baking/src/JSBaker.cpp @@ -77,6 +77,7 @@ void JSBaker::loadScript() { void JSBaker::handleScriptNetworkReply() { auto requestReply = qobject_cast(sender()); + Q_ASSERT(requestReply != nullptr); if (requestReply->error() == QNetworkReply::NoError) { qCDebug(js_baking) << "Downloaded script" << _jsURL; diff --git a/libraries/baking/src/ModelBaker.cpp b/libraries/baking/src/ModelBaker.cpp index 936208ca42..3b6e7c42a5 100644 --- a/libraries/baking/src/ModelBaker.cpp +++ b/libraries/baking/src/ModelBaker.cpp @@ -177,6 +177,7 @@ void ModelBaker::saveSourceModel() { void ModelBaker::handleModelNetworkReply() { auto requestReply = qobject_cast(sender()); + Q_ASSERT(requestReply != nullptr); if (requestReply->error() == QNetworkReply::NoError) { qCDebug(model_baking) << "Downloaded" << _modelURL; diff --git a/libraries/baking/src/TextureBaker.cpp b/libraries/baking/src/TextureBaker.cpp index 6f18a5da40..028eb45f4d 100644 --- a/libraries/baking/src/TextureBaker.cpp +++ b/libraries/baking/src/TextureBaker.cpp @@ -114,6 +114,7 @@ void TextureBaker::loadTexture() { void TextureBaker::handleTextureNetworkReply() { auto requestReply = qobject_cast(sender()); + Q_ASSERT(requestReply != nullptr); if (requestReply->error() == QNetworkReply::NoError) { qCDebug(model_baking) << "Downloaded texture" << _textureURL; diff --git a/libraries/controllers/src/controllers/ScriptingInterface.cpp b/libraries/controllers/src/controllers/ScriptingInterface.cpp index 6884552762..cd51906ea6 100644 --- a/libraries/controllers/src/controllers/ScriptingInterface.cpp +++ b/libraries/controllers/src/controllers/ScriptingInterface.cpp @@ -37,8 +37,7 @@ ScriptValue inputControllerToScriptValue(ScriptEngine* engine, controller::Input } bool inputControllerFromScriptValue(const ScriptValue& object, controller::InputController*& out) { - out = qobject_cast(object.toQObject()); - return true; + return (out = qobject_cast(object.toQObject())) != nullptr; } STATIC_SCRIPT_TYPES_INITIALIZER((+[](ScriptManager* manager) { diff --git a/libraries/entities-renderer/src/ModelScriptingInterface.cpp b/libraries/entities-renderer/src/ModelScriptingInterface.cpp index 696c5c73f4..5ec951378e 100644 --- a/libraries/entities-renderer/src/ModelScriptingInterface.cpp +++ b/libraries/entities-renderer/src/ModelScriptingInterface.cpp @@ -27,6 +27,7 @@ STATIC_SCRIPT_INITIALIZER(+[](ScriptManager* manager) { ModelScriptingInterface::ModelScriptingInterface(QObject* parent) : QObject(parent) { _modelScriptEngine = qobject_cast(parent)->engine(); + Q_ASSERT(_modelScriptEngine != nullptr); scriptRegisterSequenceMetaType>(_modelScriptEngine.get()); scriptRegisterMetaType(_modelScriptEngine.get()); diff --git a/libraries/networking/src/AssetClient.cpp b/libraries/networking/src/AssetClient.cpp index dfa2bf8f35..54c7bd9f3d 100644 --- a/libraries/networking/src/AssetClient.cpp +++ b/libraries/networking/src/AssetClient.cpp @@ -78,8 +78,10 @@ void AssetClient::initCaching() { << "(size:" << MAXIMUM_CACHE_SIZE / BYTES_PER_GIGABYTES << "GB)"; } else { auto cache = qobject_cast(networkAccessManager.cache()); - qInfo() << "ResourceManager disk cache already setup at" << cache->cacheDirectory() - << "(size:" << cache->maximumCacheSize() / BYTES_PER_GIGABYTES << "GB)"; + if (cache) { + qInfo() << "ResourceManager disk cache already setup at" << cache->cacheDirectory() + << "(size:" << cache->maximumCacheSize() / BYTES_PER_GIGABYTES << "GB)"; + } } } @@ -294,7 +296,6 @@ void AssetClient::cacheInfoRequest(QObject* reciever, QString slot) { return; } - if (auto* cache = qobject_cast(NetworkAccessManager::getInstance().cache())) { QMetaObject::invokeMethod(reciever, slot.toStdString().data(), Qt::QueuedConnection, Q_ARG(QString, cache->cacheDirectory()), diff --git a/libraries/render-utils/src/text/Font.cpp b/libraries/render-utils/src/text/Font.cpp index fb213c53b2..4ba7eda5ee 100644 --- a/libraries/render-utils/src/text/Font.cpp +++ b/libraries/render-utils/src/text/Font.cpp @@ -124,6 +124,7 @@ Font::Pointer Font::load(const QString& family) { void Font::handleFontNetworkReply() { auto requestReply = qobject_cast(sender()); + Q_ASSERT(requestReply != nullptr); if (requestReply->error() == QNetworkReply::NoError) { setLoaded(true); diff --git a/libraries/script-engine/src/ScriptCache.cpp b/libraries/script-engine/src/ScriptCache.cpp index bd2e5dfa78..f7feeb1841 100644 --- a/libraries/script-engine/src/ScriptCache.cpp +++ b/libraries/script-engine/src/ScriptCache.cpp @@ -134,6 +134,7 @@ void ScriptCache::scriptContentAvailable(int maxRetries) { qCDebug(scriptengine) << "ScriptCache::scriptContentAvailable() on thread [" << QThread::currentThread() << "] expected thread [" << thread() << "]"; #endif ResourceRequest* req = qobject_cast(sender()); + Q_ASSERT(req != nullptr); QUrl url = req->getUrl(); QString scriptContent; diff --git a/libraries/script-engine/src/ScriptEngines.cpp b/libraries/script-engine/src/ScriptEngines.cpp index aeb2cb9336..459516f5d5 100644 --- a/libraries/script-engine/src/ScriptEngines.cpp +++ b/libraries/script-engine/src/ScriptEngines.cpp @@ -555,6 +555,7 @@ ScriptManagerPointer ScriptEngines::getScriptEngine(const QUrl& rawScriptURL) { void ScriptEngines::onScriptEngineLoaded(const QString& rawScriptURL) { UserActivityLogger::getInstance().loadedScript(rawScriptURL); ScriptManagerPointer scriptEngine = qobject_cast(sender())->shared_from_this(); + Q_ASSERT(scriptEngine != nullptr); launchScriptEngine(scriptEngine); diff --git a/libraries/script-engine/src/ScriptValueUtils.cpp b/libraries/script-engine/src/ScriptValueUtils.cpp index e22e59829b..462d263e9e 100644 --- a/libraries/script-engine/src/ScriptValueUtils.cpp +++ b/libraries/script-engine/src/ScriptValueUtils.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -68,6 +69,7 @@ void registerMetaTypes(ScriptEngine* engine) { scriptRegisterMetaType(engine); scriptRegisterMetaType(engine); scriptRegisterMetaType(engine); + scriptRegisterMetaType(engine, "QTimer*"); scriptRegisterMetaType(engine); scriptRegisterMetaType(engine); @@ -665,6 +667,14 @@ bool aaCubeFromScriptValue(const ScriptValue& object, AACube& aaCube) { return true; } +ScriptValue qTimerToScriptValue(ScriptEngine* engine, QTimer* const &in) { + return engine->newQObject(in, ScriptEngine::QtOwnership); +} + +bool qTimerFromScriptValue(const ScriptValue& object, QTimer* &out) { + return (out = qobject_cast(object.toQObject())) != nullptr; +} + bool qColorFromScriptValue(const ScriptValue& object, QColor& color) { if (object.isNumber()) { color.setRgb(object.toUInt32()); @@ -834,8 +844,7 @@ ScriptValue meshToScriptValue(ScriptEngine* engine, MeshProxy* const& in) { } bool meshFromScriptValue(const ScriptValue& value, MeshProxy*& out) { - out = qobject_cast(value.toQObject()); - return true; + return (out = qobject_cast(value.toQObject())) != nullptr; } ScriptValue meshesToScriptValue(ScriptEngine* engine, const MeshProxyList& in) { diff --git a/libraries/script-engine/src/ScriptValueUtils.h b/libraries/script-engine/src/ScriptValueUtils.h index b1e20311b6..57d4691def 100644 --- a/libraries/script-engine/src/ScriptValueUtils.h +++ b/libraries/script-engine/src/ScriptValueUtils.h @@ -174,6 +174,11 @@ class QColor; ScriptValue qColorToScriptValue(ScriptEngine* engine, const QColor& color); bool qColorFromScriptValue(const ScriptValue& object, QColor& color); +//QTimer +class QTimer; +ScriptValue qTimerToScriptValue(ScriptEngine* engine, QTimer* const &in); +bool qTimerFromScriptValue(const ScriptValue& object, QTimer* &out); + class QUrl; ScriptValue qURLToScriptValue(ScriptEngine* engine, const QUrl& url); bool qURLFromScriptValue(const ScriptValue& object, QUrl& url); diff --git a/libraries/script-engine/src/WebSocketClass.cpp b/libraries/script-engine/src/WebSocketClass.cpp index fbe2b7fc06..4e250508ad 100644 --- a/libraries/script-engine/src/WebSocketClass.cpp +++ b/libraries/script-engine/src/WebSocketClass.cpp @@ -218,8 +218,7 @@ ScriptValue webSocketToScriptValue(ScriptEngine* engine, WebSocketClass* const & } bool webSocketFromScriptValue(const ScriptValue &object, WebSocketClass* &out) { - out = qobject_cast(object.toQObject()); - return true; + return (out = qobject_cast(object.toQObject())) != nullptr; } ScriptValue wscReadyStateToScriptValue(ScriptEngine* engine, const WebSocketClass::ReadyState& readyState) { diff --git a/libraries/ui/src/ui/TabletScriptingInterface.cpp b/libraries/ui/src/ui/TabletScriptingInterface.cpp index f8a2b17821..e9e28b6c08 100644 --- a/libraries/ui/src/ui/TabletScriptingInterface.cpp +++ b/libraries/ui/src/ui/TabletScriptingInterface.cpp @@ -321,6 +321,7 @@ void TabletScriptingInterface::processTabletEvents(QObject* object, const QKeyEv void TabletScriptingInterface::processEvent(const QKeyEvent* event) { Q_ASSERT(QThread::currentThread() == qApp->thread()); TabletProxy* tablet = qobject_cast(getTablet(SYSTEM_TABLET)); + Q_ASSERT(tablet != nullptr); QObject* qmlTablet = tablet->getQmlTablet(); QObject* qmlMenu = tablet->getQmlMenu(); diff --git a/libraries/ui/src/ui/ToolbarScriptingInterface.cpp b/libraries/ui/src/ui/ToolbarScriptingInterface.cpp index 833b49de01..a245d2b703 100644 --- a/libraries/ui/src/ui/ToolbarScriptingInterface.cpp +++ b/libraries/ui/src/ui/ToolbarScriptingInterface.cpp @@ -35,6 +35,7 @@ ScriptValue toolbarToScriptValue(ScriptEngine* engine, ToolbarProxy* const &in) void toolbarFromScriptValue(const ScriptValue& value, ToolbarProxy* &out) { out = qobject_cast(value.toQObject()); + Q_ASSERT(out != nullptr); } ScriptValue toolbarButtonToScriptValue(ScriptEngine* engine, ToolbarButtonProxy* const &in) { @@ -46,6 +47,7 @@ ScriptValue toolbarButtonToScriptValue(ScriptEngine* engine, ToolbarButtonProxy* void toolbarButtonFromScriptValue(const ScriptValue& value, ToolbarButtonProxy* &out) { out = qobject_cast(value.toQObject()); + Q_ASSERT(out != nullptr); } diff --git a/tools/oven/src/ui/ModesWidget.cpp b/tools/oven/src/ui/ModesWidget.cpp index 1fdfce2c97..cc31fcbf97 100644 --- a/tools/oven/src/ui/ModesWidget.cpp +++ b/tools/oven/src/ui/ModesWidget.cpp @@ -49,6 +49,7 @@ void ModesWidget::setupUI() { void ModesWidget::showModelBakingWidget() { auto stackedWidget = qobject_cast(parentWidget()); + Q_ASSERT(stackedWidget != nullptr); // add a new widget for model baking to the stack, and switch to it stackedWidget->setCurrentIndex(stackedWidget->addWidget(new ModelBakeWidget)); @@ -56,6 +57,7 @@ void ModesWidget::showModelBakingWidget() { void ModesWidget::showDomainBakingWidget() { auto stackedWidget = qobject_cast(parentWidget()); + Q_ASSERT(stackedWidget != nullptr); // add a new widget for domain baking to the stack, and switch to it stackedWidget->setCurrentIndex(stackedWidget->addWidget(new DomainBakeWidget)); @@ -63,6 +65,7 @@ void ModesWidget::showDomainBakingWidget() { void ModesWidget::showSkyboxBakingWidget() { auto stackedWidget = qobject_cast(parentWidget()); + Q_ASSERT(stackedWidget != nullptr); // add a new widget for skybox baking to the stack, and switch to it stackedWidget->setCurrentIndex(stackedWidget->addWidget(new SkyboxBakeWidget));