Skip to content

Allow inherrited BuiltValueHooks #1310

@Leptopoda

Description

@Leptopoda

When making use of interfaces one might wish to add hooks to it that should be invoked by the subclasses.
An example is when setting default (initializeHook) and validating the builder (finalizeHook).
Currently one has to manually add the builders to the subclasses.
Is this a feature you are interested in?

@BuiltValue(instantiable: false)
abstract interface class TestInterface {
  String get value;
  @BuiltValueHook(initializeBuilder: true)
  static void _defaults(TestInterfaceBuilder b) {
    b.value = '123';
  }

  @BuiltValueHook(finalizeBuilder: true)
  static void _validate(TestInterfaceBuilder b) {
    if (b.value!.isEmpty) {
      throw Error();
    }
  }
}

abstract class Test implements TestInterface, Built<Test, TestBuilder> {
  factory Test([void Function(TestBuilder)? b]) = _$SuperObject;
  const Test._();

  static Serializer<Test> get serializer => _$superObjectSerializer;

  @BuiltValueHook(initializeBuilder: true)
  static void _defaults(TestBuilder b) {
    TestInterface._defaults(b);
  }

  @BuiltValueHook(finalizeBuilder: true)
  static void _validate(TestBuilder b) {
    TestInterface._validate(b);
  }
}

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions