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