@@ -6,6 +6,7 @@ import com.squareup.kotlinpoet.CodeBlock
6
6
import com.squareup.kotlinpoet.FileSpec
7
7
import com.squareup.kotlinpoet.FunSpec
8
8
import com.squareup.kotlinpoet.KModifier
9
+ import com.squareup.kotlinpoet.ParameterSpec
9
10
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
10
11
import com.squareup.kotlinpoet.PropertySpec
11
12
import com.squareup.kotlinpoet.TypeAliasSpec
@@ -463,6 +464,42 @@ class MetaModelGenerator(
463
464
)
464
465
.build(),
465
466
)
467
+ val returnType = IMonoStep ::class .asTypeName().parameterizedBy(targetType)
468
+ val receiverType = IMonoStep ::class .asTypeName().parameterizedBy(concept.nodeWrapperInterfaceType())
469
+ if (feature.multiple) {
470
+ addFunction(
471
+ FunSpec .builder(feature.adderMethodName())
472
+ .returns(returnType)
473
+ .receiver(receiverType)
474
+ .addParameter(" concept" , ITypedConcept ::class .asTypeName())
475
+ .addParameter(
476
+ ParameterSpec .builder(" index" , Int ::class .asTypeName())
477
+ .defaultValue(" -1" )
478
+ .build(),
479
+ )
480
+ .addStatement(
481
+ " return %T.addNewChild(this, %T.%N, index, concept)" ,
482
+ TypedModelQL ::class .asTypeName(),
483
+ concept.conceptObjectType(),
484
+ feature.generatedName,
485
+ )
486
+ .build(),
487
+ )
488
+ } else {
489
+ addFunction(
490
+ FunSpec .builder(feature.setterName())
491
+ .returns(returnType)
492
+ .receiver(receiverType)
493
+ .addParameter(" concept" , ITypedConcept ::class .asTypeName())
494
+ .addStatement(
495
+ " return %T.setChild(this, %T.%N, concept)" ,
496
+ TypedModelQL ::class .asTypeName(),
497
+ concept.conceptObjectType(),
498
+ feature.generatedName,
499
+ )
500
+ .build(),
501
+ )
502
+ }
466
503
}
467
504
468
505
is ProcessedReferenceLink -> {
@@ -504,6 +541,26 @@ class MetaModelGenerator(
504
541
.build(),
505
542
)
506
543
}
544
+
545
+ val inputStepType = IMonoStep ::class .asTypeName()
546
+ .parameterizedBy(concept.nodeWrapperInterfaceType())
547
+ addFunction(
548
+ FunSpec .builder(feature.setterName())
549
+ .returns(inputStepType)
550
+ .receiver(inputStepType)
551
+ .addParameter(
552
+ " target" ,
553
+ IMonoStep ::class .asTypeName().parameterizedBy(targetType)
554
+ .let { if (feature.optional) it.copy(nullable = true ) else it },
555
+ )
556
+ .addStatement(
557
+ " return %T.setReference(this, %T.%N, target)" ,
558
+ TypedModelQL ::class .asTypeName(),
559
+ concept.conceptWrapperInterfaceClass(),
560
+ feature.generatedName,
561
+ )
562
+ .build(),
563
+ )
507
564
}
508
565
}
509
566
}
0 commit comments