@@ -24,6 +24,8 @@ class ZdlListenerImpl : ZdlBaseListener() {
2424 private val currentStack = ArrayDeque <FluentMap >()
2525 private var currentCollection: String? = null
2626
27+ // fun getModel(): ZdlModel = model
28+
2729 override fun enterZdl (ctx : ZdlParser .ZdlContext ) {}
2830
2931 override fun enterSuffix_javadoc (ctx : ZdlParser .Suffix_javadocContext ) {
@@ -46,7 +48,7 @@ class ZdlListenerImpl : ZdlBaseListener() {
4648 }
4749
4850 override fun enterConfig_option (ctx : ZdlParser .Config_optionContext ) {
49- val name = ctx.field_name()? .text ? : return
51+ val name = ctx.field_name().text
5052 val value = getComplexValue(ctx.complex_value())
5153 model.appendTo(" config" , name, value)
5254 }
@@ -123,9 +125,9 @@ class ZdlListenerImpl : ZdlBaseListener() {
123125
124126 override fun enterPolicie_body (ctx : ZdlParser .Policie_bodyContext ) {
125127 val name = getText(ctx.policie_name())!!
126- val value = ctx.policie_value()?. let { getValueText(it. simple()) }
127- // Avoid accessing protected parent; store minimal info
128- model.appendTo(" policies" , FluentMap .build().with (name, FluentMap .build().with (" name" , name).with (" value" , value)))
128+ val value = getValueText( ctx.policie_value(). simple())
129+ val aggregate = (ctx.getParent()?.getParent() as ZdlParser . PoliciesContext ).policy_aggregate()
130+ model.appendTo(" policies" , FluentMap .build().with (name, FluentMap .build().with (" name" , name).with (" value" , value). with ( " aggregate " , aggregate) ))
129131 super .enterPolicie_body(ctx)
130132 }
131133
@@ -197,6 +199,7 @@ class ZdlListenerImpl : ZdlBaseListener() {
197199 .with (" isEnum" , isEnum)
198200 .with (" isEntity" , isEntity)
199201 .with (" isArray" , isArray)
202+ .with (" isComplexType" , false )
200203 .with (" options" , FluentMap .build())
201204 .with (" validations" , validations)
202205 currentStack.last().appendTo(" fields" , name, field)
@@ -234,30 +237,30 @@ class ZdlListenerImpl : ZdlBaseListener() {
234237 }
235238
236239 override fun enterNested_field (ctx : ZdlParser .Nested_fieldContext ) {
237- val parentFieldCtx = ( ctx as ParserRuleContext ).getRuleContext( ZdlParser .FieldContext :: class , 0 ) ? : throw IllegalStateException ( " No FieldContext parent " )
238- val parentEntity = currentStack.elementAt( currentStack.size - 2 )
240+ val parent = ctx.getParent() as ZdlParser .FieldContext
241+ val parentEntity = currentStack[ currentStack.size - 2 ]
239242 val parentEntityFields = parentEntity[" fields" ] as FluentMap
240- val parentField = ArrayList (parentEntityFields.values).last()
241- val entityName = parentFieldCtx .field_type().ID ().text
242- val entityJavadoc = javadoc(parentFieldCtx .javadoc())
243- val tableName = getText(parentFieldCtx .entity_table_name())
243+ val parentField = ArrayList (parentEntityFields.values)[parentEntityFields.size - 1 ]
244+ val entityName = parent .field_type().ID ()!! .text
245+ val entityJavadoc = javadoc(parent .javadoc())
246+ val tableName = getText(parent .entity_table_name())
244247 val validations = processNestedFieldValidations(ctx.nested_field_validations())
245248 (parentField as FluentMap ).appendTo(" validations" , validations)
246249 currentStack.addLast(processEntity(entityName, entityJavadoc, tableName).with (" type" , currentCollection!! .split(" ." )[0 ]))
247250 currentStack.last().appendTo(" options" , " embedded" , true )
248251 @Suppress(" UNCHECKED_CAST" )
249- val parenFieldOptions = JSONPath .get(parentField, " options" , mapOf<String , Any >()) as Map <String , Any >
250- for ((k, v) in parenFieldOptions .entries) {
252+ val parentFieldOptions = JSONPath .get(parentField, " options" , mapOf<String , Any >()) as Map <String , Any >
253+ for ((k, v) in parentFieldOptions .entries) {
251254 currentStack.last().appendTo(" options" , k, v)
252255 }
253256 model.appendTo(currentCollection!! , entityName, currentStack.last())
254257
255258 val entityLocation = " $currentCollection .$entityName "
256- val startLocation = getLocations(parentFieldCtx .field_type())
259+ val startLocation = getLocations(parent .field_type())
257260 val endLocation = getLocations(ctx)
258261 model.setLocation(entityLocation, mergeLocations(startLocation, endLocation))
259- model.setLocation(" $entityLocation .name" , getLocations(parentFieldCtx .field_type()))
260- model.setLocation(" $entityLocation .tableName" , getLocations(parentFieldCtx .entity_table_name()))
262+ model.setLocation(" $entityLocation .name" , getLocations(parent .field_type()))
263+ model.setLocation(" $entityLocation .tableName" , getLocations(parent .entity_table_name()))
261264 model.setLocation(" $entityLocation .body" , getLocations(ctx))
262265 }
263266
@@ -313,8 +316,8 @@ class ZdlListenerImpl : ZdlBaseListener() {
313316 }
314317
315318 override fun enterRelationship (ctx : ZdlParser .RelationshipContext ) {
316- val relationshipsCtx = ( ctx as ParserRuleContext ).getRuleContext( ZdlParser .RelationshipsContext :: class , 0 )
317- val relationshipType = relationshipsCtx? .relationship_type()? .text ? : " "
319+ val parent = ctx.getParent() as ZdlParser .RelationshipsContext
320+ val relationshipType = parent .relationship_type().text
318321 val relationshipName = removeJavadoc(relationshipType + " _" + relationshipDescription(ctx.relationship_from().relationship_definition()) + " _" + relationshipDescription(ctx.relationship_to().relationship_definition()))
319322
320323 val relationship = FluentMap .build().with (" type" , relationshipType).with (" name" , relationshipName)
@@ -463,7 +466,7 @@ class ZdlListenerImpl : ZdlBaseListener() {
463466 override fun exitAggregate (ctx : ZdlParser .AggregateContext ) { currentStack.removeLast() }
464467
465468 override fun enterAggregate_command (ctx : ZdlParser .Aggregate_commandContext ) {
466- val aggregateName = ( ctx as ParserRuleContext ).getRuleContext( ZdlParser .AggregateContext :: class , 0 )? .aggregate_name()?.text ? : " "
469+ val aggregateName = getText(( ctx.getParent() as ZdlParser .AggregateContext ) .aggregate_name()) !!
467470 val commandName = getText(ctx.aggregate_command_name())!!
468471 val location = " aggregates.$aggregateName .commands.$commandName "
469472 val parameter = ctx.aggregate_command_parameter()?.ID ()?.text
@@ -509,8 +512,7 @@ class ZdlListenerImpl : ZdlBaseListener() {
509512 override fun exitService (ctx : ZdlParser .ServiceContext ) { currentStack.removeLast() }
510513
511514 override fun enterService_method (ctx : ZdlParser .Service_methodContext ) {
512- val serviceCtx = (ctx as ParserRuleContext ).getRuleContext(ZdlParser .ServiceContext ::class , 0 )
513- val serviceName = serviceCtx?.service_name()?.text ? : " "
515+ val serviceName = getText((ctx.getParent() as ZdlParser .ServiceContext ).service_name())!!
514516 val methodName = getText(ctx.service_method_name())!!
515517 val location = " services.$serviceName .methods.$methodName "
516518 val naturalId = if (ctx.service_method_parameter_natural() != null ) true else null
@@ -584,6 +586,26 @@ class ZdlListenerImpl : ZdlBaseListener() {
584586
585587 override fun exitEvent (ctx : ZdlParser .EventContext ) { currentStack.removeLast() }
586588
589+ override fun enterInput (ctx : ZdlParser .InputContext ) {
590+ val name = ctx.input_name().text
591+ val jd = javadoc(ctx.javadoc())
592+ currentStack.addLast(processEntity(name, jd, null ).with (" type" , " inputs" ))
593+ model.appendTo(" inputs" , name, currentStack.last())
594+ currentCollection = " inputs"
595+ }
596+
597+ override fun exitInput (ctx : ZdlParser .InputContext ) { currentStack.removeLast() }
598+
599+ override fun enterOutput (ctx : ZdlParser .OutputContext ) {
600+ val name = ctx.output_name().text
601+ val jd = javadoc(ctx.javadoc())
602+ currentStack.addLast(processEntity(name, jd, null ).with (" type" , " outputs" ))
603+ model.appendTo(" outputs" , name, currentStack.last())
604+ currentCollection = " outputs"
605+ }
606+
607+ override fun exitOutput (ctx : ZdlParser .OutputContext ) { currentStack.removeLast() }
608+
587609 override fun exitEveryRule (ctx : ParserRuleContext ) { super .exitEveryRule(ctx) }
588610 override fun visitTerminal (node : TerminalNode ) { super .visitTerminal(node) }
589611 override fun visitErrorNode (node : ErrorNode ) { super .visitErrorNode(node) }
0 commit comments