You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2022/08/13 18:05:44 UTC

[commons-bcel] branch master updated: Close resources (#138)

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-bcel.git


The following commit(s) were added to refs/heads/master by this push:
     new 16b89fd2 Close resources (#138)
16b89fd2 is described below

commit 16b89fd20d6050cd0cbf93366d7c14360569847a
Author: Michael Ernst <me...@cs.washington.edu>
AuthorDate: Sat Aug 13 11:05:40 2022 -0700

    Close resources (#138)
    
    * Close resources
    
    * Use `UncheckedIOException` instead of `Error`
---
 src/examples/Package.java                          |  5 ++-
 src/main/java/org/apache/bcel/Repository.java      |  3 +-
 .../java/org/apache/bcel/util/AttributeHTML.java   |  6 ++--
 src/main/java/org/apache/bcel/util/Class2HTML.java | 12 +++----
 src/main/java/org/apache/bcel/util/CodeHTML.java   | 19 ++++++-----
 .../java/org/apache/bcel/util/ConstantHTML.java    | 39 +++++++++++-----------
 src/main/java/org/apache/bcel/util/MethodHTML.java | 37 ++++++++++----------
 .../java/org/apache/bcel/AbstractTestCase.java     | 11 ++++--
 8 files changed, 70 insertions(+), 62 deletions(-)

diff --git a/src/examples/Package.java b/src/examples/Package.java
index 5f1d108c..5576aebb 100644
--- a/src/examples/Package.java
+++ b/src/examples/Package.java
@@ -160,14 +160,13 @@ public class Package {
 
         System.out.println("Creating jar file: " + defaultJar);
 
-        // starting processing: Grab from the dependents list an add back to it
+        // starting processing: Grab from the dependents list and add back to it
         // and the allClasses list. see addDependents
         while (!dependents.isEmpty()) {
             final String name = dependents.firstKey();
             final String from = dependents.remove(name);
             if (allClasses.get(name) == null) {
-                try {
-                    final InputStream is = classPath.getInputStream(name);
+                try (final InputStream is = classPath.getInputStream(name)) {
                     clazz = new ClassParser(is, name).parse();
                     addDependents(clazz);
                 } catch (final IOException e) {
diff --git a/src/main/java/org/apache/bcel/Repository.java b/src/main/java/org/apache/bcel/Repository.java
index e2bf835f..c048fbdb 100644
--- a/src/main/java/org/apache/bcel/Repository.java
+++ b/src/main/java/org/apache/bcel/Repository.java
@@ -229,8 +229,7 @@ public abstract class Repository {
      *  found
      */
     public static ClassPath.ClassFile lookupClassFile( final String class_name ) {
-        try {
-            final ClassPath path = repository.getClassPath();
+        try (final ClassPath path = repository.getClassPath()) {
             if (path == null) {
                 return null;
             }
diff --git a/src/main/java/org/apache/bcel/util/AttributeHTML.java b/src/main/java/org/apache/bcel/util/AttributeHTML.java
index e3cc53a9..2dd16b07 100644
--- a/src/main/java/org/apache/bcel/util/AttributeHTML.java
+++ b/src/main/java/org/apache/bcel/util/AttributeHTML.java
@@ -17,6 +17,7 @@
  */
 package org.apache.bcel.util;
 
+import java.io.Closeable;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.nio.charset.Charset;
@@ -41,7 +42,7 @@ import org.apache.bcel.classfile.Utility;
 /**
  * Convert found attributes into HTML file.
  */
-final class AttributeHTML {
+final class AttributeHTML implements Closeable {
 
     private final String className; // name of current class
     private final PrintWriter printWriter; // file to write to
@@ -63,7 +64,8 @@ final class AttributeHTML {
     }
 
 
-    void close() {
+    @Override
+    public void close() {
         printWriter.println("</TABLE></BODY></HTML>");
         printWriter.close();
     }
diff --git a/src/main/java/org/apache/bcel/util/Class2HTML.java b/src/main/java/org/apache/bcel/util/Class2HTML.java
index 6dac298c..4e34ea7e 100644
--- a/src/main/java/org/apache/bcel/util/Class2HTML.java
+++ b/src/main/java/org/apache/bcel/util/Class2HTML.java
@@ -207,12 +207,12 @@ public class Class2HTML implements Constants {
         /*
          * Attributes can't be written in one step, so we just open a file which will be written consequently.
          */
-        final AttributeHTML attributeHtml = new AttributeHTML(dir, className, constantPool, constantHtml, charset);
-        new MethodHTML(dir, className, methods, javaClass.getFields(), constantHtml, attributeHtml, charset);
-        // Write main file (with frames, yuk)
-        writeMainHTML(attributeHtml, charset);
-        new CodeHTML(dir, className, methods, constantPool, constantHtml, charset);
-        attributeHtml.close();
+        try (final AttributeHTML attributeHtml = new AttributeHTML(dir, className, constantPool, constantHtml, charset)) {
+            new MethodHTML(dir, className, methods, javaClass.getFields(), constantHtml, attributeHtml, charset);
+            // Write main file (with frames, yuk)
+            writeMainHTML(attributeHtml, charset);
+            new CodeHTML(dir, className, methods, constantPool, constantHtml, charset);
+        }
     }
 
 
diff --git a/src/main/java/org/apache/bcel/util/CodeHTML.java b/src/main/java/org/apache/bcel/util/CodeHTML.java
index 4519699a..911fd740 100644
--- a/src/main/java/org/apache/bcel/util/CodeHTML.java
+++ b/src/main/java/org/apache/bcel/util/CodeHTML.java
@@ -57,16 +57,17 @@ private final String className; // name of current class
 //        this.methods = methods;
         this.constantPool = constant_pool;
         this.constantHtml = constant_html;
-        printWriter = new PrintWriter(dir + class_name + "_code.html", charset.name());
-        printWriter.print("<HTML><head><meta charset=\"");
-        printWriter.print(charset.name());
-        printWriter.println("\"></head>");
-        printWriter.println("<BODY BGCOLOR=\"#C0C0C0\">");
-        for (int i = 0; i < methods.length; i++) {
-            writeMethod(methods[i], i);
+        try (PrintWriter newPrintWriter = new PrintWriter(dir + class_name + "_code.html", charset.name())) {
+            printWriter = newPrintWriter;
+            printWriter.print("<HTML><head><meta charset=\"");
+            printWriter.print(charset.name());
+            printWriter.println("\"></head>");
+            printWriter.println("<BODY BGCOLOR=\"#C0C0C0\">");
+            for (int i = 0; i < methods.length; i++) {
+                writeMethod(methods[i], i);
+            }
+            printWriter.println("</BODY></HTML>");
         }
-        printWriter.println("</BODY></HTML>");
-        printWriter.close();
     }
 
 
diff --git a/src/main/java/org/apache/bcel/util/ConstantHTML.java b/src/main/java/org/apache/bcel/util/ConstantHTML.java
index bc1f9f3b..fae19d77 100644
--- a/src/main/java/org/apache/bcel/util/ConstantHTML.java
+++ b/src/main/java/org/apache/bcel/util/ConstantHTML.java
@@ -54,27 +54,28 @@ final class ConstantHTML {
         this.constantPool = constant_pool;
         this.methods = methods;
         constants = constant_pool.getConstantPool();
-        printWriter = new PrintWriter(dir + class_name + "_cp.html", charset.name());
-        constantRef = new String[constants.length];
-        constantRef[0] = "&lt;unknown&gt;";
-        printWriter.print("<HTML><head><meta charset=\"");
-        printWriter.print(charset.name());
-        printWriter.println("\"></head>");
-        printWriter.println("<BODY BGCOLOR=\"#C0C0C0\"><TABLE BORDER=0>");
-        // Loop through constants, constants[0] is reserved
-        for (int i = 1; i < constants.length; i++) {
-            if (i % 2 == 0) {
-                printWriter.print("<TR BGCOLOR=\"#C0C0C0\"><TD>");
-            } else {
-                printWriter.print("<TR BGCOLOR=\"#A0A0A0\"><TD>");
-            }
-            if (constants[i] != null) {
-                writeConstant(i);
+        try (PrintWriter newPrintWriter = new PrintWriter(dir + class_name + "_cp.html", charset.name())) {
+            printWriter = newPrintWriter;
+            constantRef = new String[constants.length];
+            constantRef[0] = "&lt;unknown&gt;";
+            printWriter.print("<HTML><head><meta charset=\"");
+            printWriter.print(charset.name());
+            printWriter.println("\"></head>");
+            printWriter.println("<BODY BGCOLOR=\"#C0C0C0\"><TABLE BORDER=0>");
+            // Loop through constants, constants[0] is reserved
+            for (int i = 1; i < constants.length; i++) {
+                if (i % 2 == 0) {
+                    printWriter.print("<TR BGCOLOR=\"#C0C0C0\"><TD>");
+                } else {
+                    printWriter.print("<TR BGCOLOR=\"#A0A0A0\"><TD>");
+                }
+                if (constants[i] != null) {
+                    writeConstant(i);
+                }
+                printWriter.print("</TD></TR>\n");
             }
-            printWriter.print("</TD></TR>\n");
+            printWriter.println("</TABLE></BODY></HTML>");
         }
-        printWriter.println("</TABLE></BODY></HTML>");
-        printWriter.close();
     }
 
 
diff --git a/src/main/java/org/apache/bcel/util/MethodHTML.java b/src/main/java/org/apache/bcel/util/MethodHTML.java
index f15110b6..377afeca 100644
--- a/src/main/java/org/apache/bcel/util/MethodHTML.java
+++ b/src/main/java/org/apache/bcel/util/MethodHTML.java
@@ -45,25 +45,26 @@ final class MethodHTML {
         this.className = className;
         this.attributeHtml = attributeHtml;
         this.constantHtml = constantHtml;
-        printWriter = new PrintWriter(dir + className + "_methods.html", charset.name());
-        printWriter.print("<HTML><head><meta charset=\"");
-        printWriter.print(charset.name());
-        printWriter.println("\"></head>");
-        printWriter.println("<BODY BGCOLOR=\"#C0C0C0\"><TABLE BORDER=0>");
-        printWriter.println("<TR><TH ALIGN=LEFT>Access&nbsp;flags</TH><TH ALIGN=LEFT>Type</TH>"
-                + "<TH ALIGN=LEFT>Field&nbsp;name</TH></TR>");
-        for (final Field field : fields) {
-            writeField(field);
-        }
-        printWriter.println("</TABLE>");
-        printWriter.println("<TABLE BORDER=0><TR><TH ALIGN=LEFT>Access&nbsp;flags</TH>"
-                + "<TH ALIGN=LEFT>Return&nbsp;type</TH><TH ALIGN=LEFT>Method&nbsp;name</TH>"
-                + "<TH ALIGN=LEFT>Arguments</TH></TR>");
-        for (int i = 0; i < methods.length; i++) {
-            writeMethod(methods[i], i);
+        try (PrintWriter newPrintWriter = new PrintWriter(dir + className + "_methods.html", charset.name())) {
+            printWriter = newPrintWriter;
+            printWriter.print("<HTML><head><meta charset=\"");
+            printWriter.print(charset.name());
+            printWriter.println("\"></head>");
+            printWriter.println("<BODY BGCOLOR=\"#C0C0C0\"><TABLE BORDER=0>");
+            printWriter.println("<TR><TH ALIGN=LEFT>Access&nbsp;flags</TH><TH ALIGN=LEFT>Type</TH>"
+                    + "<TH ALIGN=LEFT>Field&nbsp;name</TH></TR>");
+            for (final Field field : fields) {
+                writeField(field);
+            }
+            printWriter.println("</TABLE>");
+            printWriter.println("<TABLE BORDER=0><TR><TH ALIGN=LEFT>Access&nbsp;flags</TH>"
+                    + "<TH ALIGN=LEFT>Return&nbsp;type</TH><TH ALIGN=LEFT>Method&nbsp;name</TH>"
+                    + "<TH ALIGN=LEFT>Arguments</TH></TR>");
+            for (int i = 0; i < methods.length; i++) {
+                writeMethod(methods[i], i);
+            }
+            printWriter.println("</TABLE></BODY></HTML>");
         }
-        printWriter.println("</TABLE></BODY></HTML>");
-        printWriter.close();
     }
 
 
diff --git a/src/test/java/org/apache/bcel/AbstractTestCase.java b/src/test/java/org/apache/bcel/AbstractTestCase.java
index 0203fd00..d7ad5e66 100644
--- a/src/test/java/org/apache/bcel/AbstractTestCase.java
+++ b/src/test/java/org/apache/bcel/AbstractTestCase.java
@@ -19,6 +19,8 @@
 package org.apache.bcel;
 
 import java.io.File;
+import java.io.IOException;
+import java.io.UncheckedIOException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -63,9 +65,12 @@ public abstract class AbstractTestCase
 
     public SyntheticRepository createRepos(final String cpentry)
     {
-        final ClassPath cp = new ClassPath("target" + File.separator + "testdata"
-                + File.separator + cpentry + File.separator);
-        return SyntheticRepository.getInstance(cp);
+        try (ClassPath cp = new ClassPath("target" + File.separator + "testdata"
+                + File.separator + cpentry + File.separator)) {
+            return SyntheticRepository.getInstance(cp);
+        } catch (IOException e) {
+            throw new UncheckedIOException(e);
+        }
     }
 
     /**