NestedInnerClassNames.java revision 610:4172cfff05f0
1/*
2 * @test  /nodynamiccopyright/
3 * @bug 4037746 4277279 4350658 4785453
4 * @summary Verify that an inner class cannot have the same simple name as an enclosing one.
5 * @author William Maddox (maddox)
6 *
7 * @compile/fail/ref=NestedInnerClassNames.out -XDrawDiagnostics NestedInnerClassNames.java
8 */
9
10/*
11 * This program should compile with errors as marked.
12 */
13
14public class NestedInnerClassNames {
15
16    class NestedInnerClassNames {}              // ERROR
17
18    void m1() {
19        class NestedInnerClassNames {}          // ERROR
20    }
21
22    class foo {
23        class foo { }                           // ERROR
24    }
25
26    void m2 () {
27        class foo {
28            class foo { }                       // ERROR
29        }
30    }
31
32    class bar {
33        class foo { }
34        class NestedInnerClassNames {}          // ERROR
35    }
36
37    void m3() {
38        class bar {
39            class foo { }
40            class NestedInnerClassNames {}      // ERROR
41        }
42    }
43
44    class baz {
45        class baz {                             // ERROR
46            class baz { }                       // ERROR
47        }
48    }
49
50    void m4() {
51        class baz {
52            class baz {                         // ERROR
53                class baz { }                   // ERROR
54            }
55        }
56    }
57
58    class foo$bar {
59        class foo$bar {                         // ERROR
60            class foo { }
61            class bar { }
62        }
63    }
64
65    void m5() {
66        class foo$bar {
67            class foo$bar {                     // ERROR
68                class foo { }
69                class bar { }
70            }
71        }
72    }
73
74    class $bar {
75        class foo {
76            class $bar { }                      // ERROR
77        }
78    }
79
80    void m6() {
81        class $bar {
82            class foo {
83                class $bar { }                  // ERROR
84            }
85        }
86    }
87
88    class bar$bar {
89        class bar {
90            class bar{ }                       // ERROR
91        }
92    }
93
94    void m7() {
95        class bar$bar {
96            class bar {
97                class bar{ }                   // ERROR
98            }
99        }
100    }
101
102    // The name of the class below clashes with the name of the
103    // class created above for 'class foo { class foo {} }'.
104    // The clash follows from the naming requirements of the inner
105    // classes spec, but is most likely a specification bug.
106
107    // Error may be reported here.  See 4278961.
108    // As of Merlin-beta b21, this now results in an error.
109    class foo$foo { }                           // ERROR
110
111}
112