make/tools/classanalyzer/src/com/sun/classanalyzer/Modularizer.java

Print this page

        

*** 188,197 **** --- 188,200 ---- * @param res a ResourceFile * @param filter a Filter * @return the number of bytes copied */ long writeResource(ResourceFile res, Filter filter) throws IOException { + if (res.isService()) + return writeService(res, filter); + String pathname = res.getPathname(); Copier visitor = new Copier(classDir, filter); if (lastVisitedClassPath != null) { ClassPathEntry cp = lastVisitedClassPath.accept(visitor, pathname); if (cp != null) {
*** 213,235 **** --- 216,275 ---- } return 0; } /** + * Write the service descriptor file if not filtered + * + * @param res a ResourceFile + * @param filter a Filter + * @return the number of bytes copied + */ + long writeService(ResourceFile res, Filter filter) throws IOException { + String pathname = res.getPathname(); + Copier visitor = new Copier(classDir, filter); + boolean foundOne = false; + int bytes = 0; + + // scan all class path entries for services + for (ClassPathEntry cp : cpath.entries()) { + ClassPathEntry src = cp.accept(visitor, pathname); + if (src != null) { + bytes += visitor.bytes; + if (foundOne == false) { + foundOne = true; + visitor = new Copier(classDir, null, true); // append subsequent + } + } + } + return bytes; + } + + /** * A ClassPathEntry visitor to copy a file to the given destination * if not filtered. */ class Copier implements ClassPathEntry.Visitor<ClassPathEntry, String> { final Filter filter; final File dest; + final boolean append; long bytes = 0; Copier(File dest, Filter filter) { + this(dest, filter, false); + } + + Copier(File dest, Filter filter, boolean append) { this.filter = filter; this.dest = dest; + this.append = append; } + private boolean isService(String name) { + return name.startsWith("META-INF/services") ? true : false; + } + @Override public ClassPathEntry visitFile(File src, ClassPathEntry cp, String pathname) throws IOException { String name = pathname.replace(File.separatorChar, '/'); if (cp.getName().endsWith(File.separator + pathname) && matches(src, name)) {
*** 272,295 **** return null; } } boolean matches(File src, String name) throws IOException { ! if (!name.startsWith("META-INF/services")) { return true; } ! BufferedInputStream in = new BufferedInputStream(new FileInputStream(src)); ! try { return matches(in, name); - } finally { - in.close(); } } boolean matches(JarFile jf, JarEntry e, String name) throws IOException { ! if (!name.startsWith("META-INF/services")) { return true; } return matches(jf.getInputStream(e), name); } --- 312,333 ---- return null; } } boolean matches(File src, String name) throws IOException { ! if (!isService(name)) { return true; } ! try (FileInputStream fis = new FileInputStream(src); ! BufferedInputStream in = new BufferedInputStream(fis)) { return matches(in, name); } } boolean matches(JarFile jf, JarEntry e, String name) throws IOException { ! if (!isService(name)) { return true; } return matches(jf.getInputStream(e), name); }
*** 314,339 **** if (!dst.exists()) { Files.createFile(dst); } byte[] buf = new byte[8192]; - InputStream in = jf.getInputStream(e); long bytes = 0; ! try { ! FileOutputStream out = new FileOutputStream(dst); ! try { int n; while ((n = in.read(buf)) > 0) { out.write(buf, 0, n); bytes += n; } - } finally { - out.close(); } - } finally { - in.close(); - } long lastModified = e.getTime(); if (lastModified > 0) { dst.setLastModified(lastModified); } --- 352,370 ---- if (!dst.exists()) { Files.createFile(dst); } byte[] buf = new byte[8192]; long bytes = 0; ! try (InputStream in = jf.getInputStream(e); ! FileOutputStream out = new FileOutputStream(dst, append)) { int n; while ((n = in.read(buf)) > 0) { out.write(buf, 0, n); bytes += n; } } long lastModified = e.getTime(); if (lastModified > 0) { dst.setLastModified(lastModified); }
*** 346,372 **** if (!dst.exists()) { Files.createFile(dst); } - BufferedInputStream in = new BufferedInputStream(new FileInputStream(src)); byte[] buf = new byte[8192]; long bytes = 0; ! try { ! FileOutputStream out = new FileOutputStream(dst); ! try { int n; while ((n = in.read(buf)) > 0) { out.write(buf, 0, n); bytes += n; } - } finally { - out.close(); } - } finally { - in.close(); - } dst.setLastModified(src.lastModified()); if (src.canExecute()) { dst.setExecutable(true, false); } return bytes; --- 377,397 ---- if (!dst.exists()) { Files.createFile(dst); } byte[] buf = new byte[8192]; long bytes = 0; ! try (InputStream fin = new FileInputStream(src); ! BufferedInputStream in = new BufferedInputStream(fin); ! FileOutputStream out = new FileOutputStream(dst, append)) { int n; while ((n = in.read(buf)) > 0) { out.write(buf, 0, n); bytes += n; } } dst.setLastModified(src.lastModified()); if (src.canExecute()) { dst.setExecutable(true, false); } return bytes;