@@ -448,12 +448,18 @@ internal class CodeGeneratorImpl(typeRendering: TypeRenderingStrategy = FullyQua
448
448
knownMarkers : Iterable <Marker >,
449
449
readDfMethod : DefaultReadDfMethod ? ,
450
450
fieldNameNormalizer : NameNormalizer ,
451
+ asDataClass : Boolean
451
452
): CodeGenResult {
452
- val context = SchemaProcessor .create(name, knownMarkers, fieldNameNormalizer)
453
+ val context = SchemaProcessor .create(name, if (asDataClass) emptyList() else knownMarkers, fieldNameNormalizer)
453
454
val marker = context.process(schema, isOpen, visibility)
454
455
val declarations = mutableListOf<Code >()
455
456
context.generatedMarkers.forEach { itMarker ->
456
- declarations.add(generateInterface(itMarker, fields, readDfMethod.takeIf { marker == itMarker }))
457
+ val declaration = if (asDataClass) {
458
+ generateClasses(itMarker)
459
+ } else {
460
+ generateInterface(itMarker, fields, readDfMethod.takeIf { marker == itMarker })
461
+ }
462
+ declarations.add(declaration)
457
463
if (extensionProperties) {
458
464
declarations.add(generateExtensionProperties(itMarker, withNullable = false ))
459
465
}
@@ -479,17 +485,7 @@ internal class CodeGeneratorImpl(typeRendering: TypeRenderingStrategy = FullyQua
479
485
.joinToString() else " "
480
486
val resultDeclarations = mutableListOf<String >()
481
487
482
- val fieldsDeclaration = if (fields) marker.fields.map {
483
- val override = if (it.overrides) " override " else " "
484
- val columnNameAnnotation = if (it.columnName != it.fieldName.quotedIfNeeded) {
485
- " @ColumnName(\" ${renderStringLiteral(it.columnName)} \" )\n "
486
- } else {
487
- " "
488
- }
489
-
490
- val fieldType = it.renderFieldType()
491
- " $columnNameAnnotation ${propertyVisibility}${override } val ${it.fieldName.quotedIfNeeded} : $fieldType "
492
- }.join() else " "
488
+ val fieldsDeclaration = if (fields) renderFields(marker, propertyVisibility).join() else " "
493
489
494
490
val readDfMethodDeclaration = readDfMethod?.toDeclaration(marker, propertyVisibility)
495
491
@@ -515,6 +511,36 @@ internal class CodeGeneratorImpl(typeRendering: TypeRenderingStrategy = FullyQua
515
511
resultDeclarations.add(header + baseInterfacesDeclaration + body)
516
512
return resultDeclarations.join()
517
513
}
514
+
515
+ private fun generateClasses (marker : Marker ): Code {
516
+ val annotationName = DataSchema ::class .simpleName
517
+
518
+ val visibility = renderTopLevelDeclarationVisibility(marker)
519
+ val propertyVisibility = renderInternalDeclarationVisibility(marker)
520
+ val header =
521
+ " @$annotationName \n ${visibility} data class ${marker.name} ("
522
+
523
+ val fieldsDeclaration = renderFields(marker, propertyVisibility).joinToString(" ,\n " )
524
+ return buildString {
525
+ appendLine(header)
526
+ appendLine(fieldsDeclaration)
527
+ append(" )" )
528
+ }
529
+ }
530
+
531
+ private fun renderFields (marker : Marker , propertyVisibility : String ): List <String > {
532
+ return marker.fields.map {
533
+ val override = if (it.overrides) " override " else " "
534
+ val columnNameAnnotation = if (it.columnName != it.fieldName.quotedIfNeeded) {
535
+ " @ColumnName(\" ${renderStringLiteral(it.columnName)} \" )\n "
536
+ } else {
537
+ " "
538
+ }
539
+
540
+ val fieldType = it.renderFieldType()
541
+ " $columnNameAnnotation ${propertyVisibility}${override } val ${it.fieldName.quotedIfNeeded} : $fieldType "
542
+ }
543
+ }
518
544
}
519
545
520
546
public fun CodeWithConverter.toStandaloneSnippet (packageName : String , additionalImports : List <String >): String =
0 commit comments