1 /*
2  * Copyright (c) 2001, 2018, 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 4368402
27  * @summary UnpreparedByName verifies that unprepared classes
28  * won't be returned by classesByName.
29  * @author Robert Field
30  *
31  * @run build TestScaffold VMConnection
32  * @run compile -g InnerTarg.java
33  * @run build UnpreparedByName
34  *
35  * @run driver UnpreparedByName InnerTarg
36  */
37 import com.sun.jdi.*;
38 import com.sun.jdi.event.*;
39 import com.sun.jdi.request.*;
40 
41 import java.util.List;
42 import java.util.Iterator;
43 
44 public class UnpreparedByName extends TestScaffold {
45 
main(String args[])46     public static void main(String args[]) throws Exception {
47         new UnpreparedByName(args).startTests();
48     }
49 
UnpreparedByName(String args[])50     UnpreparedByName(String args[]) throws Exception {
51         super(args);
52     }
53 
runTests()54     protected void runTests() throws Exception {
55         startTo("InnerTarg", "go", "()V");
56 
57         List classes = vm().classesByName("InnerTarg$TheInner");
58         if (classes.size() == 0) {
59             System.out.println("PASS: InnerTarg$TheInner not returned");
60         } else {
61             ReferenceType cls = (ReferenceType)classes.get(0);
62             boolean preped = cls.isPrepared();
63 
64             if (!preped) {
65                 System.err.println("Inner class not prepared: " + cls);
66             }
67             cls.methods();  // exception if methods unprepared
68             if (!preped) {
69                 throw new Exception("Inner class not prepared: " + cls);
70             }
71         }
72 
73         // Allow application to complete
74         resumeToVMDisconnect();
75     }
76 }
77