### Eclipse Workspace Patch 1.0
#P org.eclipse.jdt.core
Index: buildnotes_jdt-core.html
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/buildnotes_jdt-core.html,v
retrieving revision 1.6842
diff -u -r1.6842 buildnotes_jdt-core.html
--- buildnotes_jdt-core.html 5 Feb 2009 09:42:05 -0000 1.6842
+++ buildnotes_jdt-core.html 6 Feb 2009 12:32:00 -0000
@@ -49,7 +49,9 @@
What's new in this drop
Problem Reports Fixed
-263633
+263877
+[1.5][compiler] forward reference error flagged within enum
+
263633
[1.5][compiler] Invalid type mismatch for after generic method inference
262932
[assist] Constructor completion makes array allocation difficult
Index: compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.java,v
retrieving revision 1.138
diff -u -r1.138 QualifiedNameReference.java
--- compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.java 29 Jan 2009 17:00:08 -0000 1.138
+++ compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedNameReference.java 6 Feb 2009 12:32:00 -0000
@@ -718,8 +718,8 @@
}
if (field.isStatic()) {
- ReferenceBinding declaringClass = field.original().declaringClass;
- if (declaringClass.isEnum()) {
+ if ((field.modifiers & ClassFileConstants.AccEnum) != 0) { // enum constants are checked even when qualified)
+ ReferenceBinding declaringClass = field.original().declaringClass;
MethodScope methodScope = scope.methodScope();
SourceTypeBinding sourceType = methodScope.enclosingSourceType();
if ((this.bits & ASTNode.IsStrictlyAssigned) == 0
@@ -928,7 +928,7 @@
ReferenceBinding declaringClass = fieldBinding.original().declaringClass;
SourceTypeBinding sourceType = methodScope.enclosingSourceType();
// check for forward references
- if ((this.indexOfFirstFieldBinding == 1 || declaringClass.isEnum())
+ if ((this.indexOfFirstFieldBinding == 1 || (fieldBinding.modifiers & ClassFileConstants.AccEnum) != 0) // enum constants are checked even when qualified
&& sourceType == declaringClass
&& methodScope.lastVisibleFieldID >= 0
&& fieldBinding.id >= methodScope.lastVisibleFieldID
#P org.eclipse.jdt.core.tests.compiler
Index: src/org/eclipse/jdt/core/tests/compiler/regression/EnumTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/EnumTest.java,v
retrieving revision 1.139
diff -u -r1.139 EnumTest.java
--- src/org/eclipse/jdt/core/tests/compiler/regression/EnumTest.java 10 Dec 2008 19:39:17 -0000 1.139
+++ src/org/eclipse/jdt/core/tests/compiler/regression/EnumTest.java 6 Feb 2009 12:32:02 -0000
@@ -6049,61 +6049,88 @@
" ^^^^^\n" +
"Cannot reference a field before it is defined\n" +
"----------\n" +
- "2. ERROR in X.java (at line 2)\n" +
- " NOWAY(BadEnum.NOWAY.CONST),\n" +
- " ^^^^^\n" +
- "Cannot reference a field before it is defined\n" +
- "----------\n" +
- "3. WARNING in X.java (at line 2)\n" +
+ "2. WARNING in X.java (at line 2)\n" +
" NOWAY(BadEnum.NOWAY.CONST),\n" +
" ^^^^^\n" +
"The static field BadEnum.CONST should be accessed in a static way\n" +
"----------\n" +
- "4. ERROR in X.java (at line 3)\n" +
+ "3. ERROR in X.java (at line 3)\n" +
" INVALID(INVALID.CONST),\n" +
" ^^^^^^^\n" +
"Cannot reference a field before it is defined\n" +
"----------\n" +
- "5. ERROR in X.java (at line 3)\n" +
- " INVALID(INVALID.CONST),\n" +
- " ^^^^^\n" +
- "Cannot reference a field before it is defined\n" +
- "----------\n" +
- "6. WARNING in X.java (at line 3)\n" +
+ "4. WARNING in X.java (at line 3)\n" +
" INVALID(INVALID.CONST),\n" +
" ^^^^^\n" +
"The static field BadEnum.CONST should be accessed in a static way\n" +
"----------\n" +
- "7. ERROR in X.java (at line 4)\n" +
+ "5. ERROR in X.java (at line 4)\n" +
" WRONG(WRONG.VALUE()),\n" +
" ^^^^^\n" +
"Cannot reference a field before it is defined\n" +
"----------\n" +
- "8. WARNING in X.java (at line 4)\n" +
+ "6. WARNING in X.java (at line 4)\n" +
" WRONG(WRONG.VALUE()),\n" +
" ^^^^^^^^^^^^^\n" +
"The static method VALUE() from the type BadEnum should be accessed in a static way\n" +
"----------\n" +
- "9. ERROR in X.java (at line 5)\n" +
+ "7. ERROR in X.java (at line 5)\n" +
" ILLEGAL(ILLEGAL.value());\n" +
" ^^^^^^^\n" +
"Cannot reference a field before it is defined\n" +
"----------\n" +
- "10. ERROR in X.java (at line 14)\n" +
+ "8. ERROR in X.java (at line 14)\n" +
" X x4 = new X(x4.CONST);//4 - WRONG\n" +
" ^^\n" +
"Cannot reference a field before it is defined\n" +
"----------\n" +
- "11. WARNING in X.java (at line 14)\n" +
+ "9. WARNING in X.java (at line 14)\n" +
" X x4 = new X(x4.CONST);//4 - WRONG\n" +
" ^^^^^\n" +
"The static field X.CONST should be accessed in a static way\n" +
"----------\n" +
- "12. ERROR in X.java (at line 15)\n" +
+ "10. ERROR in X.java (at line 15)\n" +
" X x5 = new X(x5.value());//5 - WRONG\n" +
" ^^\n" +
"Cannot reference a field before it is defined\n" +
"----------\n");
}
+//https://bugs.eclipse.org/bugs/show_bug.cgi?id=263877
+public void test170() {
+ this.runNegativeTest(
+ new String[] {
+ "X.java", // =================
+ "enum Days {\n" +
+ " Monday(\"Mon\", Days.OFFSET + 0), // should not complain\n" +
+ " Tuesday(\"Tue\", Days.Wednesday.hashCode()), // should complain since enum constant\n" +
+ " Wednesday(\"Wed\", OFFSET + 2); // should complain since unqualified\n" +
+ " public static final int OFFSET = 0; // cannot move this above, else more errors\n" +
+ " Days(String abbr, int index) {\n" +
+ " }\n" +
+ "}\n" +
+ "\n" +
+ "class X {\n" +
+ " public static final int FOO = X.OFFSET + 0;\n" +
+ " public static final int BAR = OFFSET + 1;\n" +
+ " public static final int OFFSET = 0; // cannot move this above, else more errors\n" +
+ "}\n", // =================
+ },
+ "----------\n" +
+ "1. ERROR in X.java (at line 3)\n" +
+ " Tuesday(\"Tue\", Days.Wednesday.hashCode()), // should complain since enum constant\n" +
+ " ^^^^^^^^^\n" +
+ "Cannot reference a field before it is defined\n" +
+ "----------\n" +
+ "2. ERROR in X.java (at line 4)\n" +
+ " Wednesday(\"Wed\", OFFSET + 2); // should complain since unqualified\n" +
+ " ^^^^^^\n" +
+ "Cannot reference a field before it is defined\n" +
+ "----------\n" +
+ "3. ERROR in X.java (at line 12)\n" +
+ " public static final int BAR = OFFSET + 1;\n" +
+ " ^^^^^^\n" +
+ "Cannot reference a field before it is defined\n" +
+ "----------\n");
+}
}