0N/A/*
0N/A * @test /nodynamiccopyright/
0N/A * @bug 4037746 4277279 4350658 4785453
0N/A * @summary Verify that an inner class cannot have the same simple name as an enclosing one.
0N/A * @author William Maddox (maddox)
0N/A *
610N/A * @compile/fail/ref=NestedInnerClassNames.out -XDrawDiagnostics NestedInnerClassNames.java
0N/A */
0N/A
0N/A/*
0N/A * This program should compile with errors as marked.
0N/A */
0N/A
0N/Apublic class NestedInnerClassNames {
0N/A
0N/A class NestedInnerClassNames {} // ERROR
0N/A
0N/A void m1() {
0N/A class NestedInnerClassNames {} // ERROR
0N/A }
0N/A
0N/A class foo {
0N/A class foo { } // ERROR
0N/A }
0N/A
0N/A void m2 () {
0N/A class foo {
0N/A class foo { } // ERROR
0N/A }
0N/A }
0N/A
0N/A class bar {
0N/A class foo { }
0N/A class NestedInnerClassNames {} // ERROR
0N/A }
0N/A
0N/A void m3() {
0N/A class bar {
0N/A class foo { }
0N/A class NestedInnerClassNames {} // ERROR
0N/A }
0N/A }
0N/A
0N/A class baz {
0N/A class baz { // ERROR
0N/A class baz { } // ERROR
0N/A }
0N/A }
0N/A
0N/A void m4() {
0N/A class baz {
0N/A class baz { // ERROR
0N/A class baz { } // ERROR
0N/A }
0N/A }
0N/A }
0N/A
0N/A class foo$bar {
0N/A class foo$bar { // ERROR
0N/A class foo { }
0N/A class bar { }
0N/A }
0N/A }
0N/A
0N/A void m5() {
0N/A class foo$bar {
0N/A class foo$bar { // ERROR
0N/A class foo { }
0N/A class bar { }
0N/A }
0N/A }
0N/A }
0N/A
0N/A class $bar {
0N/A class foo {
0N/A class $bar { } // ERROR
0N/A }
0N/A }
0N/A
0N/A void m6() {
0N/A class $bar {
0N/A class foo {
0N/A class $bar { } // ERROR
0N/A }
0N/A }
0N/A }
0N/A
0N/A class bar$bar {
0N/A class bar {
0N/A class bar{ } // ERROR
0N/A }
0N/A }
0N/A
0N/A void m7() {
0N/A class bar$bar {
0N/A class bar {
0N/A class bar{ } // ERROR
0N/A }
0N/A }
0N/A }
0N/A
0N/A // The name of the class below clashes with the name of the
0N/A // class created above for 'class foo { class foo {} }'.
0N/A // The clash follows from the naming requirements of the inner
0N/A // classes spec, but is most likely a specification bug.
0N/A
0N/A // Error may be reported here. See 4278961.
0N/A // As of Merlin-beta b21, this now results in an error.
0N/A class foo$foo { } // ERROR
0N/A
0N/A}