### 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"); +} }