From 867ae0bade5ed255f9df69b41ba1e18a85ab0825 Mon Sep 17 00:00:00 2001 From: Alessio Stalla Date: Wed, 4 Sep 2024 16:22:23 +0200 Subject: [PATCH] Address PR comments --- .../kolasu/lionweb/LionWebModelConverter.kt | 9 ++- .../kolasu/lionweb/StarLasuLWLanguage.kt | 61 ++++++++++++------- 2 files changed, 46 insertions(+), 24 deletions(-) diff --git a/lionweb/src/main/kotlin/com/strumenta/kolasu/lionweb/LionWebModelConverter.kt b/lionweb/src/main/kotlin/com/strumenta/kolasu/lionweb/LionWebModelConverter.kt index d00dc18f..bd17e0ab 100644 --- a/lionweb/src/main/kotlin/com/strumenta/kolasu/lionweb/LionWebModelConverter.kt +++ b/lionweb/src/main/kotlin/com/strumenta/kolasu/lionweb/LionWebModelConverter.kt @@ -747,7 +747,9 @@ class LionWebModelConverter( } ParsingResult::class -> { val root = data.getOnlyChildByContainmentName(ParsingResult<*>::root.name) - val tokens = data.getPropertyValue(data.classifier.getPropertyByName("tokens")!!) as TokensList? + val tokens = data.getPropertyValue( + data.classifier.getPropertyByName(ParsingResultWithTokens<*>::tokens.name)!! + ) as TokensList? ParsingResultWithTokens( data.getChildrenByContainmentName(ParsingResult<*>::issues.name).map { importModelFromLionWeb(it) as Issue @@ -791,7 +793,10 @@ class LionWebModelConverter( pr.issues.forEach { resultNode.addChild(issuesContainment, exportIssueToLionweb(it)) } - resultNode.setPropertyValue(StarLasuLWLanguage.ParsingResult.getPropertyByName("tokens")!!, TokensList(tokens)) + resultNode.setPropertyValue( + StarLasuLWLanguage.ParsingResult.getPropertyByName(ParsingResultWithTokens<*>::tokens.name)!!, + TokensList(tokens) + ) return resultNode } } diff --git a/lionweb/src/main/kotlin/com/strumenta/kolasu/lionweb/StarLasuLWLanguage.kt b/lionweb/src/main/kotlin/com/strumenta/kolasu/lionweb/StarLasuLWLanguage.kt index 51bdd143..f031cc9b 100644 --- a/lionweb/src/main/kotlin/com/strumenta/kolasu/lionweb/StarLasuLWLanguage.kt +++ b/lionweb/src/main/kotlin/com/strumenta/kolasu/lionweb/StarLasuLWLanguage.kt @@ -1,6 +1,7 @@ package com.strumenta.kolasu.lionweb import com.strumenta.kolasu.model.Multiplicity +import com.strumenta.kolasu.model.Node import com.strumenta.kolasu.model.Point import com.strumenta.kolasu.model.Position import com.strumenta.kolasu.parsing.KolasuToken @@ -20,6 +21,18 @@ import io.lionweb.lioncore.java.serialization.PrimitiveValuesSerialization.Primi import io.lionweb.lioncore.java.serialization.PrimitiveValuesSerialization.PrimitiveSerializer import io.lionweb.lioncore.kotlin.MetamodelRegistry import io.lionweb.lioncore.kotlin.addPrimitiveType +import com.strumenta.kolasu.model.BehaviorDeclaration as KBehaviorDeclaration +import com.strumenta.kolasu.model.CommonElement as KCommonElement +import com.strumenta.kolasu.model.Documentation as KDocumentation +import com.strumenta.kolasu.model.EntityDeclaration as KEntityDeclaration +import com.strumenta.kolasu.model.EntityGroupDeclaration as KEntityGroupDeclaration +import com.strumenta.kolasu.model.Expression as KExpression +import com.strumenta.kolasu.model.Parameter as KParameter +import com.strumenta.kolasu.model.PlaceholderElement as KPlaceholderElement +import com.strumenta.kolasu.model.Statement as KStatement +import com.strumenta.kolasu.model.TypeAnnotation as KTypeAnnotation +import com.strumenta.kolasu.parsing.ParsingResult as KParsingResult +import com.strumenta.kolasu.validation.Issue as KIssue private const val PLACEHOLDER_NODE = "PlaceholderNode" @@ -41,37 +54,41 @@ object StarLasuLWLanguage : Language("com.strumenta.StarLasu") { addPrimitiveType("Point") val position = addPrimitiveType("Position") val astNode = addConcept("ASTNode").apply { - addProperty("position", position, Multiplicity.OPTIONAL) + addProperty(Node::position.name, position, Multiplicity.OPTIONAL) } astNode.addReference("originalNode", astNode, Multiplicity.OPTIONAL) astNode.addReference("transpiledNodes", astNode, Multiplicity.MANY) addPlaceholderNodeAnnotation(astNode) - CommonElement = addInterface("CommonElement") - addInterface("BehaviorDeclaration").apply { addExtendedInterface(CommonElement) } - addInterface("Documentation").apply { addExtendedInterface(CommonElement) } - addInterface("EntityDeclaration").apply { addExtendedInterface(CommonElement) } - addInterface("EntityGroupDeclaration").apply { addExtendedInterface(CommonElement) } - addInterface("Expression").apply { addExtendedInterface(CommonElement) } - addInterface("Parameter").apply { addExtendedInterface(CommonElement) } - addInterface("PlaceholderElement").apply { addExtendedInterface(CommonElement) } - addInterface("Statement").apply { addExtendedInterface(CommonElement) } - addInterface("TypeAnnotation").apply { addExtendedInterface(CommonElement) } - - Issue = addConcept("Issue").apply { - addProperty("type", addEnumerationFromClass(this@StarLasuLWLanguage, IssueType::class)) - addProperty("message", LionCoreBuiltins.getString()) - addProperty("severity", addEnumerationFromClass(this@StarLasuLWLanguage, IssueSeverity::class)) - addProperty("position", position, Multiplicity.OPTIONAL) + CommonElement = addInterface(KCommonElement::class.simpleName!!) + addInterface(KBehaviorDeclaration::class.simpleName!!).apply { addExtendedInterface(CommonElement) } + addInterface(KDocumentation::class.simpleName!!).apply { addExtendedInterface(CommonElement) } + addInterface(KEntityDeclaration::class.simpleName!!).apply { addExtendedInterface(CommonElement) } + addInterface(KEntityGroupDeclaration::class.simpleName!!).apply { addExtendedInterface(CommonElement) } + addInterface(KExpression::class.simpleName!!).apply { addExtendedInterface(CommonElement) } + addInterface(KParameter::class.simpleName!!).apply { addExtendedInterface(CommonElement) } + addInterface(KPlaceholderElement::class.simpleName!!).apply { addExtendedInterface(CommonElement) } + addInterface(KStatement::class.simpleName!!).apply { addExtendedInterface(CommonElement) } + addInterface(KTypeAnnotation::class.simpleName!!).apply { addExtendedInterface(CommonElement) } + + Issue = addConcept(KIssue::class.simpleName!!).apply { + addProperty(KIssue::type.name, addEnumerationFromClass(this@StarLasuLWLanguage, IssueType::class)) + addProperty(KIssue::message.name, LionCoreBuiltins.getString()) + addProperty(KIssue::severity.name, addEnumerationFromClass(this@StarLasuLWLanguage, IssueSeverity::class)) + addProperty(KIssue::position.name, position, Multiplicity.OPTIONAL) } addPrimitiveType(TokensList::class) - ParsingResult = addConcept("ParsingResult").apply { - addContainment("issues", Issue, Multiplicity.MANY) - addContainment("root", ASTNode, Multiplicity.OPTIONAL) - addProperty("code", LionCoreBuiltins.getString(), Multiplicity.OPTIONAL) - addProperty("tokens", MetamodelRegistry.getPrimitiveType(TokensList::class)!!, Multiplicity.OPTIONAL) + ParsingResult = addConcept(KParsingResult::class.simpleName!!).apply { + addContainment(KParsingResult<*>::issues.name, Issue, Multiplicity.MANY) + addContainment(KParsingResult<*>::root.name, ASTNode, Multiplicity.OPTIONAL) + addProperty(KParsingResult<*>::code.name, LionCoreBuiltins.getString(), Multiplicity.OPTIONAL) + addProperty( + ParsingResultWithTokens<*>::tokens.name, + MetamodelRegistry.getPrimitiveType(TokensList::class)!!, + Multiplicity.OPTIONAL + ) } registerSerializersAndDeserializersInMetamodelRegistry() }