diff --git a/gradle.properties b/gradle.properties index 5fd9e5fe..ff425dfa 100644 --- a/gradle.properties +++ b/gradle.properties @@ -25,4 +25,4 @@ assertj_version = 3.21.0 junit_version = 5.8.2 # Version of published artifacts -version = 7.8.5 +version = 7.8.6 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..6b7eed4e --- /dev/null +++ b/language/src/test/java/symboltable/TsynTypeTest.java @@ -0,0 +1,50 @@ +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 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()); + } + +}