
Generates builder classes for data classes, enabling map-like property access and building. Features type-safe code generation, reflection support, and null-safety for optional properties.
A Kotlin Symbol Processing (KSP) plugin that generates builder classes for Kotlin data classes. The generated builders allow you to get and put properties in a map-like way and finally build a new instance. Supports both JVM and Android platforms.
plugins {
id("com.google.devtools.ksp") version "1.9.0-1.0.13"
}
dependencies {
implementation("com.kkalisz.datamap:runtime:1.0-SNAPSHOT")
ksp("com.kkalisz.datamap:processor:1.0-SNAPSHOT")
}@MapBuilder:import com.kkalisz.datamap.MapBuilder
@MapBuilder
data class User(
val name: String,
val email: String?
)// Create a new instance
val builder = UserBuilder()
builder.put("name", "John")
builder.put("email", "john@example.com")
val user = builder.build()
// Or modify existing instance
val updatedUser = user.buildInstance {
put("name", "Jane")
}
// Access properties
val name = builder["name"] as String
// Modify existing instance using toMapBuilder
val newUser = user.toMapBuilder().apply {
put("name", "Jane Doe")
put("email", null)
}.build()BuilderProvider interfaceThe project uses detekt for static code analysis with custom configuration. To run the analysis:
./gradlew detektThe project uses GitHub Actions for:
./gradlew build
The project uses Gradle with Kotlin DSL and version catalog for dependency management. Minimum requirements:
MIT License
A Kotlin Symbol Processing (KSP) plugin that generates builder classes for Kotlin data classes. The generated builders allow you to get and put properties in a map-like way and finally build a new instance. Supports both JVM and Android platforms.
plugins {
id("com.google.devtools.ksp") version "1.9.0-1.0.13"
}
dependencies {
implementation("com.kkalisz.datamap:runtime:1.0-SNAPSHOT")
ksp("com.kkalisz.datamap:processor:1.0-SNAPSHOT")
}@MapBuilder:import com.kkalisz.datamap.MapBuilder
@MapBuilder
data class User(
val name: String,
val email: String?
)// Create a new instance
val builder = UserBuilder()
builder.put("name", "John")
builder.put("email", "john@example.com")
val user = builder.build()
// Or modify existing instance
val updatedUser = user.buildInstance {
put("name", "Jane")
}
// Access properties
val name = builder["name"] as String
// Modify existing instance using toMapBuilder
val newUser = user.toMapBuilder().apply {
put("name", "Jane Doe")
put("email", null)
}.build()BuilderProvider interfaceThe project uses detekt for static code analysis with custom configuration. To run the analysis:
./gradlew detektThe project uses GitHub Actions for:
./gradlew build
The project uses Gradle with Kotlin DSL and version catalog for dependency management. Minimum requirements:
MIT License