]> git.mxchange.org Git - core.git/commitdiff
Continued: master
authorRoland Häder <roland@mxchange.org>
Sun, 24 Aug 2025 09:59:30 +0000 (11:59 +0200)
committerRoland Häder <roland@mxchange.org>
Sun, 24 Aug 2025 09:59:30 +0000 (11:59 +0200)
- throw proper exception (NPE) when inner file object isn't there
- close inner file object first

framework/main/classes/file_directories/class_BaseAbstractFile.php
framework/main/classes/file_directories/class_BaseFileIo.php

index 86756032c016c6a31d339f1f593f9600c5606aac..e20a5af7df5d0189992b6bdc9f1908134cd472be 100644 (file)
@@ -6,6 +6,7 @@ namespace Org\Mxchange\CoreFramework\Filesystem\File;
 use Org\Mxchange\CoreFramework\Filesystem\CloseableFile;
 use Org\Mxchange\CoreFramework\Filesystem\FilePointer;
 use Org\Mxchange\CoreFramework\Generic\FrameworkInterface;
+use Org\Mxchange\CoreFramework\Generic\NullPointerException;
 use Org\Mxchange\CoreFramework\Generic\UnsupportedOperationException;
 use Org\Mxchange\CoreFramework\Object\BaseFrameworkSystem;
 
@@ -67,9 +68,14 @@ abstract class BaseAbstractFile extends BaseFrameworkSystem implements FilePoint
         * @return      void
         */
        public final function __destruct() {
-               // Try to close a file
+               // Debug message
                /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('BASE-ABSTRACT-FILE: DESTRUCTED!');
-               $this->closeFile();
+
+               // Is file object set?
+               if ($this->isFileObjectSet()) {
+                       // Try to close a file
+                       $this->closeFile();
+               }
 
                // Call the parent destructor
                parent::__destruct();
@@ -205,8 +211,17 @@ abstract class BaseAbstractFile extends BaseFrameworkSystem implements FilePoint
         * @return      void
         */
        public function closeFile (): void {
-               // Close down pointer instance as well by unsetting it
+               // Check condition
                /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('BASE-ABSTRACT-FILE: CALLED!');
+               if (!$this->isFileObjectSet()) {
+                       // Throw NPE
+                       throw new NullPointerException($this, FrameworkInterface::EXCEPTION_IS_NULL_POINTER);
+               }
+
+               // Close inner file object first
+               $this->getPointerInstance()->closeFile();
+
+               // Close down pointer instance as well by unsetting it
                $this->unsetPointerInstance();
 
                // Trace message
index 3bc78470083b3e51e2f7c4fc4a2ccde2029039f9..db13e48c94d70ac90809170e1436a365fe1812cc 100644 (file)
@@ -83,17 +83,13 @@ abstract class BaseFileIo extends BaseFrameworkSystem implements FilePointer, Cl
         *
         * @return      void
         * @throws      NullPointerException    If the file pointer instance is not set by setFileObject()
-        * @throws      LogicException  If there is no object being set
         */
        public function closeFile (): void {
                // Validate parameter
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-FILE-IO: fileName=%s - CALLED!', $this->getFileObject()->getPathname()));
-               if (is_null($this->getFileObject())) {
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-FILE-IO: this->isFileObjectSet()=%d - CALLED!', $this->isFileObjectSet()));
+               if (!$this->isFileObjectSet()) {
                        // Pointer not initialized
                        throw new NullPointerException($this, FrameworkInterface::EXCEPTION_IS_NULL_POINTER);
-               } elseif (!is_object($this->getFileObject())) {
-                       // Pointer is not a valid resource!
-                       throw new LogicException(sprintf('this->fileObject[]=%s is no object', gettype($this->getFileObject())), FrameworkInterface::EXCEPTION_LOGIC_EXCEPTION);
                }
 
                // Close the file pointer by NULL-ing it
@@ -110,8 +106,15 @@ abstract class BaseFileIo extends BaseFrameworkSystem implements FilePointer, Cl
         * @return      void
         */
        protected final function resetFileObject (): void {
+               // Validate parameter
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-FILE-IO: this->isFileObjectSet()=%d - CALLED!', $this->isFileObjectSet()));
+               if (!$this->isFileObjectSet()) {
+                       // Pointer not initialized
+                       throw new NullPointerException($this, FrameworkInterface::EXCEPTION_IS_NULL_POINTER);
+               }
+
                // Set it to NULL
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('BASE-FILE-IO: Setting this->fileObject=NULL - CALLED!');
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('BASE-FILE-IO: Setting this->fileObject=NULL ...');
                $this->fileObject = NULL;
 
                // Trace message