diff --git a/bosk-core/src/main/java/io/vena/bosk/Path.java b/bosk-core/src/main/java/io/vena/bosk/Path.java index 8b36e0c0..04ea876b 100644 --- a/bosk-core/src/main/java/io/vena/bosk/Path.java +++ b/bosk-core/src/main/java/io/vena/bosk/Path.java @@ -19,7 +19,6 @@ import java.util.function.UnaryOperator; import java.util.stream.Stream; import lombok.RequiredArgsConstructor; -import lombok.Value; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -567,11 +566,7 @@ protected boolean matchesImpl(Path other) { private static final Interner INTERNER = new Interner<>(); - @Value - static class InternKey { - Path prefix; - String segment; - + record InternKey(Path prefix, String segment) { @Override public String toString() { return identityHashCode(prefix) + "/" + segment; diff --git a/bosk-core/src/main/java/io/vena/bosk/bytecode/LocalVariable.java b/bosk-core/src/main/java/io/vena/bosk/bytecode/LocalVariable.java index 99a3932f..b3f53824 100644 --- a/bosk-core/src/main/java/io/vena/bosk/bytecode/LocalVariable.java +++ b/bosk-core/src/main/java/io/vena/bosk/bytecode/LocalVariable.java @@ -1,10 +1,8 @@ package io.vena.bosk.bytecode; -import lombok.Value; import org.objectweb.asm.Type; -@Value -public class LocalVariable { - Type type; - int slot; -} +public record LocalVariable( + Type type, + int slot +) { } diff --git a/bosk-gson/src/main/java/io/vena/bosk/gson/GsonAdapterCompiler.java b/bosk-gson/src/main/java/io/vena/bosk/gson/GsonAdapterCompiler.java index c889e3c5..14929781 100644 --- a/bosk-gson/src/main/java/io/vena/bosk/gson/GsonAdapterCompiler.java +++ b/bosk-gson/src/main/java/io/vena/bosk/gson/GsonAdapterCompiler.java @@ -223,8 +223,7 @@ private interface FieldWritePlan { /** * The basic, un-optimized, canonical way to write a field. */ - @Value - private static class OrdinaryFieldWritePlan implements FieldWritePlan { + private record OrdinaryFieldWritePlan() implements FieldWritePlan { /** * {@inheritDoc} */ @@ -248,8 +247,7 @@ public void generateFieldWrite(String name, ClassBuilder cb, Gson gson, L * where we can't look up the field's type adapter because we're still in the midst * of compiling that very adapter itself. */ - @Value - private static class StaticallyBoundFieldWritePlan implements FieldWritePlan { + private record StaticallyBoundFieldWritePlan() implements FieldWritePlan { /** * {@inheritDoc} */ @@ -280,14 +278,10 @@ public void generateFieldWrite(String name, ClassBuilder cb, Gson gson, L /** * A stackable wrapper that writes an {@link Optional}<T> given * a {@link FieldWritePlan} for T. + * + * @param valueWriter Handles the value inside the {@link Optional}. */ - @Value - private static class OptionalFieldWritePlan implements FieldWritePlan { - /** - * Handles the value inside the {@link Optional}. - */ - FieldWritePlan valueWriter; - + private record OptionalFieldWritePlan(FieldWritePlan valueWriter) implements FieldWritePlan { /** * {@inheritDoc} */ @@ -297,7 +291,7 @@ public void generateFieldWrite(String name, ClassBuilder cb, Gson gson, L LocalVariable optional = cb.popToLocal(); cb.pushLocal(optional); cb.invoke(OPTIONAL_IS_PRESENT); - cb.ifTrue(()-> { + cb.ifTrue(() -> { // Unwrap cb.pushLocal(optional); cb.invoke(OPTIONAL_GET); @@ -313,35 +307,36 @@ public void generateFieldWrite(String name, ClassBuilder cb, Gson gson, L * A stackable wrapper to implement {@link DerivedRecord} semantics: writes {@link Entity} * fields as {@link Reference References}, and all other fields are written using the * supplied {@link #nonEntityWriter}. + * + * @param nodeClassName Just for error messages */ - @Value - private static class ReferencingFieldWritePlan implements FieldWritePlan { - FieldWritePlan nonEntityWriter; - String nodeClassName; // Just for error messages - - /** - * {@inheritDoc} - */ - @Override - public void generateFieldWrite(String name, ClassBuilder cb, Gson gson, LocalVariable jsonWriter, Type type) { - Class parameterClass = rawClass(type); - boolean isEntity = Entity.class.isAssignableFrom(parameterClass); - if (isEntity) { - if (ReflectiveEntity.class.isAssignableFrom(parameterClass)) { - cb.castTo(ReflectiveEntity.class); - cb.invoke(REFLECTIVE_ENTITY_REFERENCE); - // Recurse to write the Reference - generateFieldWrite(name, cb, gson, jsonWriter, parameterizedType(Reference.class, type)); + private record ReferencingFieldWritePlan( + FieldWritePlan nonEntityWriter, + String nodeClassName + ) implements FieldWritePlan { + /** + * {@inheritDoc} + */ + @Override + public void generateFieldWrite(String name, ClassBuilder cb, Gson gson, LocalVariable jsonWriter, Type type) { + Class parameterClass = rawClass(type); + boolean isEntity = Entity.class.isAssignableFrom(parameterClass); + if (isEntity) { + if (ReflectiveEntity.class.isAssignableFrom(parameterClass)) { + cb.castTo(ReflectiveEntity.class); + cb.invoke(REFLECTIVE_ENTITY_REFERENCE); + // Recurse to write the Reference + generateFieldWrite(name, cb, gson, jsonWriter, parameterizedType(Reference.class, type)); + } else { + throw new IllegalArgumentException(String.format("%s %s cannot contain Entity that is not a ReflectiveEntity: \"%s\"", DerivedRecord.class.getSimpleName(), nodeClassName, name)); + } + } else if (Catalog.class.isAssignableFrom(parameterClass)) { + throw new IllegalArgumentException(String.format("%s %s cannot contain Catalog \"%s\" (try Listing?)", DerivedRecord.class.getSimpleName(), nodeClassName, name)); } else { - throw new IllegalArgumentException(String.format("%s %s cannot contain Entity that is not a ReflectiveEntity: \"%s\"", DerivedRecord.class.getSimpleName(), nodeClassName, name)); + nonEntityWriter.generateFieldWrite(name, cb, gson, jsonWriter, type); } - } else if (Catalog.class.isAssignableFrom(parameterClass)) { - throw new IllegalArgumentException(String.format("%s %s cannot contain Catalog \"%s\" (try Listing?)", DerivedRecord.class.getSimpleName(), nodeClassName, name)); - } else { - nonEntityWriter.generateFieldWrite(name, cb, gson, jsonWriter, type); } } - } /** * Implements the Gson {@link TypeAdapter} interface using a {@link Codec} object. diff --git a/bosk-jackson/src/main/java/io/vena/bosk/jackson/JacksonPlugin.java b/bosk-jackson/src/main/java/io/vena/bosk/jackson/JacksonPlugin.java index 7532ad45..4625118b 100644 --- a/bosk-jackson/src/main/java/io/vena/bosk/jackson/JacksonPlugin.java +++ b/bosk-jackson/src/main/java/io/vena/bosk/jackson/JacksonPlugin.java @@ -638,10 +638,7 @@ public interface FieldModerator { * * @author Patrick Doyle */ - @Value - private static class StateTreeNodeFieldModerator implements FieldModerator { - Type nodeType; - + private record StateTreeNodeFieldModerator(Type nodeType) implements FieldModerator { @Override public JavaType typeOf(JavaType parameterType) { return parameterType; @@ -661,10 +658,7 @@ public Object valueFor(JavaType parameterType, Object deserializedValue) { * * @author Patrick Doyle */ - @Value - private static class DerivedRecordFieldModerator implements FieldModerator { - Type nodeType; - + private record DerivedRecordFieldModerator(Type nodeType) implements FieldModerator { @Override public JavaType typeOf(JavaType parameterType) { if (reflectiveEntity(parameterType)) { @@ -680,7 +674,7 @@ public JavaType typeOf(JavaType parameterType) { public Object valueFor(JavaType parameterType, Object deserializedValue) { if (reflectiveEntity(parameterType)) { // The deserialized value is a Reference; what we want is Reference.value() - return ((Reference)deserializedValue).value(); + return ((Reference) deserializedValue).value(); } else { return deserializedValue; } diff --git a/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/BsonSurgeon.java b/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/BsonSurgeon.java index 7fd52ed1..8b976219 100644 --- a/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/BsonSurgeon.java +++ b/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/BsonSurgeon.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -import lombok.Value; +import lombok.Getter; import org.bson.BsonBoolean; import org.bson.BsonDocument; import org.bson.BsonInvalidOperationException; @@ -43,10 +43,13 @@ class BsonSurgeon { final List graftPoints; - @Value(staticConstructor = "of") - public static class GraftPoint { - Reference> containerRef; - Reference entryPlaceholderRef; + record GraftPoint ( + Reference> containerRef, + Reference entryPlaceholderRef + ) { + public static GraftPoint of(Reference> containerRef, Reference entryPlaceholderRef) { + return new GraftPoint(containerRef, entryPlaceholderRef); + } public GraftPoint boundTo(Identifier id) { return GraftPoint.of( diff --git a/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/Demultiplexer.java b/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/Demultiplexer.java index 1463be40..9f141982 100644 --- a/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/Demultiplexer.java +++ b/bosk-mongo/src/main/java/io/vena/bosk/drivers/mongo/Demultiplexer.java @@ -26,13 +26,14 @@ public List> pop(ChangeStreamDocument event) { - return new TransactionID(requireNonNull(event.getLsid()), requireNonNull(event.getTxnNumber())); + return new TransactionID(event.getLsid(), event.getTxnNumber()); } } } diff --git a/bosk-mongo/src/test/java/io/vena/bosk/drivers/mongo/MongoDriverSpecialTest.java b/bosk-mongo/src/test/java/io/vena/bosk/drivers/mongo/MongoDriverSpecialTest.java index d4de99d6..178e0815 100644 --- a/bosk-mongo/src/test/java/io/vena/bosk/drivers/mongo/MongoDriverSpecialTest.java +++ b/bosk-mongo/src/test/java/io/vena/bosk/drivers/mongo/MongoDriverSpecialTest.java @@ -28,7 +28,6 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.LinkedBlockingDeque; import java.util.stream.Stream; -import lombok.Value; import org.bson.BsonDocument; import org.bson.BsonInt32; import org.bson.BsonInt64; @@ -595,14 +594,13 @@ private BsonString rootDocumentID() { /** * Represents an earlier version of the entity before some fields were added. */ - @Value - public static class OldEntity implements Entity { - Identifier id; - String string; + public record OldEntity( + Identifier id, + String string, // We need catalog and sideTable because we use them in our PandoConfiguration - Catalog catalog; - SideTable sideTable; - + Catalog catalog, + SideTable sideTable + ) implements Entity { public static OldEntity withString(String value, Bosk bosk) throws InvalidTypeException { return new OldEntity( rootID, @@ -617,15 +615,15 @@ public static OldEntity withString(String value, Bosk bosk) throws In * A version of {@link TestEntity} where the {@link Optional} {@link TestEntity#values()} * field has a default (and some other fields have been deleted). */ - @Value - public static class UpgradeableEntity implements Entity { - Identifier id; - String string; - Catalog catalog; - Listing listing; - SideTable sideTable; - Optional values; - + public record UpgradeableEntity( + Identifier id, + String string, + Catalog catalog, + Listing listing, + SideTable sideTable, + Optional values + ) implements Entity { + @Override public Optional values() { return Optional.of(values.orElse(TestValues.blank())); }