diff --git a/gradle.properties b/gradle.properties index 58936ebc..b0ecc25e 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.83 +version = 7.8.84 diff --git a/language/src/main/java/de/monticore/lang/sysmlv2/types3/SysMLBuiltInTypeRelations.java b/language/src/main/java/de/monticore/lang/sysmlv2/types3/SysMLBuiltInTypeRelations.java new file mode 100644 index 00000000..8920d124 --- /dev/null +++ b/language/src/main/java/de/monticore/lang/sysmlv2/types3/SysMLBuiltInTypeRelations.java @@ -0,0 +1,31 @@ +package de.monticore.lang.sysmlv2.types3; + +import de.monticore.types.check.SymTypeExpression; + +/** + * Dient dazu die MontiCore Built-Ins (int, String, boolean, nat) mit den + * KerML-ScalarValues (Integer, String, Boolean, Natural/Positive) kompatibel + * zu machen. + */ +public class SysMLBuiltInTypeRelations extends de.monticore.types3.util.BuiltInTypeRelations{ + + @Override + public boolean isIntegralType(SymTypeExpression type) { + return super.isIntegralType(type) + || (type.isPrimitive() + && type.asPrimitive().getPrimitiveName().equals("nat")) + || (type.hasTypeInfo() + && ( + type.getTypeInfo().getFullName().equals("ScalarValues.Integer") || + type.getTypeInfo().getFullName().equals("ScalarValues.Natural") || + type.getTypeInfo().getFullName().equals("ScalarValues.Positive")) + ); + } + + @Override + public boolean isBoolean(SymTypeExpression type) { + return super.isBoolean(type) || + (type.hasTypeInfo() && + type.getTypeInfo().getFullName().equals("ScalarValues.Boolean")); + } +} diff --git a/language/src/main/java/de/monticore/lang/sysmlv2/types3/SysMLSymTypeRelations.java b/language/src/main/java/de/monticore/lang/sysmlv2/types3/SysMLSymTypeRelations.java index 471b5923..bd288f90 100644 --- a/language/src/main/java/de/monticore/lang/sysmlv2/types3/SysMLSymTypeRelations.java +++ b/language/src/main/java/de/monticore/lang/sysmlv2/types3/SysMLSymTypeRelations.java @@ -1,9 +1,6 @@ package de.monticore.lang.sysmlv2.types3; import de.monticore.ocl.types3.OCLSymTypeRelations; -import de.monticore.types.check.SymTypeExpression; -import de.monticore.types3.util.BuiltInTypeRelations; -import de.monticore.types3.util.SymTypeCompatibilityCalculator; import de.monticore.types3.util.SymTypeRelationsDefaultDelegatee; public abstract class SysMLSymTypeRelations extends OCLSymTypeRelations { @@ -16,28 +13,7 @@ public static void init() { protected static class SysMLSymTypeRelationsDelegatee extends SymTypeRelationsDefaultDelegatee { public SysMLSymTypeRelationsDelegatee() { - builtInRelationsDelegate = new BuiltInTypeRelations() { - @Override - public boolean isIntegralType(SymTypeExpression type) { - return super.isIntegralType(type) || - type.isPrimitive() && - type.asPrimitive().getPrimitiveName().equals("nat"); - } - - /* - Any Type that is included here will be compatible with any other Type - in the list. - */ - @Override - public boolean isBoolean(SymTypeExpression type) { - return (super.isBoolean(type) || - ( - type.hasTypeInfo() && - type.getTypeInfo().getFullName().equals("ScalarValues.Boolean") - ) - ); - } - }; + builtInRelationsDelegate = new SysMLBuiltInTypeRelations(); } } } diff --git a/language/src/test/java/typecheck/CompareTypesTest.java b/language/src/test/java/typecheck/CompareTypesTest.java index 26365858..c5bcdbf7 100644 --- a/language/src/test/java/typecheck/CompareTypesTest.java +++ b/language/src/test/java/typecheck/CompareTypesTest.java @@ -57,7 +57,8 @@ public void clear() { @ParameterizedTest @ValueSource(strings = { - "attribute target : boolean; attribute source : ScalarValues::Boolean;" + "attribute target : boolean; attribute source : ScalarValues::Boolean;", + "attribute target : ScalarValues::Integer; attribute source : int;", }) public void test4CompatibleTypes(String targetAndSource) throws IOException { var type = typeOfConstraintExpression(targetAndSource); @@ -70,7 +71,7 @@ public void test4CompatibleTypes(String targetAndSource) throws IOException { // int und ScalarValues::Integer sollte erlaubt sein, aber das muss noch implementiert werden @ParameterizedTest @ValueSource(strings = { - "attribute target : int; attribute source : ScalarValues::Integer;" + "attribute target : int; attribute source : ScalarValues::String;" }) public void test4IncompatibleTypes(String targetAndSource) throws IOException { var type = typeOfConstraintExpression(targetAndSource);