Skip to content

Commit

Permalink
Address PR comments
Browse files Browse the repository at this point in the history
  • Loading branch information
alessiostalla committed Sep 4, 2024
1 parent a1aea23 commit 867ae0b
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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"

Expand All @@ -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()
}
Expand Down

0 comments on commit 867ae0b

Please sign in to comment.