diff options
Diffstat (limited to 'src/core/lombok/eclipse')
-rw-r--r-- | src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java index 7f144c17..96dea22d 100644 --- a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java +++ b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java @@ -1013,9 +1013,17 @@ public class EclipseHandlerUtil { parent.fields = new FieldDeclaration[1]; parent.fields[0] = field; } else { - FieldDeclaration[] newArray = new FieldDeclaration[parent.fields.length + 1]; - System.arraycopy(parent.fields, 0, newArray, 1, parent.fields.length); - newArray[0] = field; + int size = parent.fields.length; + FieldDeclaration[] newArray = new FieldDeclaration[size + 1]; + System.arraycopy(parent.fields, 0, newArray, 0, size); + int index = 0; + for (; index < size; index++) { + FieldDeclaration f = newArray[index]; + if (isEnumConstant(f) || isGenerated(f)) continue; + break; + } + System.arraycopy(newArray, index, newArray, index + 1, size - index); + newArray[index] = field; parent.fields = newArray; } @@ -1028,6 +1036,10 @@ public class EclipseHandlerUtil { type.add(field, Kind.FIELD); } + private static boolean isEnumConstant(final FieldDeclaration field) { + return ((field.initialization instanceof AllocationExpression) && (((AllocationExpression) field.initialization).enumConstant == field)); + } + /** * Inserts a method into an existing type. The type must represent a {@code TypeDeclaration}. */ |