+ interface SerialForm extends Externalizable {
+ @NonNull MemberName name();
+
+ void setName(@NonNull MemberName name);
+
+ @java.io.Serial
+ Object readResolve();
+
+ @Override
+ default void writeExternal(final ObjectOutput out) throws IOException {
+ final var serialized = name().getSerialized();
+ out.writeInt(serialized.length);
+ out.write(serialized);
+ }
+
+ @Override
+ default void readExternal(final ObjectInput in) throws IOException {
+ final var serialized = new byte[in.readInt()];
+ in.readFully(serialized);
+ // TODO: consider caching instances here
+ setName(new MemberName(new String(serialized, StandardCharsets.UTF_8), serialized));
+ }
+ }
+
+ private static final class Proxy implements SerialForm {
+ @java.io.Serial