Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion kerml/src/main/grammars/de/monticore/lang/KerMLElements.mc4
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package de.monticore.lang;

component grammar KerMLElements
extends KerMLBasis,
de.monticore.symbols.BasicSymbols,
de.monticore.UMLModifier
{
DocBlock implements KerMLElement= "doc";
Expand Down Expand Up @@ -73,7 +74,7 @@ component grammar KerMLElements
Implies implements KerMLElement =
left:Expression "implies" right:Expression;

Function implements KerMLElement =
KerMLFunction implements KerMLElement =
Modifier "function" MCQualifiedName
(KerMLRelationClause)?
("{" (KerMLElement)* ("chain")? "}" | ";");
Expand Down
21 changes: 21 additions & 0 deletions kerml/src/main/java/de/monticore/lang/kerml/KerMLTool.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,15 @@
import de.monticore.lang.kerml._symboltable.KerMLSymbols2Json;
import de.monticore.lang.kermlelements._symboltable.DatatypeSymbol;
import de.monticore.lang.kermlparts.symboltable.adapters.Datatype2TypeSymbolAdapter;
import de.monticore.symbols.basicsymbols.BasicSymbolsMill;
import de.se_rwth.commons.logging.Log;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

import java.util.List;

/** Command line interface for parsing KerML models and exporting their types. */
public class KerMLTool extends KerMLToolTOP {

Expand Down Expand Up @@ -53,6 +56,24 @@ public void run(String[] args) {
}
}

@Override
public IKerMLArtifactScope createSymbolTable(ASTKerMLModel ast) {
var scope = super.createSymbolTable(ast);
for (String name : List.of("Collection", "OrderedCollection", "UniqueCollection",
"Array", "Bag", "Set", "OrderedSet", "List")) {
scope.resolveDatatypeDown("Collections." + name).ifPresent(datatype -> {
var typeScope = datatype.getSpannedScope();
if (typeScope.resolveTypeVarLocally("E").isEmpty()) {
typeScope.add(BasicSymbolsMill.typeVarSymbolBuilder()
.setName("E")
.setSpannedScope(KerMLMill.scope())
.build());
}
});
}
return scope;
}

@Override
public void storeSymbols(IKerMLArtifactScope scope, String path) {
KerMLMill.globalScope().putSymbolDeSer(
Expand Down
90 changes: 81 additions & 9 deletions language/src/main/resources/Collections.kermlsym
Original file line number Diff line number Diff line change
Expand Up @@ -11,42 +11,114 @@
{
"kind": "de.monticore.symbols.basicsymbols._symboltable.TypeSymbol",
"name": "Collection",
"fullName": "Collections.Collection"
"fullName": "Collections.Collection",
"spannedScope": {
"symbols": [
{
"kind": "de.monticore.symbols.basicsymbols._symboltable.TypeVarSymbol",
"name": "E",
"fullName": "Collections.Collection.E"
}
]
}
},
{
"kind": "de.monticore.symbols.basicsymbols._symboltable.TypeSymbol",
"name": "OrderedCollection",
"fullName": "Collections.OrderedCollection"
"fullName": "Collections.OrderedCollection",
"spannedScope": {
"symbols": [
{
"kind": "de.monticore.symbols.basicsymbols._symboltable.TypeVarSymbol",
"name": "E",
"fullName": "Collections.OrderedCollection.E"
}
]
}
},
{
"kind": "de.monticore.symbols.basicsymbols._symboltable.TypeSymbol",
"name": "UniqueCollection",
"fullName": "Collections.UniqueCollection"
"fullName": "Collections.UniqueCollection",
"spannedScope": {
"symbols": [
{
"kind": "de.monticore.symbols.basicsymbols._symboltable.TypeVarSymbol",
"name": "E",
"fullName": "Collections.UniqueCollection.E"
}
]
}
},
{
"kind": "de.monticore.symbols.basicsymbols._symboltable.TypeSymbol",
"name": "Array",
"fullName": "Collections.Array"
"fullName": "Collections.Array",
"spannedScope": {
"symbols": [
{
"kind": "de.monticore.symbols.basicsymbols._symboltable.TypeVarSymbol",
"name": "E",
"fullName": "Collections.Array.E"
}
]
}
},
{
"kind": "de.monticore.symbols.basicsymbols._symboltable.TypeSymbol",
"name": "Bag",
"fullName": "Collections.Bag"
"fullName": "Collections.Bag",
"spannedScope": {
"symbols": [
{
"kind": "de.monticore.symbols.basicsymbols._symboltable.TypeVarSymbol",
"name": "E",
"fullName": "Collections.Bag.E"
}
]
}
},
{
"kind": "de.monticore.symbols.basicsymbols._symboltable.TypeSymbol",
"name": "Set",
"fullName": "Collections.Set"
"fullName": "Collections.Set",
"spannedScope": {
"symbols": [
{
"kind": "de.monticore.symbols.basicsymbols._symboltable.TypeVarSymbol",
"name": "E",
"fullName": "Collections.Set.E"
}
]
}
},
{
"kind": "de.monticore.symbols.basicsymbols._symboltable.TypeSymbol",
"name": "OrderedSet",
"fullName": "Collections.OrderedSet"
"fullName": "Collections.OrderedSet",
"spannedScope": {
"symbols": [
{
"kind": "de.monticore.symbols.basicsymbols._symboltable.TypeVarSymbol",
"name": "E",
"fullName": "Collections.OrderedSet.E"
}
]
}
},
{
"kind": "de.monticore.symbols.basicsymbols._symboltable.TypeSymbol",
"name": "List",
"fullName": "Collections.List"
"fullName": "Collections.List",
"spannedScope": {
"symbols": [
{
"kind": "de.monticore.symbols.basicsymbols._symboltable.TypeVarSymbol",
"name": "E",
"fullName": "Collections.List.E"
}
]
}
},
{
"kind": "de.monticore.symbols.basicsymbols._symboltable.TypeSymbol",
Expand All @@ -67,4 +139,4 @@
}
}
]
}
}
Loading