2d18dda3f2
Reviewed-by: vromero
184 lines
4.3 KiB
Java
184 lines
4.3 KiB
Java
/*
|
|
* @test /nodynamiccopyright/
|
|
* @bug 8007401 8007427 8061549
|
|
* @author sogoel
|
|
* @summary Test generation of warnings when '_' is used an identifier
|
|
* @compile/fail/ref=IdentifierTest8.out --release 8 -Werror -XDrawDiagnostics -Xlint:-options 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();
|
|
}
|
|
|