diff --git a/language/src/main/java/de/monticore/lang/sysmlv2/SysMLv2Mill.java b/language/src/main/java/de/monticore/lang/sysmlv2/SysMLv2Mill.java index 04fd57b2..d9dc1f6b 100644 --- a/language/src/main/java/de/monticore/lang/sysmlv2/SysMLv2Mill.java +++ b/language/src/main/java/de/monticore/lang/sysmlv2/SysMLv2Mill.java @@ -32,6 +32,7 @@ public static void prepareGlobalScope() { SysMLv2Mill.initializePrimitives(); SysMLv2Mill.addStringType(); SysMLv2Mill.addCollectionTypes(); + SysMLv2Mill.addTsynTypes(); } /** @@ -171,6 +172,23 @@ protected void _addCollectionTypes() { } } + public static void addTsynTypes() { + getMill()._addTsynTypes(); + } + + protected void _addTsynTypes() { + if (SysMLv2Mill.globalScope().resolveType("Eps").isEmpty()) { + var eps = typeSymbolBuilder() + .setName("Eps") + .setEnclosingScope(globalScope()) + .setFullName("Eps") + .setSpannedScope(scope()) + .setAccessModifier(AccessModifier.ALL_INCLUSION) + .build(); + SysMLv2Mill.globalScope().add(eps); + } + } + protected OOTypeSymbol buildCollectionType(String name, String... typeVars) { var spannedScope = scope(); diff --git a/language/src/test/java/symboltable/TsynTypeTest.java b/language/src/test/java/symboltable/TsynTypeTest.java new file mode 100644 index 00000000..f15f07ec --- /dev/null +++ b/language/src/test/java/symboltable/TsynTypeTest.java @@ -0,0 +1,51 @@ +package symboltable; + +import de.monticore.lang.sysmlv2.SysMLv2Mill; +import de.monticore.lang.sysmlv2.SysMLv2Tool; +import de.monticore.lang.sysmlv2._ast.ASTSysMLModel; +import de.se_rwth.commons.logging.Log; +import de.se_rwth.commons.logging.LogStub; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class TsynTypeTest { + + @BeforeAll + static void setup() { + SysMLv2Mill.init(); + } + + @BeforeEach + public void init() { + LogStub.init(); + SysMLv2Mill.globalScope().clear(); + SysMLv2Mill.initializePrimitives(); + SysMLv2Mill.addCollectionTypes(); + SysMLv2Mill.addTsynTypes(); + Log.clearFindings(); + } + + @Test + public void testEpsInModel() throws IOException { + var tool = new SysMLv2Tool(); + + var model = "part def Valid { attribute e: Eps; }"; + var optAst = SysMLv2Mill.parser().parse_String(model); + + assertThat(optAst).isPresent(); + ASTSysMLModel ast = optAst.get(); + + tool.createSymbolTable(ast); + tool.completeSymbolTable(ast); + + assertTrue(Log.getFindings().isEmpty(), () -> Log.getFindings().toString()); + } + +}