| @@ -379,7 +379,7 @@ public: | |||
| r.removeFromTop (20); | |||
| if (parametersComponent.get() != nullptr) | |||
| if (parametersComponent != nullptr) | |||
| parametersComponent->setBounds (r.removeFromTop (parametersComponent->getHeightNeeded()).reduced (20, 0)); | |||
| } | |||
| @@ -443,7 +443,7 @@ public: | |||
| transportSource.reset (new AudioTransportSource()); | |||
| transportSource->addChangeListener (this); | |||
| if (readerSource.get() != nullptr) | |||
| if (readerSource != nullptr) | |||
| { | |||
| if (auto* device = audioDeviceManager.getCurrentAudioDevice()) | |||
| { | |||
| @@ -475,7 +475,7 @@ public: | |||
| void play() | |||
| { | |||
| if (readerSource.get() == nullptr) | |||
| if (readerSource == nullptr) | |||
| return; | |||
| if (transportSource->getCurrentPosition() >= transportSource->getLengthInSeconds() | |||
| @@ -488,7 +488,7 @@ public: | |||
| void setLooping (bool shouldLoop) | |||
| { | |||
| if (readerSource.get() != nullptr) | |||
| if (readerSource != nullptr) | |||
| readerSource->setLooping (shouldLoop); | |||
| } | |||
| @@ -633,7 +633,7 @@ private: | |||
| //============================================================================== | |||
| void valueChanged (Value& v) override | |||
| { | |||
| if (readerSource.get() != nullptr) | |||
| if (readerSource != nullptr) | |||
| readerSource->setLooping (v.getValue()); | |||
| } | |||
| @@ -311,7 +311,7 @@ private: | |||
| { | |||
| SparseSet<int> selectedRows; | |||
| for (auto i = 0; i < midiDevices.size(); ++i) | |||
| if (midiDevices[i]->inDevice.get() != nullptr || midiDevices[i]->outDevice.get() != nullptr) | |||
| if (midiDevices[i]->inDevice != nullptr || midiDevices[i]->outDevice != nullptr) | |||
| selectedRows.addRange (Range<int> (i, i + 1)); | |||
| lastSelectedItems = selectedRows; | |||
| @@ -356,7 +356,7 @@ private: | |||
| void sendToOutputs (const MidiMessage& msg) | |||
| { | |||
| for (auto midiOutput : midiOutputs) | |||
| if (midiOutput->outDevice.get() != nullptr) | |||
| if (midiOutput->outDevice != nullptr) | |||
| midiOutput->outDevice->sendMessageNow (msg); | |||
| } | |||
| @@ -379,7 +379,7 @@ public: | |||
| r.removeFromTop (20); | |||
| if (parametersComponent.get() != nullptr) | |||
| if (parametersComponent != nullptr) | |||
| parametersComponent->setBounds (r.removeFromTop (parametersComponent->getHeightNeeded()).reduced (20, 0)); | |||
| } | |||
| @@ -443,7 +443,7 @@ public: | |||
| transportSource.reset (new AudioTransportSource()); | |||
| transportSource->addChangeListener (this); | |||
| if (readerSource.get() != nullptr) | |||
| if (readerSource != nullptr) | |||
| { | |||
| if (auto* device = audioDeviceManager.getCurrentAudioDevice()) | |||
| { | |||
| @@ -475,7 +475,7 @@ public: | |||
| void play() | |||
| { | |||
| if (readerSource.get() == nullptr) | |||
| if (readerSource == nullptr) | |||
| return; | |||
| if (transportSource->getCurrentPosition() >= transportSource->getLengthInSeconds() | |||
| @@ -488,7 +488,7 @@ public: | |||
| void setLooping (bool shouldLoop) | |||
| { | |||
| if (readerSource.get() != nullptr) | |||
| if (readerSource != nullptr) | |||
| readerSource->setLooping (shouldLoop); | |||
| } | |||
| @@ -633,7 +633,7 @@ private: | |||
| //============================================================================== | |||
| void valueChanged (Value& v) override | |||
| { | |||
| if (readerSource.get() != nullptr) | |||
| if (readerSource != nullptr) | |||
| readerSource->setLooping (v.getValue()); | |||
| } | |||
| @@ -123,7 +123,7 @@ public: | |||
| auto previewArea = shouldUseLandscapeLayout() ? r.removeFromLeft (r.getWidth() / 2) | |||
| : r.removeFromTop (r.getHeight() / 2); | |||
| if (cameraPreviewComp.get() != nullptr) | |||
| if (cameraPreviewComp != nullptr) | |||
| cameraPreviewComp->setBounds (previewArea); | |||
| if (shouldUseLandscapeLayout()) | |||
| @@ -120,10 +120,10 @@ public: | |||
| shader->use(); | |||
| if (uniforms->projectionMatrix.get() != nullptr) | |||
| if (uniforms->projectionMatrix != nullptr) | |||
| uniforms->projectionMatrix->setMatrix4 (getProjectionMatrix().mat, 1, false); | |||
| if (uniforms->viewMatrix.get() != nullptr) | |||
| if (uniforms->viewMatrix != nullptr) | |||
| uniforms->viewMatrix->setMatrix4 (getViewMatrix().mat, 1, false); | |||
| shape->draw (*attributes); | |||
| @@ -276,10 +276,10 @@ private: | |||
| { | |||
| using namespace ::juce::gl; | |||
| if (position.get() != nullptr) glDisableVertexAttribArray (position->attributeID); | |||
| if (normal.get() != nullptr) glDisableVertexAttribArray (normal->attributeID); | |||
| if (sourceColour.get() != nullptr) glDisableVertexAttribArray (sourceColour->attributeID); | |||
| if (textureCoordIn.get() != nullptr) glDisableVertexAttribArray (textureCoordIn->attributeID); | |||
| if (position != nullptr) glDisableVertexAttribArray (position->attributeID); | |||
| if (normal != nullptr) glDisableVertexAttribArray (normal->attributeID); | |||
| if (sourceColour != nullptr) glDisableVertexAttribArray (sourceColour->attributeID); | |||
| if (textureCoordIn != nullptr) glDisableVertexAttribArray (textureCoordIn->attributeID); | |||
| } | |||
| std::unique_ptr<OpenGLShaderProgram::Attribute> position, normal, sourceColour, textureCoordIn; | |||
| @@ -110,10 +110,10 @@ struct OpenGLUtils | |||
| { | |||
| using namespace ::juce::gl; | |||
| if (position.get() != nullptr) glDisableVertexAttribArray (position->attributeID); | |||
| if (normal.get() != nullptr) glDisableVertexAttribArray (normal->attributeID); | |||
| if (sourceColour.get() != nullptr) glDisableVertexAttribArray (sourceColour->attributeID); | |||
| if (textureCoordIn.get() != nullptr) glDisableVertexAttribArray (textureCoordIn->attributeID); | |||
| if (position != nullptr) glDisableVertexAttribArray (position->attributeID); | |||
| if (normal != nullptr) glDisableVertexAttribArray (normal->attributeID); | |||
| if (sourceColour != nullptr) glDisableVertexAttribArray (sourceColour->attributeID); | |||
| if (textureCoordIn != nullptr) glDisableVertexAttribArray (textureCoordIn->attributeID); | |||
| } | |||
| std::unique_ptr<OpenGLShaderProgram::Attribute> position, normal, sourceColour, textureCoordIn; | |||
| @@ -784,7 +784,7 @@ public: | |||
| // on demand, during the render callback. | |||
| freeAllContextObjects(); | |||
| if (controlsOverlay.get() != nullptr) | |||
| if (controlsOverlay != nullptr) | |||
| controlsOverlay->updateShader(); | |||
| } | |||
| @@ -857,19 +857,19 @@ public: | |||
| shader->use(); | |||
| if (uniforms->projectionMatrix.get() != nullptr) | |||
| if (uniforms->projectionMatrix != nullptr) | |||
| uniforms->projectionMatrix->setMatrix4 (getProjectionMatrix().mat, 1, false); | |||
| if (uniforms->viewMatrix.get() != nullptr) | |||
| if (uniforms->viewMatrix != nullptr) | |||
| uniforms->viewMatrix->setMatrix4 (getViewMatrix().mat, 1, false); | |||
| if (uniforms->texture.get() != nullptr) | |||
| if (uniforms->texture != nullptr) | |||
| uniforms->texture->set ((GLint) 0); | |||
| if (uniforms->lightPosition.get() != nullptr) | |||
| if (uniforms->lightPosition != nullptr) | |||
| uniforms->lightPosition->set (-15.0f, 10.0f, 15.0f, 0.0f); | |||
| if (uniforms->bouncingNumber.get() != nullptr) | |||
| if (uniforms->bouncingNumber != nullptr) | |||
| uniforms->bouncingNumber->set (bouncingNumber.getValue()); | |||
| shape->draw (*attributes); | |||
| @@ -89,16 +89,14 @@ public: | |||
| messages.erase (messages.begin(), std::next (messages.begin(), numToRemove)); | |||
| messages.insert (messages.end(), std::prev (end, numToAdd), end); | |||
| if (onChange != nullptr) | |||
| onChange(); | |||
| NullCheckedInvocation::invoke (onChange); | |||
| } | |||
| void clear() | |||
| { | |||
| messages.clear(); | |||
| if (onChange != nullptr) | |||
| onChange(); | |||
| NullCheckedInvocation::invoke (onChange); | |||
| } | |||
| const MidiMessage& operator[] (size_t ind) const { return messages[ind]; } | |||
| @@ -234,7 +234,7 @@ public: | |||
| addAndMakeVisible (bypassButton); | |||
| // Clicking will bypass *everything* | |||
| bypassButton.onClick = [globalBypass] { if (globalBypass != nullptr) globalBypass (-1); }; | |||
| bypassButton.onClick = [globalBypass] { NullCheckedInvocation::invoke (globalBypass, -1); }; | |||
| setSize (300, 80); | |||
| } | |||
| @@ -199,7 +199,7 @@ public: | |||
| shouldExit = true; | |||
| if (webStream.get() != nullptr) | |||
| if (webStream != nullptr) | |||
| webStream->cancel(); | |||
| } | |||
| @@ -155,7 +155,7 @@ public: | |||
| // invoked by the 'ping' button. | |||
| void pingChildProcess() | |||
| { | |||
| if (coordinatorProcess.get() != nullptr) | |||
| if (coordinatorProcess != nullptr) | |||
| coordinatorProcess->sendPingMessageToWorker(); | |||
| else | |||
| logMessage ("Child process is not running!"); | |||
| @@ -129,7 +129,7 @@ public: | |||
| } | |||
| } | |||
| if (oldOpenness.get() != nullptr) | |||
| if (oldOpenness != nullptr) | |||
| treeView.restoreOpennessState (*oldOpenness, false); | |||
| } | |||
| } | |||
| @@ -312,12 +312,12 @@ private: | |||
| { | |||
| std::unique_ptr<XmlElement> openness; | |||
| if (rootItem.get() != nullptr) | |||
| if (rootItem != nullptr) | |||
| openness = rootItem->getOpennessState(); | |||
| createNewRootNode(); | |||
| if (openness.get() != nullptr && rootItem.get() != nullptr) | |||
| if (openness != nullptr && rootItem != nullptr) | |||
| rootItem->restoreOpennessState (*openness); | |||
| } | |||
| @@ -336,7 +336,7 @@ private: | |||
| } | |||
| // if we have a valid TreeViewItem hide any old error messages and set our TreeView to use it | |||
| if (rootItem.get() != nullptr) | |||
| if (rootItem != nullptr) | |||
| errorMessage.clear(); | |||
| errorMessage.setVisible (! errorMessage.isEmpty()); | |||
| @@ -379,7 +379,7 @@ public: | |||
| r.removeFromTop (20); | |||
| if (parametersComponent.get() != nullptr) | |||
| if (parametersComponent != nullptr) | |||
| parametersComponent->setBounds (r.removeFromTop (parametersComponent->getHeightNeeded()).reduced (20, 0)); | |||
| } | |||
| @@ -443,7 +443,7 @@ public: | |||
| transportSource.reset (new AudioTransportSource()); | |||
| transportSource->addChangeListener (this); | |||
| if (readerSource.get() != nullptr) | |||
| if (readerSource != nullptr) | |||
| { | |||
| if (auto* device = audioDeviceManager.getCurrentAudioDevice()) | |||
| { | |||
| @@ -475,7 +475,7 @@ public: | |||
| void play() | |||
| { | |||
| if (readerSource.get() == nullptr) | |||
| if (readerSource == nullptr) | |||
| return; | |||
| if (transportSource->getCurrentPosition() >= transportSource->getLengthInSeconds() | |||
| @@ -488,7 +488,7 @@ public: | |||
| void setLooping (bool shouldLoop) | |||
| { | |||
| if (readerSource.get() != nullptr) | |||
| if (readerSource != nullptr) | |||
| readerSource->setLooping (shouldLoop); | |||
| } | |||
| @@ -633,7 +633,7 @@ private: | |||
| //============================================================================== | |||
| void valueChanged (Value& v) override | |||
| { | |||
| if (readerSource.get() != nullptr) | |||
| if (readerSource != nullptr) | |||
| readerSource->setLooping (v.getValue()); | |||
| } | |||
| @@ -235,8 +235,7 @@ void MainWindow::closeCurrentProject (OpenDocumentManager::SaveIfNeeded askUserT | |||
| { | |||
| if (currentProject == nullptr) | |||
| { | |||
| if (callback != nullptr) | |||
| callback (true); | |||
| NullCheckedInvocation::invoke (callback, true); | |||
| return; | |||
| } | |||
| @@ -259,8 +258,7 @@ void MainWindow::closeCurrentProject (OpenDocumentManager::SaveIfNeeded askUserT | |||
| if (! closedSuccessfully) | |||
| { | |||
| if (callback != nullptr) | |||
| callback (false); | |||
| NullCheckedInvocation::invoke (callback, false); | |||
| return; | |||
| } | |||
| @@ -269,8 +267,7 @@ void MainWindow::closeCurrentProject (OpenDocumentManager::SaveIfNeeded askUserT | |||
| { | |||
| parent->setProject (nullptr); | |||
| if (callback != nullptr) | |||
| callback (true); | |||
| NullCheckedInvocation::invoke (callback, true); | |||
| }; | |||
| if (askUserToSave == OpenDocumentManager::SaveIfNeeded::no) | |||
| @@ -286,8 +283,8 @@ void MainWindow::closeCurrentProject (OpenDocumentManager::SaveIfNeeded askUserT | |||
| if (saveResult == FileBasedDocument::savedOk) | |||
| setProjectAndCallback(); | |||
| else if (callback != nullptr) | |||
| callback (false); | |||
| else | |||
| NullCheckedInvocation::invoke (callback, false); | |||
| }); | |||
| }); | |||
| } | |||
| @@ -392,15 +389,13 @@ void MainWindow::openFile (const File& file, std::function<void (bool)> callback | |||
| parent->currentProject->updateDeprecatedProjectSettingsInteractively(); | |||
| } | |||
| if (callback != nullptr) | |||
| callback (saveResult); | |||
| NullCheckedInvocation::invoke (callback, saveResult); | |||
| }); | |||
| return; | |||
| } | |||
| if (callback != nullptr) | |||
| callback (false); | |||
| NullCheckedInvocation::invoke (callback, false); | |||
| return; | |||
| } | |||
| @@ -413,9 +408,7 @@ void MainWindow::openFile (const File& file, std::function<void (bool)> callback | |||
| if (parent != nullptr) | |||
| { | |||
| parent->createProjectContentCompIfNeeded(); | |||
| if (callback != nullptr) | |||
| callback (parent->getProjectContentComponent()->showEditorForFile (file, true)); | |||
| NullCheckedInvocation::invoke (callback, parent->getProjectContentComponent()->showEditorForFile (file, true)); | |||
| } | |||
| }; | |||
| @@ -428,9 +421,7 @@ void MainWindow::openFile (const File& file, std::function<void (bool)> callback | |||
| if (openedSuccessfully) | |||
| { | |||
| if (callback != nullptr) | |||
| callback (true); | |||
| NullCheckedInvocation::invoke (callback, true); | |||
| return; | |||
| } | |||
| @@ -444,8 +435,7 @@ void MainWindow::openFile (const File& file, std::function<void (bool)> callback | |||
| return; | |||
| } | |||
| if (callback != nullptr) | |||
| callback (false); | |||
| NullCheckedInvocation::invoke (callback, false); | |||
| } | |||
| void MainWindow::openPIP (const File& pipFile, std::function<void (bool)> callback) | |||
| @@ -454,9 +444,7 @@ void MainWindow::openPIP (const File& pipFile, std::function<void (bool)> callba | |||
| if (! generator->hasValidPIP()) | |||
| { | |||
| if (callback != nullptr) | |||
| callback (false); | |||
| NullCheckedInvocation::invoke (callback, false); | |||
| return; | |||
| } | |||
| @@ -469,9 +457,7 @@ void MainWindow::openPIP (const File& pipFile, std::function<void (bool)> callba | |||
| generatorResult.getErrorMessage()); | |||
| messageBox = AlertWindow::showScopedAsync (options, nullptr); | |||
| if (callback != nullptr) | |||
| callback (false); | |||
| NullCheckedInvocation::invoke (callback, false); | |||
| return; | |||
| } | |||
| @@ -482,9 +468,7 @@ void MainWindow::openPIP (const File& pipFile, std::function<void (bool)> callba | |||
| "Failed to create Main.cpp."); | |||
| messageBox = AlertWindow::showScopedAsync (options, nullptr); | |||
| if (callback != nullptr) | |||
| callback (false); | |||
| NullCheckedInvocation::invoke (callback, false); | |||
| return; | |||
| } | |||
| @@ -500,16 +484,13 @@ void MainWindow::openPIP (const File& pipFile, std::function<void (bool)> callba | |||
| "Failed to open .jucer file."); | |||
| parent->messageBox = AlertWindow::showScopedAsync (options, nullptr); | |||
| if (callback != nullptr) | |||
| callback (false); | |||
| NullCheckedInvocation::invoke (callback, false); | |||
| return; | |||
| } | |||
| parent->setupTemporaryPIPProject (*generator); | |||
| if (callback != nullptr) | |||
| callback (true); | |||
| NullCheckedInvocation::invoke (callback, true); | |||
| }); | |||
| } | |||
| @@ -746,9 +727,7 @@ static void askAllWindowsToCloseRecursive (WeakReference<MainWindowList> parent, | |||
| { | |||
| if (parent->windows.size() == 0) | |||
| { | |||
| if (callback != nullptr) | |||
| callback (true); | |||
| NullCheckedInvocation::invoke (callback, true); | |||
| return; | |||
| } | |||
| @@ -759,9 +738,7 @@ static void askAllWindowsToCloseRecursive (WeakReference<MainWindowList> parent, | |||
| if (! closedSuccessfully) | |||
| { | |||
| if (callback != nullptr) | |||
| callback (false); | |||
| NullCheckedInvocation::invoke (callback, false); | |||
| return; | |||
| } | |||
| @@ -845,9 +822,7 @@ void MainWindowList::openFile (const File& file, std::function<void (bool)> call | |||
| { | |||
| if (! file.exists()) | |||
| { | |||
| if (callback != nullptr) | |||
| callback (false); | |||
| NullCheckedInvocation::invoke (callback, false); | |||
| return; | |||
| } | |||
| @@ -857,9 +832,7 @@ void MainWindowList::openFile (const File& file, std::function<void (bool)> call | |||
| { | |||
| w->toFront (true); | |||
| if (callback != nullptr) | |||
| callback (true); | |||
| NullCheckedInvocation::invoke (callback, true); | |||
| return; | |||
| } | |||
| } | |||
| @@ -893,8 +866,7 @@ void MainWindowList::openFile (const File& file, std::function<void (bool)> call | |||
| parent->closeWindow (w); | |||
| } | |||
| if (callback != nullptr) | |||
| callback (openedSuccessfully); | |||
| NullCheckedInvocation::invoke (callback, openedSuccessfully); | |||
| }); | |||
| return; | |||
| @@ -902,8 +874,8 @@ void MainWindowList::openFile (const File& file, std::function<void (bool)> call | |||
| getFrontmostWindow()->openFile (file, [parent, callback] (bool openedSuccessfully) | |||
| { | |||
| if (parent != nullptr && callback != nullptr) | |||
| callback (openedSuccessfully); | |||
| if (parent != nullptr) | |||
| NullCheckedInvocation::invoke (callback, openedSuccessfully); | |||
| }); | |||
| } | |||
| @@ -172,9 +172,7 @@ void OpenDocumentManager::saveIfNeededAndUserAgrees (OpenDocumentManager::Docume | |||
| { | |||
| if (! doc->needsSaving()) | |||
| { | |||
| if (callback != nullptr) | |||
| callback (FileBasedDocument::savedOk); | |||
| NullCheckedInvocation::invoke (callback, FileBasedDocument::savedOk); | |||
| return; | |||
| } | |||
| @@ -197,14 +195,12 @@ void OpenDocumentManager::saveIfNeededAndUserAgrees (OpenDocumentManager::Docume | |||
| if (parent == nullptr) | |||
| return; | |||
| if (callback != nullptr) | |||
| callback (hasSaved ? FileBasedDocument::savedOk : FileBasedDocument::failedToWriteToFile); | |||
| NullCheckedInvocation::invoke (callback, hasSaved ? FileBasedDocument::savedOk : FileBasedDocument::failedToWriteToFile); | |||
| }); | |||
| return; | |||
| } | |||
| if (callback != nullptr) | |||
| callback (r == 2 ? FileBasedDocument::savedOk : FileBasedDocument::userCancelledSave); | |||
| NullCheckedInvocation::invoke (callback, r == 2 ? FileBasedDocument::savedOk : FileBasedDocument::userCancelledSave); | |||
| }); | |||
| } | |||
| @@ -233,9 +229,7 @@ void OpenDocumentManager::closeDocumentAsync (Document* doc, SaveIfNeeded saveIf | |||
| { | |||
| if (! documents.contains (doc)) | |||
| { | |||
| if (callback != nullptr) | |||
| callback (true); | |||
| NullCheckedInvocation::invoke (callback, true); | |||
| return; | |||
| } | |||
| @@ -249,16 +243,13 @@ void OpenDocumentManager::closeDocumentAsync (Document* doc, SaveIfNeeded saveIf | |||
| if (result != FileBasedDocument::savedOk) | |||
| { | |||
| if (callback != nullptr) | |||
| callback (false); | |||
| NullCheckedInvocation::invoke (callback, false); | |||
| return; | |||
| } | |||
| auto closed = parent->closeDocumentWithoutSaving (doc); | |||
| if (callback != nullptr) | |||
| callback (closed); | |||
| NullCheckedInvocation::invoke (callback, closed); | |||
| }); | |||
| return; | |||
| @@ -266,8 +257,7 @@ void OpenDocumentManager::closeDocumentAsync (Document* doc, SaveIfNeeded saveIf | |||
| auto closed = closeDocumentWithoutSaving (doc); | |||
| if (callback != nullptr) | |||
| callback (closed); | |||
| NullCheckedInvocation::invoke (callback, closed); | |||
| } | |||
| void OpenDocumentManager::closeFileWithoutSaving (const File& f) | |||
| @@ -286,9 +276,7 @@ static void closeLastAsyncRecusrsive (WeakReference<OpenDocumentManager> parent, | |||
| if (lastIndex < 0) | |||
| { | |||
| if (callback != nullptr) | |||
| callback (true); | |||
| NullCheckedInvocation::invoke (callback, true); | |||
| return; | |||
| } | |||
| @@ -301,9 +289,7 @@ static void closeLastAsyncRecusrsive (WeakReference<OpenDocumentManager> parent, | |||
| if (! closedSuccessfully) | |||
| { | |||
| if (callback != nullptr) | |||
| callback (false); | |||
| NullCheckedInvocation::invoke (callback, false); | |||
| return; | |||
| } | |||
| @@ -334,9 +320,7 @@ void OpenDocumentManager::closeLastDocumentUsingProjectRecursive (WeakReference< | |||
| if (! closedSuccessfully) | |||
| { | |||
| if (callback != nullptr) | |||
| callback (false); | |||
| NullCheckedInvocation::invoke (callback, false); | |||
| return; | |||
| } | |||
| @@ -348,8 +332,7 @@ void OpenDocumentManager::closeLastDocumentUsingProjectRecursive (WeakReference< | |||
| } | |||
| } | |||
| if (callback != nullptr) | |||
| callback (true); | |||
| NullCheckedInvocation::invoke (callback, true); | |||
| } | |||
| void OpenDocumentManager::closeAllDocumentsUsingProjectAsync (Project& project, SaveIfNeeded askUserToSave, std::function<void (bool)> callback) | |||
| @@ -137,9 +137,7 @@ void BinaryResources::browseForResource (const String& title, | |||
| { | |||
| if (safeThis == nullptr) | |||
| { | |||
| if (callback != nullptr) | |||
| callback ({}); | |||
| NullCheckedInvocation::invoke (callback, String{}); | |||
| return; | |||
| } | |||
| @@ -169,8 +167,7 @@ void BinaryResources::browseForResource (const String& title, | |||
| } | |||
| } | |||
| if (callback != nullptr) | |||
| callback (resourceName); | |||
| NullCheckedInvocation::invoke (callback, resourceName); | |||
| }); | |||
| } | |||
| @@ -517,8 +517,7 @@ private: | |||
| if (oldCallback != nullptr) | |||
| start (oldCallback); | |||
| if (notifyChannelsChanged != nullptr) | |||
| notifyChannelsChanged(); | |||
| NullCheckedInvocation::invoke (notifyChannelsChanged); | |||
| } | |||
| } | |||
| @@ -120,7 +120,7 @@ public: | |||
| //============================================================================== | |||
| void systemRequestedQuit() override | |||
| { | |||
| if (mainWindow.get() != nullptr) | |||
| if (mainWindow != nullptr) | |||
| mainWindow->pluginHolder->savePluginState(); | |||
| if (ModalComponentManager::getInstance()->cancelAllModalComponents()) | |||
| @@ -466,8 +466,7 @@ public: | |||
| } | |||
| // Send VST events to the host. | |||
| if (hostCallback != nullptr) | |||
| hostCallback (&vstEffect, Vst2::audioMasterProcessEvents, 0, 0, outgoingEvents.events, 0); | |||
| NullCheckedInvocation::invoke (hostCallback, &vstEffect, Vst2::audioMasterProcessEvents, 0, 0, outgoingEvents.events, 0.0f); | |||
| #elif JUCE_DEBUG | |||
| /* This assertion is caused when you've added some events to the | |||
| midiMessages array in your processBlock() method, which usually means | |||
| @@ -545,10 +544,7 @@ public: | |||
| some hosts rely on this behaviour. | |||
| */ | |||
| if (vstEffect.flags & Vst2::effFlagsIsSynth || JucePlugin_WantsMidiInput || JucePlugin_IsMidiEffect) | |||
| { | |||
| if (hostCallback != nullptr) | |||
| hostCallback (&vstEffect, Vst2::audioMasterWantMidi, 0, 1, nullptr, 0); | |||
| } | |||
| NullCheckedInvocation::invoke (hostCallback, &vstEffect, Vst2::audioMasterWantMidi, 0, 1, nullptr, 0.0f); | |||
| if (detail::PluginUtilities::getHostType().isAbletonLive() | |||
| && hostCallback != nullptr | |||
| @@ -697,20 +693,17 @@ public: | |||
| return; | |||
| } | |||
| if (hostCallback != nullptr) | |||
| hostCallback (&vstEffect, Vst2::audioMasterAutomate, index, 0, nullptr, newValue); | |||
| NullCheckedInvocation::invoke (hostCallback, &vstEffect, Vst2::audioMasterAutomate, index, 0, nullptr, newValue); | |||
| } | |||
| void audioProcessorParameterChangeGestureBegin (AudioProcessor*, int index) override | |||
| { | |||
| if (hostCallback != nullptr) | |||
| hostCallback (&vstEffect, Vst2::audioMasterBeginEdit, index, 0, nullptr, 0); | |||
| NullCheckedInvocation::invoke (hostCallback, &vstEffect, Vst2::audioMasterBeginEdit, index, 0, nullptr, 0.0f); | |||
| } | |||
| void audioProcessorParameterChangeGestureEnd (AudioProcessor*, int index) override | |||
| { | |||
| if (hostCallback != nullptr) | |||
| hostCallback (&vstEffect, Vst2::audioMasterEndEdit, index, 0, nullptr, 0); | |||
| NullCheckedInvocation::invoke (hostCallback, &vstEffect, Vst2::audioMasterEndEdit, index, 0, nullptr, 0.0f); | |||
| } | |||
| void parameterValueChanged (int, float newValue) override | |||
| @@ -157,8 +157,8 @@ public: | |||
| jassert (insideLADSPACallback == 0); | |||
| if (handle != nullptr && plugin != nullptr && plugin->cleanup != nullptr) | |||
| plugin->cleanup (handle); | |||
| if (handle != nullptr && plugin != nullptr) | |||
| NullCheckedInvocation::invoke (plugin->cleanup, handle); | |||
| initialised = false; | |||
| module = nullptr; | |||
| @@ -209,8 +209,8 @@ public: | |||
| setLatencySamples (0); | |||
| // Some plugins crash if this doesn't happen: | |||
| if (plugin->activate != nullptr) plugin->activate (handle); | |||
| if (plugin->deactivate != nullptr) plugin->deactivate (handle); | |||
| NullCheckedInvocation::invoke (plugin->activate, handle); | |||
| NullCheckedInvocation::invoke (plugin->deactivate, handle); | |||
| } | |||
| //============================================================================== | |||
| @@ -275,15 +275,14 @@ public: | |||
| firstParam->setValue (old); | |||
| } | |||
| if (plugin->activate != nullptr) | |||
| plugin->activate (handle); | |||
| NullCheckedInvocation::invoke (plugin->activate, handle); | |||
| } | |||
| } | |||
| void releaseResources() override | |||
| { | |||
| if (handle != nullptr && plugin->deactivate != nullptr) | |||
| plugin->deactivate (handle); | |||
| NullCheckedInvocation::invoke (plugin->deactivate, handle); | |||
| tempBuffer.setSize (1, 1); | |||
| } | |||
| @@ -100,8 +100,8 @@ public: | |||
| { | |||
| const auto toReturn = result.extract (obj); | |||
| if (result.isOk() && addRefFn != nullptr && *obj != nullptr) | |||
| addRefFn (*obj); | |||
| if (result.isOk() && *obj != nullptr) | |||
| NullCheckedInvocation::invoke (addRefFn, *obj); | |||
| return toReturn; | |||
| } | |||
| @@ -105,8 +105,7 @@ void ParameterAttachment::parameterValueChanged (int, float newValue) | |||
| void ParameterAttachment::handleAsyncUpdate() | |||
| { | |||
| if (setValue != nullptr) | |||
| setValue (parameter.convertFrom0to1 (lastValue)); | |||
| NullCheckedInvocation::invoke (setValue, parameter.convertFrom0to1 (lastValue)); | |||
| } | |||
| //============================================================================== | |||
| @@ -293,8 +293,7 @@ private: | |||
| void valueChanged (Value&) override | |||
| { | |||
| if (onDefaultChange != nullptr) | |||
| onDefaultChange(); | |||
| NullCheckedInvocation::invoke (onDefaultChange); | |||
| } | |||
| void referToWithDefault (ValueTree v, | |||
| @@ -134,8 +134,7 @@ std::vector<NetworkServiceDiscovery::Service> NetworkServiceDiscovery::Available | |||
| void NetworkServiceDiscovery::AvailableServiceList::handleAsyncUpdate() | |||
| { | |||
| if (onChange != nullptr) | |||
| onChange(); | |||
| NullCheckedInvocation::invoke (onChange); | |||
| } | |||
| void NetworkServiceDiscovery::AvailableServiceList::handleMessage (const XmlElement& xml) | |||
| @@ -110,14 +110,12 @@ struct AppDelegateClass : public ObjCClass<NSObject> | |||
| addMethod (@selector (mainMenuTrackingBegan:), [] (id /*self*/, SEL, NSNotification*) | |||
| { | |||
| if (menuTrackingChangedCallback != nullptr) | |||
| menuTrackingChangedCallback (true); | |||
| NullCheckedInvocation::invoke (menuTrackingChangedCallback, true); | |||
| }); | |||
| addMethod (@selector (mainMenuTrackingEnded:), [] (id /*self*/, SEL, NSNotification*) | |||
| { | |||
| if (menuTrackingChangedCallback != nullptr) | |||
| menuTrackingChangedCallback (false); | |||
| NullCheckedInvocation::invoke (menuTrackingChangedCallback, false); | |||
| }); | |||
| // (used as a way of running a dummy thread) | |||
| @@ -164,8 +164,7 @@ private: | |||
| } | |||
| if (message == WM_SETTINGCHANGE) | |||
| if (settingChangeCallback != nullptr) | |||
| settingChangeCallback(); | |||
| NullCheckedInvocation::invoke (settingChangeCallback); | |||
| } | |||
| return DefWindowProc (h, message, wParam, lParam); | |||
| @@ -178,8 +178,7 @@ void Typeface::clearTypefaceCache() | |||
| RenderingHelpers::SoftwareRendererSavedState::clearGlyphCache(); | |||
| if (clearOpenGLGlyphCache != nullptr) | |||
| clearOpenGLGlyphCache(); | |||
| NullCheckedInvocation::invoke (clearOpenGLGlyphCache); | |||
| } | |||
| //============================================================================== | |||
| @@ -421,8 +421,7 @@ void Button::sendClickMessage (const ModifierKeys& modifiers) | |||
| if (checker.shouldBailOut()) | |||
| return; | |||
| if (onClick != nullptr) | |||
| onClick(); | |||
| NullCheckedInvocation::invoke (onClick); | |||
| } | |||
| void Button::sendStateMessage() | |||
| @@ -439,8 +438,7 @@ void Button::sendStateMessage() | |||
| if (checker.shouldBailOut()) | |||
| return; | |||
| if (onStateChange != nullptr) | |||
| onStateChange(); | |||
| NullCheckedInvocation::invoke (onStateChange); | |||
| } | |||
| //============================================================================== | |||
| @@ -128,9 +128,7 @@ void MultiDocumentPanel::closeLastDocumentRecursive (SafePointer<MultiDocumentPa | |||
| { | |||
| if (parent->components.isEmpty()) | |||
| { | |||
| if (callback != nullptr) | |||
| callback (true); | |||
| NullCheckedInvocation::invoke (callback, true); | |||
| return; | |||
| } | |||
| @@ -143,9 +141,7 @@ void MultiDocumentPanel::closeLastDocumentRecursive (SafePointer<MultiDocumentPa | |||
| if (! closeResult) | |||
| { | |||
| if (callback != nullptr) | |||
| callback (false); | |||
| NullCheckedInvocation::invoke (callback, false); | |||
| return; | |||
| } | |||
| @@ -436,9 +432,7 @@ void MultiDocumentPanel::closeDocumentAsync (Component* component, | |||
| if (component == nullptr) | |||
| { | |||
| if (callback != nullptr) | |||
| callback (true); | |||
| NullCheckedInvocation::invoke (callback, true); | |||
| return; | |||
| } | |||
| @@ -455,8 +449,7 @@ void MultiDocumentPanel::closeDocumentAsync (Component* component, | |||
| if (closedSuccessfully) | |||
| parent->closeDocumentInternal (component); | |||
| if (callback != nullptr) | |||
| callback (closedSuccessfully); | |||
| NullCheckedInvocation::invoke (callback, closedSuccessfully); | |||
| }); | |||
| return; | |||
| @@ -469,8 +462,7 @@ void MultiDocumentPanel::closeDocumentAsync (Component* component, | |||
| jassertfalse; | |||
| } | |||
| if (callback != nullptr) | |||
| callback (true); | |||
| NullCheckedInvocation::invoke (callback, true); | |||
| JUCE_END_IGNORE_WARNINGS_MSVC | |||
| } | |||
| @@ -113,8 +113,7 @@ void SidePanel::showOrHide (bool show) | |||
| void SidePanel::moved() | |||
| { | |||
| if (onPanelMove != nullptr) | |||
| onPanelMove(); | |||
| NullCheckedInvocation::invoke (onPanelMove); | |||
| } | |||
| void SidePanel::resized() | |||
| @@ -253,8 +252,7 @@ void SidePanel::changeListenerCallback (ChangeBroadcaster*) | |||
| { | |||
| if (! Desktop::getInstance().getAnimator().isAnimating (this)) | |||
| { | |||
| if (onPanelShowHide != nullptr) | |||
| onPanelShowHide (isShowing); | |||
| NullCheckedInvocation::invoke (onPanelShowHide, isShowing); | |||
| if (isVisible() && ! isShowing) | |||
| setVisible (false); | |||
| @@ -340,8 +340,7 @@ public: | |||
| X11Symbols::getInstance()->xUngrabPointer (getDisplay(), CurrentTime); | |||
| } | |||
| if (completionCallback != nullptr) | |||
| completionCallback(); | |||
| NullCheckedInvocation::invoke (completionCallback); | |||
| dragging = false; | |||
| } | |||
| @@ -410,8 +410,7 @@ struct DisplaySettingsChangeCallback : private DeletedAtShutdown | |||
| static void displayReconfigurationCallback (CGDirectDisplayID, CGDisplayChangeSummaryFlags, void* userInfo) | |||
| { | |||
| if (auto* thisPtr = static_cast<DisplaySettingsChangeCallback*> (userInfo)) | |||
| if (thisPtr->forceDisplayUpdate != nullptr) | |||
| thisPtr->forceDisplayUpdate(); | |||
| NullCheckedInvocation::invoke (thisPtr->forceDisplayUpdate); | |||
| } | |||
| std::function<void()> forceDisplayUpdate; | |||
| @@ -423,8 +423,7 @@ static void setDPIAwareness() | |||
| && SUCCEEDED (setProcessDPIAwareness (DPI_Awareness::DPI_Awareness_System_Aware))) | |||
| return; | |||
| if (setProcessDPIAware != nullptr) | |||
| setProcessDPIAware(); | |||
| NullCheckedInvocation::invoke (setProcessDPIAware); | |||
| } | |||
| static bool isPerMonitorDPIAwareProcess() | |||
| @@ -3065,8 +3064,8 @@ private: | |||
| // This avoids a rare stuck-button problem when focus is lost unexpectedly, but must | |||
| // not be called as part of a move, in case it's actually a mouse-drag from another | |||
| // app which ends up here when we get focus before the mouse is released.. | |||
| if (isMouseDownEvent && getNativeRealtimeModifiers != nullptr) | |||
| getNativeRealtimeModifiers(); | |||
| if (isMouseDownEvent) | |||
| NullCheckedInvocation::invoke (getNativeRealtimeModifiers); | |||
| updateKeyModifiers(); | |||
| @@ -3955,8 +3954,8 @@ public: | |||
| { | |||
| // Ensure that non-client areas are scaled for per-monitor DPI awareness v1 - can't | |||
| // do this in peerWindowProc as we have no window at this point | |||
| if (message == WM_NCCREATE && enableNonClientDPIScaling != nullptr) | |||
| enableNonClientDPIScaling (h); | |||
| if (message == WM_NCCREATE) | |||
| NullCheckedInvocation::invoke (enableNonClientDPIScaling, h); | |||
| if (auto* peer = getOwnerOfWindow (h)) | |||
| { | |||
| @@ -2261,8 +2261,7 @@ void XWindowSystem::setScreenSaverEnabled (bool enabled) const | |||
| XWindowSystemUtilities::ScopedXLock xLock; | |||
| if (xScreenSaverSuspend != nullptr) | |||
| xScreenSaverSuspend (display, ! enabled); | |||
| NullCheckedInvocation::invoke (xScreenSaverSuspend, display, ! enabled); | |||
| } | |||
| Point<float> XWindowSystem::getCurrentMousePosition() const | |||
| @@ -334,8 +334,7 @@ void MultiChoicePropertyComponent::setExpanded (bool shouldBeExpanded) noexcept | |||
| if (auto* propertyPanel = findParentComponentOfClass<PropertyPanel>()) | |||
| propertyPanel->resized(); | |||
| if (onHeightChange != nullptr) | |||
| onHeightChange(); | |||
| NullCheckedInvocation::invoke (onHeightChange); | |||
| expandButton.setTransform (AffineTransform::rotation (expanded ? MathConstants<float>::pi : MathConstants<float>::twoPi, | |||
| (float) expandButton.getBounds().getCentreX(), | |||
| @@ -625,8 +625,7 @@ void ComboBox::handleAsyncUpdate() | |||
| if (checker.shouldBailOut()) | |||
| return; | |||
| if (onChange != nullptr) | |||
| onChange(); | |||
| NullCheckedInvocation::invoke (onChange); | |||
| if (checker.shouldBailOut()) | |||
| return; | |||
| @@ -202,8 +202,7 @@ void Label::editorShown (TextEditor* textEditor) | |||
| if (checker.shouldBailOut()) | |||
| return; | |||
| if (onEditorShow != nullptr) | |||
| onEditorShow(); | |||
| NullCheckedInvocation::invoke (onEditorShow); | |||
| } | |||
| void Label::editorAboutToBeHidden (TextEditor* textEditor) | |||
| @@ -214,8 +213,7 @@ void Label::editorAboutToBeHidden (TextEditor* textEditor) | |||
| if (checker.shouldBailOut()) | |||
| return; | |||
| if (onEditorHide != nullptr) | |||
| onEditorHide(); | |||
| NullCheckedInvocation::invoke (onEditorHide); | |||
| } | |||
| void Label::showEditor() | |||
| @@ -463,8 +461,7 @@ void Label::callChangeListeners() | |||
| if (checker.shouldBailOut()) | |||
| return; | |||
| if (onTextChange != nullptr) | |||
| onTextChange(); | |||
| NullCheckedInvocation::invoke (onTextChange); | |||
| } | |||
| //============================================================================== | |||
| @@ -359,8 +359,7 @@ public: | |||
| if (checker.shouldBailOut()) | |||
| return; | |||
| if (owner.onValueChange != nullptr) | |||
| owner.onValueChange(); | |||
| NullCheckedInvocation::invoke (owner.onValueChange); | |||
| if (checker.shouldBailOut()) | |||
| return; | |||
| @@ -379,8 +378,7 @@ public: | |||
| if (checker.shouldBailOut()) | |||
| return; | |||
| if (owner.onDragStart != nullptr) | |||
| owner.onDragStart(); | |||
| NullCheckedInvocation::invoke (owner.onDragStart); | |||
| } | |||
| void sendDragEnd() | |||
| @@ -394,8 +392,7 @@ public: | |||
| if (checker.shouldBailOut()) | |||
| return; | |||
| if (owner.onDragEnd != nullptr) | |||
| owner.onDragEnd(); | |||
| NullCheckedInvocation::invoke (owner.onDragEnd); | |||
| } | |||
| void incrementOrDecrement (double delta) | |||
| @@ -440,8 +440,7 @@ struct OSCReceiver::Pimpl : private Thread, | |||
| } | |||
| catch (const OSCFormatError&) | |||
| { | |||
| if (formatErrorHandler != nullptr) | |||
| formatErrorHandler (data, (int) dataSize); | |||
| NullCheckedInvocation::invoke (formatErrorHandler, data, (int) dataSize); | |||
| } | |||
| } | |||
| @@ -2932,16 +2932,14 @@ private: | |||
| void cameraDeviceError (const String& error) | |||
| { | |||
| if (owner.onErrorOccurred != nullptr) | |||
| owner.onErrorOccurred (error); | |||
| NullCheckedInvocation::invoke (owner.onErrorOccurred, error); | |||
| } | |||
| void invokeCameraOpenCallback (const String& error) | |||
| { | |||
| JUCE_CAMERA_LOG ("invokeCameraOpenCallback(), error = " + error); | |||
| if (cameraOpenCallback != nullptr) | |||
| cameraOpenCallback (cameraId, error); | |||
| NullCheckedInvocation::invoke (cameraOpenCallback, cameraId, error); | |||
| } | |||
| //============================================================================== | |||
| @@ -2955,8 +2953,7 @@ private: | |||
| { | |||
| JUCE_CAMERA_LOG ("notifyPictureTaken()"); | |||
| if (pictureTakenCallback != nullptr) | |||
| pictureTakenCallback (image); | |||
| NullCheckedInvocation::invoke (pictureTakenCallback, image); | |||
| } | |||
| void triggerStillPictureCapture() | |||
| @@ -1155,14 +1155,9 @@ private: | |||
| JUCE_CAMERA_LOG ("cameraSessionRuntimeError(), error = " + error); | |||
| if (! notifiedOfCameraOpening) | |||
| { | |||
| cameraOpenCallback ({}, error); | |||
| } | |||
| else | |||
| { | |||
| if (owner.onErrorOccurred != nullptr) | |||
| owner.onErrorOccurred (error); | |||
| } | |||
| NullCheckedInvocation::invoke (owner.onErrorOccurred, error); | |||
| } | |||
| void callListeners (const Image& image) | |||
| @@ -1178,8 +1173,7 @@ private: | |||
| { | |||
| JUCE_CAMERA_LOG ("notifyPictureTaken()"); | |||
| if (pictureTakenCallback != nullptr) | |||
| pictureTakenCallback (image); | |||
| NullCheckedInvocation::invoke (pictureTakenCallback, image); | |||
| } | |||
| //============================================================================== | |||
| @@ -523,8 +523,8 @@ private: | |||
| MessageManager::callAsync ([weakRef = WeakReference<Pimpl> { this }, image]() mutable | |||
| { | |||
| if (weakRef != nullptr && weakRef->pictureTakenCallback != nullptr) | |||
| weakRef->pictureTakenCallback (image); | |||
| if (weakRef != nullptr) | |||
| NullCheckedInvocation::invoke (weakRef->pictureTakenCallback, image); | |||
| }); | |||
| } | |||
| @@ -551,8 +551,7 @@ private: | |||
| { | |||
| JUCE_CAMERA_LOG ("cameraSessionRuntimeError(), error = " + error); | |||
| if (owner.onErrorOccurred != nullptr) | |||
| owner.onErrorOccurred (error); | |||
| NullCheckedInvocation::invoke (owner.onErrorOccurred, error); | |||
| } | |||
| //============================================================================== | |||
| @@ -245,9 +245,7 @@ struct CameraDevice::Pimpl : public ChangeBroadcaster | |||
| if (weakRef == nullptr) | |||
| return; | |||
| if (weakRef->pictureTakenCallback != nullptr) | |||
| weakRef->pictureTakenCallback (image); | |||
| NullCheckedInvocation::invoke (weakRef->pictureTakenCallback, image); | |||
| weakRef->pictureTakenCallback = nullptr; | |||
| }); | |||
| } | |||
| @@ -1681,8 +1681,7 @@ private: | |||
| if (weakThis == nullptr) | |||
| return; | |||
| if (weakThis->owner.owner.onGlobalMediaVolumeChanged != nullptr) | |||
| weakThis->owner.owner.onGlobalMediaVolumeChanged(); | |||
| NullCheckedInvocation::invoke (weakThis->owner.owner.onGlobalMediaVolumeChanged); | |||
| }); | |||
| } | |||
| @@ -1723,20 +1722,17 @@ private: | |||
| void errorOccurred (const String& errorMessage) | |||
| { | |||
| if (owner.onErrorOccurred != nullptr) | |||
| owner.onErrorOccurred (errorMessage); | |||
| NullCheckedInvocation::invoke (owner.onErrorOccurred, errorMessage); | |||
| } | |||
| void playbackStarted() | |||
| { | |||
| if (owner.onPlaybackStarted != nullptr) | |||
| owner.onPlaybackStarted(); | |||
| NullCheckedInvocation::invoke (owner.onPlaybackStarted); | |||
| } | |||
| void playbackStopped() | |||
| { | |||
| if (owner.onPlaybackStopped != nullptr) | |||
| owner.onPlaybackStopped(); | |||
| NullCheckedInvocation::invoke (owner.onPlaybackStopped); | |||
| } | |||
| //============================================================================== | |||
| @@ -810,20 +810,17 @@ private: | |||
| void errorOccurred (const String& errorMessage) | |||
| { | |||
| if (owner.onErrorOccurred != nullptr) | |||
| owner.onErrorOccurred (errorMessage); | |||
| NullCheckedInvocation::invoke (owner.onErrorOccurred, errorMessage); | |||
| } | |||
| void playbackStarted() | |||
| { | |||
| if (owner.onPlaybackStarted != nullptr) | |||
| owner.onPlaybackStarted(); | |||
| NullCheckedInvocation::invoke (owner.onPlaybackStarted); | |||
| } | |||
| void playbackStopped() | |||
| { | |||
| if (owner.onPlaybackStopped != nullptr) | |||
| owner.onPlaybackStopped(); | |||
| NullCheckedInvocation::invoke (owner.onPlaybackStopped); | |||
| } | |||
| void playbackReachedEndTime() | |||
| @@ -322,20 +322,17 @@ struct VideoComponent::Pimpl : public Component, | |||
| void playbackStarted() | |||
| { | |||
| if (owner.onPlaybackStarted != nullptr) | |||
| owner.onPlaybackStarted(); | |||
| NullCheckedInvocation::invoke (owner.onPlaybackStarted); | |||
| } | |||
| void playbackStopped() | |||
| { | |||
| if (owner.onPlaybackStopped != nullptr) | |||
| owner.onPlaybackStopped(); | |||
| NullCheckedInvocation::invoke (owner.onPlaybackStopped); | |||
| } | |||
| void errorOccurred (const String& errorMessage) | |||
| { | |||
| if (owner.onErrorOccurred != nullptr) | |||
| owner.onErrorOccurred (errorMessage); | |||
| NullCheckedInvocation::invoke (owner.onErrorOccurred, errorMessage); | |||
| } | |||
| File currentFile; | |||