Copydynamic
Prototype of generating `copyDynamic` extension functions for kotlin data classes
Install / Use
/learn @ZacSweers/CopydynamicREADME
CopyDynamic
Archived and unmaintained. Consider using https://github.com/kopykat-kt/kopykat instead
Prototype of generating copyDynamic extension functions for data classes, such that you can do this:
@CopyDynamic
data class Foo(val bar: String = "bar", val baz: String = "baz", val fizz: String = "fizz")
And have a copyDynamic extension function generated to allow for dynamic setting of variables in a copy call.
val foo = Foo()
val newFoo = foo.copyDynamic {
bar = "newBar"
if (someCondition) baz = "newBaz"
}
Configuration
You can optionally specify a copydynamic.generated annotation processing option
with a value of either "javax.annotation.processing.Generated" (JDK 9+) or "javax.annotation.Generated" (JDK <9).
Incremental annotation processing is disabled by default (as Kapt doesn't formally support this when generating Kotlin sources currently).
This does appear to work in Android projects though with Kotlin 1.3.30+. If you want to try this, you can
enable it via copdynamic.useFiler.
kapt {
arguments {
arg("copydynamic.generated", "javax.annotation.Generated")
arg("copydynamic.useFiler", "true")
}
}
Caveats
- The generated intermediate builder has
internalvisibility for its constructor, which can be considered a bit of a leaky API. If you use this, it's recommended to put your models in a separate module to avoid leaking this. - Properties must be
internalorpublicvisibility.
Download
kapt 'io.sweers.copydynamic:copydynamic:x.y.z'
compileOnly 'io.sweers.copydynamic:copydynamic-annotations:x.y.z'
KDocs can be found here: https://zacsweers.github.io/copydynamic
License
Copyright (C) 2018 Zac Sweers
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Related Skills
node-connect
351.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
110.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
351.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
351.4kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
