ID

R267

Status

Backlog

Bucket

tech-debt

Priority

4

Theme

nodeid

Created

2026-06-01

Updated

2026-06-01

Replace deprecated-for-removal DataType.convert(Object) in NodeIdEncoder.decode<Type>

NodeIdEncoderClassGenerator.buildPerTypeDecode emits, for each NodeType, a decode<Type>(String) that builds a throwaway typed RecordN and populates it with rec.set(col, col.getDataType().convert(values[i])). DataType.convert(Object) is deprecated for removal in jOOQ 3.20 (it bypasses Configuration.converterProvider and misbehaves for user-defined types). The generator masks the resulting warning by stamping a class-wide @SuppressWarnings({"deprecation", "removal"}) on the whole NodeIdEncoder class ; which only hides a future hard compile break when jOOQ actually removes the method.

R195 removed this call from its input-bean decode<Type>Record helpers (switched to the non-deprecated Record.fromArray(Object[], Field<?>…​), which coerces through the proper converter path). NodeIdEncoder.decode<Type> was left as-is because it feeds the NodeIdDecodeKeys filter/lookup consumers (which need the typed RecordN projection, .value1() / ::valuesRow) and is out of R195’s scope.

This item: do the same for NodeIdEncoder.decode<Type> ; populate the RecordN via a non-deprecated coercion path (e.g. rec.fromArray(values) on the freshly newRecord(…​)-built record, or whatever keeps the typed projection intact) ; and remove the class-wide @SuppressWarnings({"deprecation", "removal"}). A deprecation-for-removal must be fixed at the source, never suppressed. Verify the NodeIdDecodeKeys consumers (ArgCallEmitter, R260’s CompositeDecodeHelperRegistry) still compile and that the encoder round-trips against PostgreSQL.