Suppress the generation of the
copy()function in Kotlin'sdata class.
Kotlin's data class is a really cool feature that automatically generates useful functions like equals, hashCode, copy, and componentN.
However, sometimes you want all the benefits of the data class but not the copy() function.
For example, code like this:
data class Adult private constructor(
val age: Int,
val name: String,
) {
companion object {
fun from(name: String): Adult {
return if (name == "Zohn") {
Adult(age = 49, name = "Zohn")
} else {
error("No one allowed except \"Zohn\".")
}
}
}
}This data class only accepts the name "Zohn", but the auto-generated copy() function allows you to bypass this condition and create a new instance.
val Zosh = Adult.from("Zohn").copy(age = 21, name = "Zosh")With this library, the copy() function of data class is no longer accessible.
Unresolved reference: copy
- Kotlin 1.8.20:
1.0.x
plugins {
id("land.sungbin.kotlin.dataclass.nocopy.plugin") version "$version"
}Apply the @NoCopy annotation to data class.
@land.sungbin.kotlin.dataclass.nocopy.NoCopy
data class Adult private constructor(
val age: Int,
val name: String,
) {
companion object {
fun from(name: String): Adult {
return if (name == "Zohn") {
Adult(age = 49, name = "Zohn")
} else {
error("No one allowed except \"Zohn\".")
}
}
}
}You can configure plugin with properties on the nocopy extension.
nocopy {
// Whether NoCopy is enabled
enabled.set(true) // default
// Whether to show verbose logging
verbose.set(false) // default
}- Interaction with IDEs is not yet supported. (there is no public API to handle this)
- This library uses the Kotlin Compiler Plugin, which is still unstable.
This project is licensed under the MIT License. Please refer to the LICENSE file for details.