T4777949.java revision 2942:08092deced3f
1214501Srpaulo/* 2214501Srpaulo * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. 3214501Srpaulo * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4214501Srpaulo * 5252726Srpaulo * This code is free software; you can redistribute it and/or modify it 6252726Srpaulo * under the terms of the GNU General Public License version 2 only, as 7214501Srpaulo * published by the Free Software Foundation. 8214501Srpaulo * 9214501Srpaulo * This code is distributed in the hope that it will be useful, but WITHOUT 10214501Srpaulo * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11214501Srpaulo * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12214501Srpaulo * version 2 for more details (a copy is included in the LICENSE file that 13214501Srpaulo * accompanied this code). 14214501Srpaulo * 15214501Srpaulo * You should have received a copy of the GNU General Public License version 16214501Srpaulo * 2 along with this work; if not, write to the Free Software Foundation, 17252726Srpaulo * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18214501Srpaulo * 19214501Srpaulo * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20214501Srpaulo * or visit www.oracle.com if you need additional information or have any 21214501Srpaulo * questions. 22214501Srpaulo */ 23214501Srpaulo 24214501Srpauloimport java.io.*; 25214501Srpauloimport java.util.*; 26214501Srpauloimport javax.tools.*; 27214501Srpauloimport com.sun.tools.javap.*; 28214501Srpaulo 29214501Srpaulo/* 30252726Srpaulo * @test 31252726Srpaulo * @bug 4777949 32214501Srpaulo * @summary Warn javap usage on package with simple name 33214501Srpaulo * @modules jdk.jdeps 34214501Srpaulo */ 35214501Srpaulopublic class T4777949 { 36214501Srpaulo public static void main(String... args) throws Exception { 37214501Srpaulo new T4777949().run(); 38214501Srpaulo } 39214501Srpaulo 40214501Srpaulo void run() throws Exception { 41214501Srpaulo File javaFile = writeTestFile(); 42214501Srpaulo File classFile = compileTestFile(javaFile); 43214501Srpaulo 44214501Srpaulo test(".", "p.q.r.Test", false); 45214501Srpaulo test("p", "q.r.Test", true); 46214501Srpaulo test("p/q", "r.Test", true); 47214501Srpaulo test("p/q/r", "Test", true); 48214501Srpaulo test(".", "p.q.r.Test.Inner", false); 49214501Srpaulo test(".", "p.q.r.Test$Inner", false); 50214501Srpaulo test("p", "q.r.Test.Inner", true); 51214501Srpaulo test("p", "q.r.Test$Inner", true); 52214501Srpaulo 53214501Srpaulo if (errors > 0) 54214501Srpaulo throw new Exception(errors + " errors found"); 55214501Srpaulo } 56214501Srpaulo 57214501Srpaulo void test(String classPath, String className, boolean expectWarnings) { 58214501Srpaulo List<Diagnostic<? extends JavaFileObject>> diags = 59214501Srpaulo javap(Arrays.asList("-classpath", classPath), Arrays.asList(className)); 60214501Srpaulo boolean foundWarnings = false; 61214501Srpaulo for (Diagnostic<? extends JavaFileObject> d: diags) { 62214501Srpaulo if (d.getKind() == Diagnostic.Kind.WARNING) 63214501Srpaulo foundWarnings = true; 64214501Srpaulo } 65214501Srpaulo } 66214501Srpaulo 67214501Srpaulo 68214501Srpaulo File writeTestFile() throws IOException { 69214501Srpaulo File f = new File("Test.java"); 70214501Srpaulo PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(f))); 71214501Srpaulo out.println("package p.q.r;"); 72214501Srpaulo out.println("class Test { class Inner { } }"); 73214501Srpaulo out.close(); 74252726Srpaulo return f; 75214501Srpaulo } 76214501Srpaulo 77214501Srpaulo File compileTestFile(File f) { 78214501Srpaulo int rc = com.sun.tools.javac.Main.compile(new String[] { "-d", ".", f.getPath() }); 79214501Srpaulo if (rc != 0) 80214501Srpaulo throw new Error("compilation failed. rc=" + rc); 81252726Srpaulo String path = f.getPath(); 82214501Srpaulo return new File(path.substring(0, path.length() - 5) + ".class"); 83252726Srpaulo } 84214501Srpaulo 85214501Srpaulo List<Diagnostic<? extends JavaFileObject>> javap(List<String> args, List<String> classes) { 86214501Srpaulo DiagnosticCollector<JavaFileObject> dc = new DiagnosticCollector<JavaFileObject>(); 87214501Srpaulo StringWriter sw = new StringWriter(); 88214501Srpaulo PrintWriter pw = new PrintWriter(sw); 89214501Srpaulo JavaFileManager fm = JavapFileManager.create(dc, pw); 90214501Srpaulo JavapTask t = new JavapTask(pw, fm, dc, args, classes); 91214501Srpaulo int ok = t.run(); 92214501Srpaulo 93214501Srpaulo List<Diagnostic<? extends JavaFileObject>> diags = dc.getDiagnostics(); 94214501Srpaulo 95214501Srpaulo if (ok != 0) 96214501Srpaulo error("javap failed unexpectedly"); 97214501Srpaulo 98214501Srpaulo System.err.println("args=" + args + " classes=" + classes + "\n" 99214501Srpaulo + diags + "\n" 100 + sw); 101 102 return diags; 103 } 104 105 void error(String msg) { 106 System.err.println("error: " + msg); 107 errors++; 108 } 109 110 int errors; 111} 112 113