@@ -77,13 +77,13 @@ class MetaModelGenerator(val outputDir: Path) {
77
77
.joinToString(" , " ) { it.simpleName }
78
78
builder.addFunction(FunSpec .builder(" getConcepts" )
79
79
.addModifiers(KModifier .OVERRIDE )
80
- .addStatement( " return listOf( $conceptNamesList ) " )
80
+ .addCode(language.getConceptsInLanguage().map { it.conceptObjectType() }.toListLiteralCodeBlock() )
81
81
.build())
82
82
builder.superclass(GeneratedLanguage ::class )
83
83
builder.addSuperclassConstructorParameter(" \" ${language.name} \" " )
84
84
for (concept in language.getConceptsInLanguage()) {
85
- builder.addProperty(PropertySpec .builder(concept.simpleName, ClassName (language.name, concept.concept.conceptObjectName() ))
86
- .initializer(language.name + " . " + concept.concept.conceptObjectName ())
85
+ builder.addProperty(PropertySpec .builder(concept.simpleName, concept.conceptObjectType( ))
86
+ .initializer(" %T " , concept.conceptObjectType ())
87
87
.build())
88
88
}
89
89
return builder.build()
@@ -134,14 +134,6 @@ class MetaModelGenerator(val outputDir: Path) {
134
134
}
135
135
}
136
136
}
137
- .addImport(PropertyAccessor ::class .asClassName().packageName, PropertyAccessor ::class .asClassName().simpleName)
138
- .addImport(RawPropertyAccessor ::class .asClassName().packageName, RawPropertyAccessor ::class .asClassName().simpleName)
139
- .addImport(IntPropertyAccessor ::class .asClassName().packageName, IntPropertyAccessor ::class .asClassName().simpleName)
140
- .addImport(StringPropertyAccessor ::class .asClassName().packageName, StringPropertyAccessor ::class .asClassName().simpleName)
141
- .addImport(BooleanPropertyAccessor ::class .asClassName().packageName, BooleanPropertyAccessor ::class .asClassName().simpleName)
142
- .addImport(MandatoryReferenceAccessor ::class .asClassName().packageName, MandatoryReferenceAccessor ::class .asClassName().simpleName)
143
- .addImport(OptionalReferenceAccessor ::class .asClassName().packageName, OptionalReferenceAccessor ::class .asClassName().simpleName)
144
- .addImport(RawReferenceAccessor ::class .asClassName().packageName, RawReferenceAccessor ::class .asClassName().simpleName)
145
137
.build().write()
146
138
}
147
139
@@ -158,15 +150,15 @@ class MetaModelGenerator(val outputDir: Path) {
158
150
.initializer(concept.nodeWrapperImplName() + " ::class" )
159
151
.build())
160
152
addProperty(PropertySpec .builder(GeneratedConcept <* , * >::_typed .name, concept.conceptWrapperImplType(), KModifier .OVERRIDE )
161
- .getter(FunSpec .getterBuilder().addStatement(""" return ${ concept.conceptWrapperInterfaceType().simpleName} """ ).build())
153
+ .getter(FunSpec .getterBuilder().addStatement(""" return %T """ , concept.conceptWrapperInterfaceType()).build())
162
154
.build())
163
155
addProperty(PropertySpec .builder(IConcept ::language.name, ILanguage ::class , KModifier .OVERRIDE )
164
156
.initializer(concept.language.generatedClassName().simpleName)
165
157
.build())
166
158
addFunction(FunSpec .builder(GeneratedConcept <* , * >::wrap.name)
167
159
.addModifiers(KModifier .OVERRIDE )
168
160
.addParameter(" node" , INode ::class )
169
- .addStatement(" return ${concept.nodeWrapperImplName()} ( node)" )
161
+ .addStatement(" return %T( node)" , concept.nodeWrapperImplType() )
170
162
.build())
171
163
concept.concept.uid?.let { uid ->
172
164
addFunction(FunSpec .builder(GeneratedConcept <* , * >::getUID.name)
@@ -176,7 +168,7 @@ class MetaModelGenerator(val outputDir: Path) {
176
168
}
177
169
addFunction(FunSpec .builder(GeneratedConcept <* , * >::getDirectSuperConcepts.name)
178
170
.addModifiers(KModifier .OVERRIDE )
179
- .addStatement( " return listOf( ${ concept.concept.extends.joinToString( " , " ) { it.conceptObjectName () } } ) " )
171
+ .addCode( concept.directSuperConcepts().map { it.conceptObjectType () }.toListLiteralCodeBlock() )
180
172
.returns(List ::class .asTypeName().parameterizedBy(IConcept ::class .asTypeName()))
181
173
.build())
182
174
for (feature in concept.directFeatures()) {
@@ -196,14 +188,15 @@ class MetaModelGenerator(val outputDir: Path) {
196
188
}
197
189
}).asTypeName()
198
190
addProperty(PropertySpec .builder(feature.validName, GeneratedProperty ::class .asClassName().parameterizedBy(data.asKotlinType()))
199
- .initializer(""" newProperty(" ${feature.originalName} " , %T, ${data.optional} )""" , serializer)
191
+ .initializer(""" newProperty(%S , %T, ${data.optional} )""" , feature.originalName , serializer)
200
192
.build())
201
193
}
202
194
is ChildLinkData -> {
203
195
val methodName = if (data.multiple) " newChildListLink" else " newSingleChildLink"
204
196
addProperty(PropertySpec .builder(feature.validName, feature.generatedChildLinkType())
205
197
.initializer(
206
- """ $methodName ("${feature.originalName} ", ${data.optional} , %T, %T::class)""" ,
198
+ """ $methodName (%S, ${data.optional} , %T, %T::class)""" ,
199
+ feature.originalName,
207
200
data.type.conceptObjectName().parseClassName(),
208
201
data.type.nodeWrapperInterfaceName().parseClassName()
209
202
)
@@ -212,7 +205,8 @@ class MetaModelGenerator(val outputDir: Path) {
212
205
is ReferenceLinkData -> {
213
206
addProperty(PropertySpec .builder(feature.validName, feature.generatedReferenceLinkType())
214
207
.initializer(
215
- """ newReferenceLink("${feature.originalName} ", ${data.optional} , %T, %T::class)""" ,
208
+ """ newReferenceLink(%S, ${data.optional} , %T, %T::class)""" ,
209
+ feature.originalName,
216
210
data.type.conceptObjectName().parseClassName(),
217
211
data.type.nodeWrapperInterfaceName().parseClassName()
218
212
)
@@ -244,7 +238,7 @@ class MetaModelGenerator(val outputDir: Path) {
244
238
addFunction(FunSpec .builder(IConceptOfTypedNode <* >::getInstanceInterface.name)
245
239
.addModifiers(KModifier .OVERRIDE )
246
240
.returns(KClass ::class .asTypeName().parameterizedBy(concept.nodeWrapperInterfaceType()))
247
- .addStatement(" return ${ concept.nodeWrapperInterfaceType().simpleName} ::class " )
241
+ .addStatement(" return %T::class " , concept.nodeWrapperInterfaceType())
248
242
.build())
249
243
}.build())
250
244
}.build()
@@ -257,7 +251,7 @@ class MetaModelGenerator(val outputDir: Path) {
257
251
} else {
258
252
superclass(concept.extends().first().conceptWrapperImplType())
259
253
for (extended in concept.extends().drop(1 )) {
260
- addSuperinterface(extended.conceptWrapperInterfaceType(), CodeBlock .of(extended.conceptWrapperInterfaceType().canonicalName ))
254
+ addSuperinterface(extended.conceptWrapperInterfaceType(), CodeBlock .of(" %T " , extended.conceptWrapperInterfaceType()))
261
255
}
262
256
}
263
257
addSuperinterface(concept.conceptWrapperInterfaceType())
@@ -299,7 +293,7 @@ class MetaModelGenerator(val outputDir: Path) {
299
293
return TypeSpec .classBuilder(concept.nodeWrapperImplType()).apply {
300
294
addModifiers(KModifier .OPEN )
301
295
addProperty(PropertySpec .builder(TypedNodeImpl ::_concept .name, concept.conceptWrapperImplType(), KModifier .OVERRIDE )
302
- .getter(FunSpec .getterBuilder().addStatement(""" return ${ concept.conceptWrapperInterfaceType().simpleName} """ ).build())
296
+ .getter(FunSpec .getterBuilder().addStatement(""" return %T """ , concept.conceptWrapperInterfaceType()).build())
303
297
.build())
304
298
305
299
if (concept.extends().size > 1 ) {
@@ -318,7 +312,7 @@ class MetaModelGenerator(val outputDir: Path) {
318
312
superclass(concept.extends().first().nodeWrapperImplType())
319
313
addSuperclassConstructorParameter(" _node" )
320
314
for (extended in concept.extends().drop(1 )) {
321
- addSuperinterface(extended.nodeWrapperInterfaceType(), CodeBlock .of(extended.nodeWrapperImplType().canonicalName + " (_node)" ))
315
+ addSuperinterface(extended.nodeWrapperInterfaceType(), CodeBlock .of(" %T (_node)" , extended.nodeWrapperImplType() ))
322
316
}
323
317
}
324
318
addSuperinterface(concept.nodeWrapperInterfaceType())
@@ -352,13 +346,16 @@ class MetaModelGenerator(val outputDir: Path) {
352
346
val type = accessorSubclass.asClassName()
353
347
.parameterizedBy(
354
348
data.type.parseConceptRef(concept.language).nodeWrapperInterfaceType())
355
- val accessorName = accessorSubclass.qualifiedName
356
349
addProperty(PropertySpec .builder(feature.validName, type)
357
350
.addModifiers(KModifier .OVERRIDE )
358
351
.initializer(
359
- """ $accessorName (${ITypedNode ::unwrap.name} (), %T.%N, ${data.type.conceptObjectName()} , ${data.type.nodeWrapperInterfaceName()} ::class)""" ,
352
+ """ %T(%N(), %T.%N, %T, %T::class)""" ,
353
+ accessorSubclass.asTypeName(),
354
+ ITypedNode ::unwrap.name,
360
355
feature.concept.conceptObjectType(),
361
356
feature.validName,
357
+ data.type.conceptObjectName().parseClassName(),
358
+ data.type.nodeWrapperInterfaceName().parseClassName()
362
359
)
363
360
.build())
364
361
}
@@ -368,16 +365,20 @@ class MetaModelGenerator(val outputDir: Path) {
368
365
.addModifiers(KModifier .OVERRIDE )
369
366
.mutable(true )
370
367
.delegate(
371
- """ ${accessorClass.qualifiedName} (${ITypedNode ::unwrap.name} (), %T.%N, ${data.type.nodeWrapperInterfaceName()} ::class)""" ,
368
+ """ %T(%N(), %T.%N, %T::class)""" ,
369
+ accessorClass.asTypeName(),
370
+ ITypedNode ::unwrap.name,
372
371
feature.concept.conceptObjectType(),
373
372
feature.validName,
373
+ data.type.nodeWrapperInterfaceName().parseClassName()
374
374
)
375
375
.build())
376
376
addProperty(PropertySpec .builder(" raw_" + feature.validName, INode ::class .asTypeName().copy(nullable = true ))
377
377
.addModifiers(KModifier .OVERRIDE )
378
378
.mutable(true )
379
379
.delegate(
380
- """ ${RawReferenceAccessor ::class .qualifiedName} (${ITypedNode ::unwrap.name} (), %T.%N)""" ,
380
+ """ %T(${ITypedNode ::unwrap.name} (), %T.%N)""" ,
381
+ RawReferenceAccessor ::class .asClassName(),
381
382
feature.concept.conceptObjectType(),
382
383
feature.validName,
383
384
)
@@ -481,4 +482,17 @@ fun FeatureInConcept.generatedReferenceLinkType(): TypeName {
481
482
val targetConcept = (data as ReferenceLinkData ).type.parseConceptRef(concept.language)
482
483
return GeneratedReferenceLink ::class .asClassName().parameterizedBy(
483
484
targetConcept.nodeWrapperInterfaceType(), targetConcept.conceptWrapperInterfaceType())
485
+ }
486
+
487
+ private fun List<TypeName>.toListLiteralCodeBlock (): CodeBlock {
488
+ val list = this
489
+ return CodeBlock .builder().apply {
490
+ add(" return listOf(\n " )
491
+ withIndent {
492
+ for (element in list) {
493
+ add(" %T,\n " , element)
494
+ }
495
+ }
496
+ add(" )" )
497
+ }.build()
484
498
}
0 commit comments