1 /*
2  * Copyright (c) 2008, 2016, 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 4075403
27  * @summary Use javap to inquire about a specific inner class
28  * @modules jdk.jdeps/com.sun.tools.javap
29  */
30 
31 
32 import java.io.*;
33 
34 public class T4075403 {
main(String[] args)35     public static void main(String[] args) throws Exception {
36         new T4075403().run();
37     }
38 
run()39     public void run() throws IOException {
40 
41         File javaFile = writeTestFile();
42         File classFile = compileTestFile(javaFile);
43         javap("Outer.Inner");
44     }
45 
writeTestFile()46     File writeTestFile() throws IOException {
47         File f = new File("Outer.java");
48         PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(f)));
49         out.println("class Outer { ");
50         out.println("    class Inner { }");
51         out.println("}");
52         out.close();
53         return f;
54     }
55 
compileTestFile(File f)56     File compileTestFile(File f) {
57         int rc = com.sun.tools.javac.Main.compile(new String[] { "-g", f.getPath() });
58         if (rc != 0)
59             throw new Error("compilation failed. rc=" + rc);
60         String path = f.getPath();
61         return new File(path.substring(0, path.length() - 5) + ".class");
62     }
63 
javap(String className)64     String javap(String className) {
65         StringWriter sw = new StringWriter();
66         PrintWriter out = new PrintWriter(sw);
67         int rc = com.sun.tools.javap.Main.run(new String[] { "-classpath", ".", className }, out);
68         if (rc != 0)
69             throw new Error("javap failed. rc=" + rc);
70         out.close();
71         System.out.println(sw.toString());
72         return sw.toString();
73     }
74 }
75