From: Roland Häder Date: Sun, 24 Aug 2025 09:59:30 +0000 (+0200) Subject: Continued: X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=48ef6a928131b02a9941374c3074931a2658d5d1;p=core.git Continued: - throw proper exception (NPE) when inner file object isn't there - close inner file object first --- diff --git a/framework/main/classes/file_directories/class_BaseAbstractFile.php b/framework/main/classes/file_directories/class_BaseAbstractFile.php index 86756032..e20a5af7 100644 --- a/framework/main/classes/file_directories/class_BaseAbstractFile.php +++ b/framework/main/classes/file_directories/class_BaseAbstractFile.php @@ -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 diff --git a/framework/main/classes/file_directories/class_BaseFileIo.php b/framework/main/classes/file_directories/class_BaseFileIo.php index 3bc78470..db13e48c 100644 --- a/framework/main/classes/file_directories/class_BaseFileIo.php +++ b/framework/main/classes/file_directories/class_BaseFileIo.php @@ -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