Skip to content

Latest commit

 

History

History
51 lines (38 loc) · 1.55 KB

File metadata and controls

51 lines (38 loc) · 1.55 KB

zerobilder-compiler zerobuilder

zerobuilder

This generates a "telescoping" builder where every field must be filled, otherwise it's a compiler error.

To generate the builder, annotate a record class with @RecordBuilder and / or @RecordUpdater.

@RecordBuilder
record Message(
  String sender,
  String body,
  String recipient
) {
}

The generated class will be called MessageBuilders.

@Generated
final class MessageBuilders {

  static SenderStep builder()

  static MessageUpdater builder(Message message)

  interface SenderStep { BodyStep sender(String sender) }
  interface BodyStep { RecipientStep body(String body) }
  interface RecipientStep { Message recipient(String recipient) }

  private static class MessageBuilder implements SenderStep, BodyStep, RecipientStep {
    @Override BodyStep sender(String sender)
    @Override RecipientStep body(String body)
    @Override Message recipient(String recipient)
  }

  static final class MessageUpdater {
    MessageUpdater sender(String sender)
    MessageUpdater body(String body)
    MessageUpdater recipient(String recipient)
    Message build()
  }
}

see also

similar project: https://github.com/DanielLiu1123/recordbuilder