X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Forg%2Feclipse%2Fjdt%2Finternal%2Fcompiler%2Fparser%2FRecoveredField.java;fp=src%2Forg%2Feclipse%2Fjdt%2Finternal%2Fcompiler%2Fparser%2FRecoveredField.java;h=a3849d4d5529478cb44a25915599f427ac689389;hb=c17753cd9e62cd1a71df3d88af908de0425ac33d;hp=4133b61590d7a871a75df35e2ed019631c194898;hpb=040fa5af2cd00017cf3575950cdaade34a6d7f6c;p=org.ibex.tool.git diff --git a/src/org/eclipse/jdt/internal/compiler/parser/RecoveredField.java b/src/org/eclipse/jdt/internal/compiler/parser/RecoveredField.java index 4133b61..a3849d4 100644 --- a/src/org/eclipse/jdt/internal/compiler/parser/RecoveredField.java +++ b/src/org/eclipse/jdt/internal/compiler/parser/RecoveredField.java @@ -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);