1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/test/tools/javac/NestedInnerClassNames.java Sat Dec 01 00:00:00 2007 +0000 1.3 @@ -0,0 +1,111 @@ 1.4 +/* 1.5 + * @test /nodynamiccopyright/ 1.6 + * @bug 4037746 4277279 4350658 4785453 1.7 + * @summary Verify that an inner class cannot have the same simple name as an enclosing one. 1.8 + * @author William Maddox (maddox) 1.9 + * 1.10 + * @run shell NestedInnerClassNames.sh 1.11 + */ 1.12 + 1.13 +/* 1.14 + * This program should compile with errors as marked. 1.15 + */ 1.16 + 1.17 +public class NestedInnerClassNames { 1.18 + 1.19 + class NestedInnerClassNames {} // ERROR 1.20 + 1.21 + void m1() { 1.22 + class NestedInnerClassNames {} // ERROR 1.23 + } 1.24 + 1.25 + class foo { 1.26 + class foo { } // ERROR 1.27 + } 1.28 + 1.29 + void m2 () { 1.30 + class foo { 1.31 + class foo { } // ERROR 1.32 + } 1.33 + } 1.34 + 1.35 + class bar { 1.36 + class foo { } 1.37 + class NestedInnerClassNames {} // ERROR 1.38 + } 1.39 + 1.40 + void m3() { 1.41 + class bar { 1.42 + class foo { } 1.43 + class NestedInnerClassNames {} // ERROR 1.44 + } 1.45 + } 1.46 + 1.47 + class baz { 1.48 + class baz { // ERROR 1.49 + class baz { } // ERROR 1.50 + } 1.51 + } 1.52 + 1.53 + void m4() { 1.54 + class baz { 1.55 + class baz { // ERROR 1.56 + class baz { } // ERROR 1.57 + } 1.58 + } 1.59 + } 1.60 + 1.61 + class foo$bar { 1.62 + class foo$bar { // ERROR 1.63 + class foo { } 1.64 + class bar { } 1.65 + } 1.66 + } 1.67 + 1.68 + void m5() { 1.69 + class foo$bar { 1.70 + class foo$bar { // ERROR 1.71 + class foo { } 1.72 + class bar { } 1.73 + } 1.74 + } 1.75 + } 1.76 + 1.77 + class $bar { 1.78 + class foo { 1.79 + class $bar { } // ERROR 1.80 + } 1.81 + } 1.82 + 1.83 + void m6() { 1.84 + class $bar { 1.85 + class foo { 1.86 + class $bar { } // ERROR 1.87 + } 1.88 + } 1.89 + } 1.90 + 1.91 + class bar$bar { 1.92 + class bar { 1.93 + class bar{ } // ERROR 1.94 + } 1.95 + } 1.96 + 1.97 + void m7() { 1.98 + class bar$bar { 1.99 + class bar { 1.100 + class bar{ } // ERROR 1.101 + } 1.102 + } 1.103 + } 1.104 + 1.105 + // The name of the class below clashes with the name of the 1.106 + // class created above for 'class foo { class foo {} }'. 1.107 + // The clash follows from the naming requirements of the inner 1.108 + // classes spec, but is most likely a specification bug. 1.109 + 1.110 + // Error may be reported here. See 4278961. 1.111 + // As of Merlin-beta b21, this now results in an error. 1.112 + class foo$foo { } // ERROR 1.113 + 1.114 +}