Author: ggregory
Date: Sat Jul 28 15:51:42 2018
New Revision: 1836931

URL: http://svn.apache.org/viewvc?rev=1836931&view=rev
Log:
Make ivars private final and close resources properly.

Modified:
    commons/proper/bcel/trunk/src/main/java/org/apache/bcel/util/ClassPath.java

Modified: 
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/util/ClassPath.java
URL: 
http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/util/ClassPath.java?rev=1836931&r1=1836930&r2=1836931&view=diff
==============================================================================
--- commons/proper/bcel/trunk/src/main/java/org/apache/bcel/util/ClassPath.java 
(original)
+++ commons/proper/bcel/trunk/src/main/java/org/apache/bcel/util/ClassPath.java 
Sat Jul 28 15:51:42 2018
@@ -358,21 +358,22 @@ public class ClassPath implements Closea
 
     private static class JrtModules extends AbstractPathEntry {
 
-        URLClassLoader classLoader;
-        FileSystem fs;
-
+        private final URLClassLoader classLoader;
+        private final FileSystem fs;
         private final JrtModule[] modules;
 
         @SuppressWarnings("resource")
         public JrtModules() {
             final List<JrtModule> list = new ArrayList<>();
+            final Map<String, ?> emptyMap = Collections.emptyMap();
+            final Path jrePath = Paths.get(System.getProperty("java.home"));
+            final Path jrtFsPath = 
jrePath.resolve("lib").resolve("jrt-fs.jar");
+            URLClassLoader tempClassLoader = null;
+            FileSystem tempFs = null;
             try {
-                final Map<String, ?> emptyMap = Collections.emptyMap();
-                final Path jrePath = 
Paths.get(System.getProperty("java.home"));
-                final Path jrtFsPath = 
jrePath.resolve("lib").resolve("jrt-fs.jar");
-                this.classLoader = new URLClassLoader(new URL[] 
{jrtFsPath.toUri().toURL() });
-                this.fs = FileSystems.newFileSystem(URI.create("jrt:/"), 
emptyMap, classLoader);
-                try (DirectoryStream<Path> ds = 
Files.newDirectoryStream(fs.getPath("/modules"))) {
+                tempClassLoader = new URLClassLoader(new URL[] 
{jrtFsPath.toUri().toURL() });
+                tempFs = FileSystems.newFileSystem(URI.create("jrt:/"), 
emptyMap, tempClassLoader);
+                try (DirectoryStream<Path> ds = 
Files.newDirectoryStream(tempFs.getPath("/modules"))) {
                     final Iterator<Path> iterator = ds.iterator();
                     while (iterator.hasNext()) {
                         list.add(new JrtModule(iterator.next()));
@@ -382,6 +383,8 @@ public class ClassPath implements Closea
                 // TODO ?
                 e.printStackTrace();
             }
+            this.classLoader = tempClassLoader;
+            this.fs = tempFs;
             this.modules = list.toArray(new JrtModule[list.size()]);
         }
 
@@ -391,6 +394,12 @@ public class ClassPath implements Closea
                 for (final JrtModule module : modules) {
                     module.close();
                 }
+                if (classLoader != null) {
+                    classLoader.close();
+                }
+                if (fs != null) {
+                    fs.close();
+                }
             }
         }
 


Reply via email to