| /* |
| * @test /nodynamiccopyright/ |
| * @bug 8007401 8007427 8061549 |
| * @author sogoel |
| * @summary Test generation of warnings when '_' is used an identifier |
| * @compile/fail/ref=IdentifierTest8.out -source 8 -Xlint:-options -Werror -XDrawDiagnostics IdentifierTest.java |
| * @compile/fail/ref=IdentifierTest9.out -XDrawDiagnostics IdentifierTest.java |
| */ |
| |
| import java.util.List; |
| |
| /* |
| * This test checks for the generation of warnings when '_' is used as an |
| * identifier in following cases: |
| * package name, class name, class member names including constructor |
| * cass members access using class object or this |
| * loops: for, enhanced-for, while, do-while |
| * arrays, |
| * switch, |
| * annotations, element=value pair |
| * try-catch, |
| * enum |
| * break + identifier |
| * continue + identifier |
| * type-bounds |
| * Above cases for identifier occurrences have been identified from JLS v3. |
| * |
| */ |
| |
| // Test class |
| public class IdentifierTest { |
| class _UnderscorePrefix {} |
| class Underscore_Infix {} |
| class UnderscorePostfix_ {} |
| class __ {} |
| |
| static final int _prefix = 10; |
| List<String> postfix_; |
| |
| // Test: class with name as '_' |
| class _ { |
| String in_fix; |
| //Test: Constructor, "_", local variable, value |
| public _() { |
| String _ = "_"; |
| in_fix = _; |
| } |
| |
| public void testClassMembersAccess(String[] _args) { |
| // Instance creation |
| _ _ = new _(); |
| //Method invocation |
| _.testTryCatch(); |
| //Field access |
| _.in_fix = "__"; |
| } |
| |
| // Test: try-catch |
| public void testTryCatch() { |
| try { |
| int _ = 30/0; |
| } catch (ArithmeticException _) { |
| System.out.println("Got Arithmentic exception " + _); |
| } |
| } |
| } |
| |
| // Test: class member access using class object '_', use of this. |
| class TestMisc { |
| int _; |
| void _ () { |
| this._ = 5; |
| } |
| |
| public void testClassMemberAccess(String[] args) { |
| // Instance creation |
| TestMisc _ = new TestMisc(); |
| //Field access |
| _._ = 10; |
| //Method access |
| _._(); |
| } |
| } |
| |
| //Test: Type Bounds |
| class TestTypeBounds { |
| //Type bounds |
| <_ extends Object> void test(_ t) {} |
| } |
| |
| // Test: enum and switch case |
| static class TestEnum { |
| // Enum |
| enum _ { |
| _MONDAY, _TUESDAY, _WEDNESDAY, _THURSDAY, _FRIDAY, |
| _SATURDAY, _SUNDAY; |
| } |
| |
| void foo() { |
| // switch-case |
| for(_ _day : _.values()) { |
| switch(_day) { |
| case _SATURDAY: |
| case _SUNDAY: |
| System.out.println("Weekend is here!"); |
| break; |
| default: |
| System.out.println("Weekday is here!"); |
| break; |
| } |
| } |
| } |
| } |
| |
| // Test: Annotation |
| static class TestAnno { |
| // Annotation with name as _ |
| @interface _ { |
| String _name(); |
| int _id(); |
| } |
| // Element-Value pair |
| @_(_name ="m",_id=1) |
| public void m(int arg) {} |
| |
| //Annotation with _ as one of the elements |
| @interface MyAnno { |
| int _(); |
| } |
| // Element Value pair |
| @MyAnno(_='1') |
| public void m2() {} |
| } |
| |
| // Test: for loop, while loop, do-while loop, increment/decrement op, condition, print |
| public void testLoop() { |
| // for loop |
| for(int _ = 0; _ < 5; ++_) { |
| System.out.println("_=" + _ + " "); |
| } |
| |
| // while loop |
| int _ = 0; |
| while(_ <= 5) { |
| _++; |
| } |
| |
| //do-while loop |
| do { |
| --_; |
| } while(_ > 0); |
| } |
| |
| // Test: Array and enhanced for loop |
| public void testArraysEnhancedForLoop() { |
| // Arrays |
| String _[] = {"A","B","C","D"}; |
| |
| for(String _s : _ ) { |
| System.out.println("_s="+_s); |
| } |
| } |
| |
| // Test: Labels in break, continue |
| public void testLabels() { |
| // break/continue with labels |
| int j = 0; |
| _: |
| for (int i = 0; i <= 5; i++) { |
| while( j > 4 ) { |
| j++; |
| continue _; |
| } |
| break _; |
| } |
| } |
| } |
| |
| //interface |
| interface _ { |
| void mI(); |
| } |
| |