diff --git a/ebean-agent/src/main/java/io/ebean/enhance/entity/ConstructorDeferredCode.java b/ebean-agent/src/main/java/io/ebean/enhance/entity/ConstructorDeferredCode.java index 93177d4..4140877 100644 --- a/ebean-agent/src/main/java/io/ebean/enhance/entity/ConstructorDeferredCode.java +++ b/ebean-agent/src/main/java/io/ebean/enhance/entity/ConstructorDeferredCode.java @@ -46,6 +46,7 @@ enum State { KT_CHECKCAST, // optional kotlin state KT_LABEL, // optional kotlin state EMPTY, + GETFIELD, MAYBE_UNSUPPORTED } @@ -222,6 +223,9 @@ boolean consumeVisitFieldInsn(int opcode, String owner, String name, String desc } } flush(); + if (opcode == GETFIELD) { + state = State.GETFIELD; + } return false; } @@ -229,8 +233,8 @@ boolean consumeVisitFieldInsn(int opcode, String owner, String name, String desc * Return true when a OneToMany or ManyToMany is not initialised in a supported manor. */ private boolean unsupportedInitialisation() { - if (state == State.ALOAD) { - // allow constructor initialisation of a OneToMany + if (state == State.ALOAD || state == State.GETFIELD) { + // allow constructor initialisation of a OneToMany via constructor arg or builder return false; } return state == State.MAYBE_UNSUPPORTED diff --git a/test/pom.xml b/test/pom.xml index c4ec196..3e11697 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -94,6 +94,11 @@ test + + org.projectlombok + lombok + 1.18.38 + @@ -104,6 +109,11 @@ 3.11.0 + + org.projectlombok + lombok + 1.18.38 + io.ebean querybean-generator diff --git a/test/src/test/java/test/model/lombok/App.java b/test/src/test/java/test/model/lombok/App.java new file mode 100644 index 0000000..c3ada37 --- /dev/null +++ b/test/src/test/java/test/model/lombok/App.java @@ -0,0 +1,15 @@ +package test.model.lombok; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; + +@Entity +public class App { + + @Id + long id; + + @Column + String name; +} diff --git a/test/src/test/java/test/model/lombok/Msock.java b/test/src/test/java/test/model/lombok/Msock.java new file mode 100644 index 0000000..4c135c3 --- /dev/null +++ b/test/src/test/java/test/model/lombok/Msock.java @@ -0,0 +1,133 @@ +package test.model.lombok; + +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.Table; +import lombok.Generated; + +import java.util.List; + +@Entity +@Table(name = "stock") +public class Msock { + + private String name; + private String code; + @ManyToMany(fetch = FetchType.LAZY) + private List myapps; + + @Generated + public Msock() { + } + + @Generated + protected Msock(Msock.StockBuilder b) { + this.name = b.name; + this.code = b.code; + this.myapps = b.apps; + } + + @Generated + public Msock(String name, String code, List apps) { + this.name = name; + this.code = code; + this.myapps = apps; + } + + @Generated + public static Msock.StockBuilder builder() { + return new Msock.StockBuilderImpl(); + } + + @Generated + public String getName() { + return this.name; + } + + @Generated + public void setName(String name) { + this.name = name; + } + + @Generated + public String getCode() { + return this.code; + } + + @Generated + public void setCode(String code) { + this.code = code; + } + + @Generated + public List getApps() { + return this.myapps; + } + + @Generated + public void setApps(List myapps) { + this.myapps = myapps; + } + + @Generated + public abstract static class StockBuilder> { + @Generated + private String name; + @Generated + private String code; + @Generated + private List apps; + + public StockBuilder() { + } + + @Generated + public B name(String name) { + this.name = name; + return this.self(); + } + + @Generated + public B code(String code) { + this.code = code; + return this.self(); + } + + @Generated + public B apps(List apps) { + this.apps = apps; + return this.self(); + } + + @Generated + protected abstract B self(); + + @Generated + public abstract C build(); + + @Generated + public String toString() { + String var10000 = this.name; + return "Stock.StockBuilder(name=" + var10000 + ", code=" + this.code + ", apps=" + String.valueOf(this.apps) + ")"; + } + } + + @Generated + private static final class StockBuilderImpl extends Msock.StockBuilder { + @Generated + private StockBuilderImpl() { + } + + @Generated + protected StockBuilderImpl self() { + return this; + } + + @Generated + public Msock build() { + return new Msock(this); + } + } +} +