1 /* 2 * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 * @test 26 * @bug 6474890 27 * @summary javap does not open .zip files in -classpath 28 * @modules jdk.jdeps 29 */ 30 31 import java.io.*; 32 import java.util.zip.*; 33 34 public class T6474890 { 35 public static void main(String[] args) throws Exception { 36 new T6474890().run(); 37 } 38 39 public void run() throws IOException { 40 File classDir = new File("classes"); 41 classDir.mkdir(); 42 43 String className = "Test"; 44 File javaFile = writeTestFile(className); 45 compileTestFile(classDir, javaFile); 46 47 File zipFile = zip(classDir, new File(classDir + ".zip")); 48 javap("-classpath", zipFile.getPath(), className); 49 50 File jarFile = zip(classDir, new File(classDir + ".jar")); 51 javap("-classpath", zipFile.getPath(), className); 52 } 53 54 File writeTestFile(String name) throws IOException { 55 File f = new File(name + ".java"); 56 PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(f))); 57 out.println("class " + name + " { }"); 58 out.close(); 59 return f; 60 } 61 62 void compileTestFile(File classDir, File file) { 63 int rc = com.sun.tools.javac.Main.compile( 64 new String[] { "-d", classDir.getPath(), file.getPath() }); 65 if (rc != 0) 66 throw new Error("compilation failed. rc=" + rc); 67 } 68 69 File zip(File dir, File zipFile) throws IOException { 70 ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile)); 71 for (File file: dir.listFiles()) { 72 if (file.isFile()) { 73 byte[] data = new byte[(int) file.length()]; 74 DataInputStream in = new DataInputStream(new FileInputStream(file)); 75 in.readFully(data); 76 in.close(); 77 zipOut.putNextEntry(new ZipEntry(file.getName())); 78 zipOut.write(data, 0, data.length); 79 zipOut.closeEntry(); 80 } 81 } 82 zipOut.close(); 83 return zipFile; 84 } 85 86 String javap(String... args) { 87 StringWriter sw = new StringWriter(); 88 PrintWriter out = new PrintWriter(sw); 89 //sun.tools.javap.Main.entry(args); 90 int rc = com.sun.tools.javap.Main.run(args, out); 91 if (rc != 0) 92 throw new Error("javap failed. rc=" + rc); 93 out.close(); 94 return sw.toString(); 95 } 96 }