Skip to content
/ zinc Public

Kotlin Compiler Plugin that generates builders and a DSL for data classes.

License

Notifications You must be signed in to change notification settings

noheltcj/zinc

Repository files navigation

Zinc

tests lint maven central

An extensible compiler plugin for Kotlin to automatically expand data classes to include their own builder DSL.

Introduction

Zinc was originally conceived as a solution to reduce testing boilerplate, but supposedly there are production use cases too.

More information to come as this becomes more useful.

How it works

When enabled, Zinc analyzes specified source sets and generates builders and a DSL for each data class. There are two classes of builders generated: production and test.

See Examples

Production Builders

These builders are for use in production code when a builder pattern is preferable over using a constructor. All properties must be able to resolve a value. When a field does not have a default value, an exception will be thrown with details about the missing field.

Configure the source sets that should contribute to this classification by setting the productionSourceSetNames field on the plugin extension. See Setup

Test Builders

Not yet implemented.

This is the work-in-progress primary feature of this plugin. Builders in this classification will be generated with randomized default values for all fields. This essentially provides a clean, all fields optional way to supply fake data in tests.

Setup

Artifacts can be downloaded from Maven Central.

Gradle Kotlin Script

plugins {
  id("com.noheltcj.zinc") version "0.0.3"
}

zinc {
  // defaults to true
  enabled = true

  // defaults to setOf("main")
  productionSourceSetNames = setOf("main", "anotherSourceSet")
}

Gradle Groovy

plugins {
    id 'com.noheltcj.zinc' version '0.0.3'
}

zinc {
    productionSourceSetNames = ['main', 'anotherSourceSet']
}

About

Kotlin Compiler Plugin that generates builders and a DSL for data classes.

Topics

Resources

License

Stars

Watchers

Forks

Languages