From 5cf9151a99ca5a123a6ef1157fd3a68842b5da9a Mon Sep 17 00:00:00 2001 From: "Gary D. Gregory" Date: Fri, 7 Feb 2025 08:07:03 -0500 Subject: [PATCH] [BCEL-376] ClassPath.close() throws UnsupportedOperationException when created with system-classpath --- src/changes/changes.xml | 1 + .../java/org/apache/bcel/util/ModularRuntimeImage.java | 6 +++++- src/test/java/org/apache/bcel/util/ClassPathTestCase.java | 8 +++++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index f0ab4698fc..611e3c6b57 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -63,6 +63,7 @@ The type attribute can be add,update,fix,remove. Replace internal use of Locale.ENGLISH with Locale.ROOT. Wrong permissions on bcel .jar file in binary .tar.gz distribution file. + ClassPath.close() throws UnsupportedOperationException when created with system-classpath. Add Const.MAJOR_25. Add Const.MINOR_25. diff --git a/src/main/java/org/apache/bcel/util/ModularRuntimeImage.java b/src/main/java/org/apache/bcel/util/ModularRuntimeImage.java index d39b71fd76..9001561539 100644 --- a/src/main/java/org/apache/bcel/util/ModularRuntimeImage.java +++ b/src/main/java/org/apache/bcel/util/ModularRuntimeImage.java @@ -81,7 +81,11 @@ public void close() throws IOException { classLoader.close(); } if (fileSystem != null) { - fileSystem.close(); + try { + fileSystem.close(); + } catch (final UnsupportedOperationException e) { + // do nothing + } } } diff --git a/src/test/java/org/apache/bcel/util/ClassPathTestCase.java b/src/test/java/org/apache/bcel/util/ClassPathTestCase.java index 7fb1d0b930..b69599d56c 100644 --- a/src/test/java/org/apache/bcel/util/ClassPathTestCase.java +++ b/src/test/java/org/apache/bcel/util/ClassPathTestCase.java @@ -16,7 +16,6 @@ * specific language governing permissions and limitations * under the License. */ - package org.apache.bcel.util; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -29,6 +28,13 @@ public class ClassPathTestCase extends AbstractTestCase { + @Test + void testClose() throws IOException { + try (ClassPath cp = new ClassPath(ClassPath.getClassPath())) { + assertNotNull(cp); + } + } + @Test public void testGetClassFile() throws IOException { assertNotNull(ClassPath.SYSTEM_CLASS_PATH.getClassFile("java.lang.String"));