import eclipse 3.1 M4 compiler
[org.ibex.tool.git] / src / org / eclipse / jdt / internal / compiler / parser / RecoveredField.java
index 4133b61..a3849d4 100644 (file)
@@ -13,6 +13,7 @@ package org.eclipse.jdt.internal.compiler.parser;
 /**
  * Internal field structure for parsing recovery 
  */
+import org.eclipse.jdt.internal.compiler.ast.AbstractVariableDeclaration;
 import org.eclipse.jdt.internal.compiler.ast.ArrayTypeReference;
 import org.eclipse.jdt.internal.compiler.ast.ASTNode;
 import org.eclipse.jdt.internal.compiler.ast.Expression;
@@ -109,13 +110,22 @@ public String toString(int tab){
 }
 public FieldDeclaration updatedFieldDeclaration(){
 
-       if (this.anonymousTypes != null && fieldDeclaration.initialization == null) {
-               for (int i = 0; i < this.anonymousTypeCount; i++){
-                       if (anonymousTypes[i].preserveContent){
-                               fieldDeclaration.initialization = this.anonymousTypes[i].updatedTypeDeclaration().allocation;
+       if (this.anonymousTypes != null) {
+               if(fieldDeclaration.initialization == null) {
+                       for (int i = 0; i < this.anonymousTypeCount; i++){
+                               if (anonymousTypes[i].preserveContent){
+                                       fieldDeclaration.initialization = this.anonymousTypes[i].updatedTypeDeclaration().allocation;
+                               }
+                       }
+                       if (this.anonymousTypeCount > 0) fieldDeclaration.bits |= ASTNode.HasLocalTypeMASK;
+               } else if(fieldDeclaration.getKind() == AbstractVariableDeclaration.ENUM_CONSTANT) {
+                       // fieldDeclaration is an enum constant
+                       for (int i = 0; i < this.anonymousTypeCount; i++){
+                               if (anonymousTypes[i].preserveContent){
+                                       this.anonymousTypes[i].updatedTypeDeclaration();
+                               }
                        }
                }
-               if (this.anonymousTypeCount > 0) fieldDeclaration.bits |= ASTNode.HasLocalTypeMASK;
        }
        return fieldDeclaration;
 }
@@ -128,7 +138,14 @@ public FieldDeclaration updatedFieldDeclaration(){
 public RecoveredElement updateOnClosingBrace(int braceStart, int braceEnd){
        if (bracketBalance > 0){ // was an array initializer
                bracketBalance--;
-               if (bracketBalance == 0) alreadyCompletedFieldInitialization = true;
+               if (bracketBalance == 0) {
+                       if(fieldDeclaration.getKind() == AbstractVariableDeclaration.ENUM_CONSTANT) {
+                               updateSourceEndIfNecessary(braceEnd - 1);
+                               return parent;
+                       } else {
+                               alreadyCompletedFieldInitialization = true;
+                       }
+               }
                return this;
        } else if (bracketBalance == 0) {
                alreadyCompletedFieldInitialization = true;
@@ -150,6 +167,11 @@ public RecoveredElement updateOnOpeningBrace(int braceStart, int braceEnd){
                bracketBalance++;
                return null; // no update is necessary  (array initializer)
        }
+       if (fieldDeclaration.declarationSourceEnd == 0 
+               && fieldDeclaration.getKind() == AbstractVariableDeclaration.ENUM_CONSTANT){
+               bracketBalance++;
+               return null; // no update is necessary  (enum constant)
+       }
        // might be an array initializer
        this.updateSourceEndIfNecessary(braceStart - 1, braceEnd - 1);  
        return this.parent.updateOnOpeningBrace(braceStart, braceEnd);