Skip to content

Instantly share code, notes, and snippets.

@krzema12
Created November 21, 2024 06:53
Show Gist options
  • Select an option

  • Save krzema12/0bc0f5c8fc15324a06fcec4429aac6a7 to your computer and use it in GitHub Desktop.

Select an option

Save krzema12/0bc0f5c8fc15324a06fcec4429aac6a7 to your computer and use it in GitHub Desktop.
Using KotlinPoet to generate a class (top-level function)
fun generateActionClass(
metadata: Metadata,
coords: ActionCoords,
inputTypings: Map<String, Typing>,
className: String,
untypedClass: Boolean,
replaceWith: CodeBlock?,
): TypeSpec =
TypeSpec
.classBuilder(className)
.addModifiers(KModifier.DATA)
.addKdocIfNotEmpty(actionKdoc(metadata, coords, untypedClass))
.replaceWith(replaceWith)
.addClassConstructorAnnotation()
.inheritsFromRegularAction(coords, metadata, className)
.primaryConstructor(metadata.primaryConstructor(inputTypings, coords, className, untypedClass))
.properties(metadata, coords, inputTypings, className, untypedClass)
.addInitializerBlockIfNecessary(metadata, inputTypings, untypedClass)
.addFunction(metadata.secondaryConstructor(inputTypings, coords, className, untypedClass))
.addFunction(metadata.buildToYamlArgumentsFunction(inputTypings, untypedClass))
.addCustomTypes(inputTypings, coords, className)
.addOutputClassIfNecessary(metadata)
.addBuildOutputObjectFunctionIfNecessary(metadata)
.build()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment