8007427: Annotation element as '_' gives compiler error instead of a warning

8007401: Write test to check for generation of warnings when '_' is used as an identifier

Extended identifier production not used in annotation values

Reviewed-by: jjg
This commit is contained in:
Sonali Goel 2013-02-15 16:31:19 +00:00 committed by Maurizio Cimadamore
parent f5df2a2562
commit 30058417e1
3 changed files with 230 additions and 1 deletions

View File

@ -2867,7 +2867,7 @@ public class JavacParser implements Parser {
* | Identifier "=" AnnotationValue
*/
JCExpression annotationFieldValue() {
if (token.kind == IDENTIFIER) {
if (LAX_IDENTIFIER.accepts(token.kind)) {
mode = EXPR;
JCExpression t1 = term1();
if (t1.hasTag(IDENT) && token.kind == EQ) {

View File

@ -0,0 +1,182 @@
/*
* @test /nodynamiccopyright/
* @bug 8007401 8007427
* @author sogoel
* @summary Test generation of warnings when '_' is used an identifier
* @compile/fail/ref=IdentifierTest.out -Werror -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();
}

View File

@ -0,0 +1,47 @@
IdentifierTest.java:40:11: compiler.warn.underscore.as.identifier
IdentifierTest.java:43:16: compiler.warn.underscore.as.identifier
IdentifierTest.java:44:20: compiler.warn.underscore.as.identifier
IdentifierTest.java:45:22: compiler.warn.underscore.as.identifier
IdentifierTest.java:50:13: compiler.warn.underscore.as.identifier
IdentifierTest.java:50:15: compiler.warn.underscore.as.identifier
IdentifierTest.java:50:23: compiler.warn.underscore.as.identifier
IdentifierTest.java:52:13: compiler.warn.underscore.as.identifier
IdentifierTest.java:54:13: compiler.warn.underscore.as.identifier
IdentifierTest.java:60:21: compiler.warn.underscore.as.identifier
IdentifierTest.java:61:42: compiler.warn.underscore.as.identifier
IdentifierTest.java:62:67: compiler.warn.underscore.as.identifier
IdentifierTest.java:69:13: compiler.warn.underscore.as.identifier
IdentifierTest.java:70:14: compiler.warn.underscore.as.identifier
IdentifierTest.java:71:18: compiler.warn.underscore.as.identifier
IdentifierTest.java:76:22: compiler.warn.underscore.as.identifier
IdentifierTest.java:78:13: compiler.warn.underscore.as.identifier
IdentifierTest.java:78:15: compiler.warn.underscore.as.identifier
IdentifierTest.java:80:13: compiler.warn.underscore.as.identifier
IdentifierTest.java:80:15: compiler.warn.underscore.as.identifier
IdentifierTest.java:87:10: compiler.warn.underscore.as.identifier
IdentifierTest.java:87:38: compiler.warn.underscore.as.identifier
IdentifierTest.java:93:14: compiler.warn.underscore.as.identifier
IdentifierTest.java:100:17: compiler.warn.underscore.as.identifier
IdentifierTest.java:100:26: compiler.warn.underscore.as.identifier
IdentifierTest.java:117:20: compiler.warn.underscore.as.identifier
IdentifierTest.java:122:10: compiler.warn.underscore.as.identifier
IdentifierTest.java:127:17: compiler.warn.underscore.as.identifier
IdentifierTest.java:130:17: compiler.warn.underscore.as.identifier
IdentifierTest.java:137:17: compiler.warn.underscore.as.identifier
IdentifierTest.java:137:24: compiler.warn.underscore.as.identifier
IdentifierTest.java:137:33: compiler.warn.underscore.as.identifier
IdentifierTest.java:138:39: compiler.warn.underscore.as.identifier
IdentifierTest.java:142:13: compiler.warn.underscore.as.identifier
IdentifierTest.java:143:15: compiler.warn.underscore.as.identifier
IdentifierTest.java:144:13: compiler.warn.underscore.as.identifier
IdentifierTest.java:149:15: compiler.warn.underscore.as.identifier
IdentifierTest.java:150:17: compiler.warn.underscore.as.identifier
IdentifierTest.java:156:16: compiler.warn.underscore.as.identifier
IdentifierTest.java:158:25: compiler.warn.underscore.as.identifier
IdentifierTest.java:167:5: compiler.warn.underscore.as.identifier
IdentifierTest.java:171:26: compiler.warn.underscore.as.identifier
IdentifierTest.java:173:19: compiler.warn.underscore.as.identifier
IdentifierTest.java:179:11: compiler.warn.underscore.as.identifier
- compiler.err.warnings.and.werror
1 error
44 warnings