Skip to content

Commit 95611b8

Browse files
authored
Merge pull request #707 from modelix/bugfix/NPE-in-MPSMetaModelExporter
fix(metamodel-export): NPE when a language has no structure aspect
2 parents 6c9d895 + 7a5dda1 commit 95611b8

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

metamodel-export/src/main/kotlin/org/modelix/metamodel/export/MPSMetaModelExporter.kt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import org.modelix.model.data.LanguageData
2929
import org.modelix.model.data.Primitive
3030
import org.modelix.model.data.PrimitivePropertyType
3131
import org.modelix.model.data.PropertyData
32-
import org.modelix.model.data.PropertyType
3332
import org.modelix.model.data.ReferenceLinkData
3433
import java.io.File
3534
import java.nio.charset.StandardCharsets
@@ -56,22 +55,23 @@ class MPSMetaModelExporter(private val outputFolder: File) {
5655
}
5756
processedLanguages.add(languageModule)
5857

59-
val structureModel = LanguageAspect.STRUCTURE[languageModule]
60-
val rootNodes = structureModel!!.rootNodes
58+
val structureModel = LanguageAspect.STRUCTURE[languageModule] ?: return
59+
val rootNodes = structureModel.rootNodes
6160

6261
val concepts = SNodeOperations.ofConcept(rootNodes, CONCEPTS.AbstractConceptDeclaration).map { concept: SNode ->
6362
val properties = SLinkOperations.getChildren(concept, LINKS.propertyDeclaration)
6463
.map { it: SNode ->
65-
var type: PropertyType? = PrimitivePropertyType(Primitive.STRING)
66-
if (SLinkOperations.getPointer(it, LINKS.dataType) == SNodePointer("r:00000000-0000-4000-0000-011c89590288(jetbrains.mps.lang.core.structure)", "1082983657062")) {
67-
type = PrimitivePropertyType(Primitive.INT)
64+
val type = if (SLinkOperations.getPointer(it, LINKS.dataType) == SNodePointer("r:00000000-0000-4000-0000-011c89590288(jetbrains.mps.lang.core.structure)", "1082983657062")) {
65+
PrimitivePropertyType(Primitive.INT)
6866
} else if (SLinkOperations.getPointer(it, LINKS.dataType) == SNodePointer("r:00000000-0000-4000-0000-011c89590288(jetbrains.mps.lang.core.structure)", "1082983657063")) {
69-
type = PrimitivePropertyType(Primitive.BOOLEAN)
67+
PrimitivePropertyType(Primitive.BOOLEAN)
7068
} else if (SNodeOperations.isInstanceOf(SLinkOperations.getTarget(it, LINKS.dataType), CONCEPTS.EnumerationDeclaration)) {
7169
val pckg = SLinkOperations.getTarget(it, LINKS.dataType).model?.module?.moduleName ?: ""
72-
type = EnumPropertyType(pckg, SPropertyOperations.getString(SLinkOperations.getTarget(it, LINKS.dataType), PROPS.name))
70+
EnumPropertyType(pckg, SPropertyOperations.getString(SLinkOperations.getTarget(it, LINKS.dataType), PROPS.name))
71+
} else {
72+
PrimitivePropertyType(Primitive.STRING)
7373
}
74-
PropertyData(MetaIdByDeclaration.getPropId(it).toString(), SPropertyOperations.getString(it, PROPS.name), (type)!!, true, deprecationMsg(it))
74+
PropertyData(MetaIdByDeclaration.getPropId(it).toString(), SPropertyOperations.getString(it, PROPS.name), type, true, deprecationMsg(it))
7575
}.toList()
7676
val childLinks = SLinkOperations.getChildren(concept, LINKS.linkDeclaration)
7777
.filter { SLinkOperations.getTarget(it, LINKS.specializedLink) == null }
@@ -163,7 +163,7 @@ class MPSMetaModelExporter(private val outputFolder: File) {
163163

164164
val languageData = LanguageData(
165165
MetaIdByDeclaration.getLanguageId(languageModule).toString(),
166-
languageModule.moduleName!!,
166+
languageModule.moduleName ?: "",
167167
concepts,
168168
enums,
169169
)

0 commit comments

Comments
 (0)