Skip to content

Commit

Permalink
[Closes #928] @Value no longer makes uninitialized static fields final
Browse files Browse the repository at this point in the history
  • Loading branch information
rspilker committed Sep 23, 2015
1 parent 1bc73d7 commit 9fbc226
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 4 deletions.
2 changes: 1 addition & 1 deletion doc/changelog.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Lombok Changelog
----------------

### v1.16.7 "Edgy Guinea Pig"
* New edge
* BUGFIX: `@Value` and `@FieldDefaults` no longer make uninitialized static fields final. [Issue #928](https://github.com/rzwitserloot/lombok/issues/928).

### v1.16.6 (August 18th, 2015)
* FEATURE: `@Helper` can be placed on method-local inner classes to make all methods in the class accessible to the rest of the method. [Full documentation](https://projectlombok.org/features/experimental/Helper.html).
Expand Down
4 changes: 3 additions & 1 deletion src/core/lombok/eclipse/handlers/HandleFieldDefaults.java
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,9 @@ public void setFieldDefaultsForField(EclipseNode fieldNode, ASTNode pos, AccessL

if (makeFinal && (field.modifiers & ClassFileConstants.AccFinal) == 0) {
if (!hasAnnotation(NonFinal.class, fieldNode)) {
field.modifiers |= ClassFileConstants.AccFinal;
if ((field.modifiers & ClassFileConstants.AccStatic) == 0 || field.initialization != null) {
field.modifiers |= ClassFileConstants.AccFinal;
}
}
}

Expand Down
6 changes: 4 additions & 2 deletions src/core/lombok/javac/handlers/HandleFieldDefaults.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2012-2014 The Project Lombok Authors.
* Copyright (C) 2012-2015 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand Down Expand Up @@ -90,7 +90,9 @@ public void setFieldDefaultsForField(JavacNode fieldNode, DiagnosticPosition pos

if (makeFinal && (field.mods.flags & Flags.FINAL) == 0) {
if (!hasAnnotationAndDeleteIfNeccessary(NonFinal.class, fieldNode)) {
field.mods.flags |= Flags.FINAL;
if ((field.mods.flags & Flags.STATIC) == 0 || field.init != null) {
field.mods.flags |= Flags.FINAL;
}
}
}

Expand Down
29 changes: 29 additions & 0 deletions test/transform/resource/after-delombok/ValueStaticField.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
final class ValueStaticField {
private static int x;
private static final String PASSWORD = "Ken sent me";
@java.lang.SuppressWarnings("all")
@javax.annotation.Generated("lombok")
public ValueStaticField() {
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
@javax.annotation.Generated("lombok")
public boolean equals(final java.lang.Object o) {
if (o == this) return true;
if (!(o instanceof ValueStaticField)) return false;
return true;
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
@javax.annotation.Generated("lombok")
public int hashCode() {
int result = 1;
return result;
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
@javax.annotation.Generated("lombok")
public java.lang.String toString() {
return "ValueStaticField()";
}
}
24 changes: 24 additions & 0 deletions test/transform/resource/after-ecj/ValueStaticField.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import lombok.Value;
final @Value class ValueStaticField {
private static int x;
private static final String PASSWORD = "Ken sent me";
<clinit>() {
}
public @java.lang.Override @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") boolean equals(final java.lang.Object o) {
if ((o == this))
return true;
if ((! (o instanceof ValueStaticField)))
return false;
return true;
}
public @java.lang.Override @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") int hashCode() {
int result = 1;
return result;
}
public @java.lang.Override @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") java.lang.String toString() {
return "ValueStaticField()";
}
public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") ValueStaticField() {
super();
}
}
5 changes: 5 additions & 0 deletions test/transform/resource/before/ValueStaticField.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import lombok.Value;
@Value class ValueStaticField {
static int x;
static String PASSWORD = "Ken sent me";
}

0 comments on commit 9fbc226

Please sign in to comment.