[jOOQ/jOOQ#11894] Replace AbstractConverter by Converter.of()

This commit is contained in:
Lukas Eder 2021-09-06 17:00:39 +02:00
parent 083fd06fc9
commit a7580a1050
4 changed files with 21 additions and 70 deletions

View File

@ -128,40 +128,16 @@ public class Converters<T, U> extends AbstractConverter<T, U> {
if (converter instanceof IdentityConverter)
return (Converter<U, T>) converter;
else
return new AbstractConverter<U, T>(converter.toType(), converter.fromType()) {
@Override
public T from(U u) {
return converter.to(u);
}
@Override
public U to(T t) {
return converter.from(t);
}
@Override
public String toString() {
return "InverseConverter [ " + fromType().getName() + " -> " + toType().getName() + " ]";
}
};
return Converter.of(converter.toType(), converter.fromType(), converter::to, converter::from);
}
public static <T, U> Converter<T[], U[]> forArrays(final Converter<T, U> converter) {
return new AbstractConverter<T[], U[]>(arrayType(converter.fromType()), arrayType(converter.toType())) {
final Converter<U, T> inverse = inverse(converter);
private final Converter<U, T> inverse = Converters.inverse(converter);
@Override
public U[] from(T[] t) {
return convertArray(t, converter);
}
@Override
public T[] to(U[] u) {
return convertArray(u, inverse);
}
};
return Converter.of(arrayType(converter.fromType()), arrayType(converter.toType()),
t -> convertArray(t, converter),
u -> convertArray(u, inverse)
);
}
Converters(Converter... chain) {

View File

@ -3823,7 +3823,7 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
case JSONB: {
if (emulation == NestedCollectionEmulation.JSONB && EMULATE_AS_BLOB.contains(ctx.dialect())) {
byte[] s = ctx.resultSet().getBytes(ctx.index());
return s == null ? null : new JSONReader<>(ctx.dsl(), (AbstractRow<R>) type.getRow(), (Class<R>) type.getRecordType()).read(new InputStreamReader(new ByteArrayInputStream(s)), true);
return s == null ? null : new JSONReader<>(ctx.dsl(), (AbstractRow<R>) type.getRow(), (Class<R>) type.getRecordType()).read(new InputStreamReader(new ByteArrayInputStream(s), ctx.configuration().charsetProvider().provide()), true);
}
else {
String s = ctx.resultSet().getString(ctx.index());
@ -4599,17 +4599,10 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
}
private final Converter<byte[], JSONB> bytesConverter(final Configuration configuration) {
return new AbstractConverter<byte[], JSONB>(byte[].class, JSONB.class) {
@Override
public JSONB from(byte[] t) {
return t == null ? null : JSONB.valueOf(new String(t, configuration.charsetProvider().provide()));
}
@Override
public byte[] to(JSONB u) {
return u == null ? null : u.toString().getBytes(configuration.charsetProvider().provide());
}
};
return Converter.ofNullable(byte[].class, JSONB.class,
t -> JSONB.valueOf(new String(t, configuration.charsetProvider().provide())),
u -> u.toString().getBytes(configuration.charsetProvider().provide())
);
}
@SuppressWarnings({ "unchecked", "rawtypes" })

View File

@ -118,18 +118,10 @@ public final class DefaultConverterProvider implements ConverterProvider, Serial
return types.length == 1 && types[0] != uWrapper && provide(tType, types[0]) != null;
}) != null
) {
return new AbstractConverter<T, U>(tType, uType) {
@Override
public U from(T t) {
return Convert.convert(t, uType);
}
@Override
public T to(U u) {
return Convert.convert(u, tType);
}
};
return Converter.of(tType, uType,
t -> Convert.convert(t, uType),
u -> Convert.convert(u, tType)
);
}
// [#11762] Make sure possibly legal downcasts / upcasts are working

View File

@ -72,26 +72,16 @@ import org.xml.sax.SAXException;
*/
public class XMLasDOMBinding extends AbstractXMLBinding<Node> {
private final Converter<XML, Node> converter;
private static final Converter<XML, Node> CONVERTER = Converter.ofNullable(XML.class, Node.class,
t -> XMLasDOMBinding.fromString(t.data()),
u -> xml(XMLasDOMBinding.toString(u))
);
public XMLasDOMBinding() {
this.converter = new AbstractConverter<XML, Node>(XML.class, Node.class) {
@Override
public Node from(XML t) {
return t == null ? null : XMLasDOMBinding.fromString(t.data());
}
@Override
public XML to(Node u) {
return u == null ? null : xml(XMLasDOMBinding.toString(u));
}
};
}
public XMLasDOMBinding() {}
@Override
public final Converter<XML, Node> converter() {
return converter;
return CONVERTER;
}
// ------------------------------------------------------------------------