Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,4 @@ assertj_version = 3.21.0
junit_version = 5.8.2

# Version of published artifacts
version = 7.8.20
version = 7.8.21
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package de.monticore.lang.sysmlv2.types3;

import de.monticore.lang.sysmlexpressions._ast.ASTConditionalAndExpression2;
import de.monticore.lang.sysmlexpressions._ast.ASTConditionalOrExpression2;
import de.monticore.lang.sysmlexpressions._ast.ASTExistsExpression;
import de.monticore.lang.sysmlexpressions._visitor.SysMLExpressionsVisitor2;
import de.monticore.ocl.oclexpressions.types3.OCLExpressionsTypeVisitor;
Expand All @@ -26,12 +27,24 @@ public void endVisit(ASTConditionalAndExpression2 expr) {

SymTypeExpression result =
TypeVisitorLifting.liftDefault(
this::calculateAndExpression)
this::calculateBooleanBinaryExpression)
.apply(left, right);
getType4Ast().setTypeOfExpression(expr, result);
}

protected SymTypeExpression calculateAndExpression(
@Override
public void endVisit(ASTConditionalOrExpression2 expr) {
SymTypeExpression left = getType4Ast().getPartialTypeOfExpr(expr.getLeft());
SymTypeExpression right = getType4Ast().getPartialTypeOfExpr(expr.getRight());

SymTypeExpression result =
TypeVisitorLifting.liftDefault(
this::calculateBooleanBinaryExpression)
.apply(left, right);
getType4Ast().setTypeOfExpression(expr, result);
}

protected SymTypeExpression calculateBooleanBinaryExpression(
SymTypeExpression left, SymTypeExpression right) {

if (SymTypeRelations.isCompatible(left, right)
Expand Down
31 changes: 31 additions & 0 deletions language/src/test/java/typecheck/TypeCheck3Test.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,17 @@
import de.monticore.expressions.commonexpressions._visitor.CommonExpressionsVisitor2;
import de.monticore.expressions.commonexpressions.types3.CommonExpressionsTypeVisitor;
import de.monticore.expressions.streamexpressions.types3.StreamExpressionsTypeVisitor;
import de.monticore.lang.sysmlconstraints._ast.ASTConstraintUsage;
import de.monticore.lang.sysmlv2.SysMLv2Mill;
import de.monticore.lang.sysmlv2.SysMLv2Tool;
import de.monticore.literals.mccommonliterals.types3.MCCommonLiteralsTypeVisitor;
import de.monticore.ocl.oclexpressions.types3.OCLExpressionsTypeVisitor;
import de.monticore.types.check.SymTypeExpression;
import de.monticore.types.mcbasictypes.types3.MCBasicTypesTypeVisitor;
import de.monticore.types3.Type4Ast;
import de.monticore.types3.TypeCheck3;
import de.monticore.types3.util.MapBasedTypeCheck3;
import de.se_rwth.commons.logging.Log;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

Expand Down Expand Up @@ -94,5 +97,33 @@ void testTypeCheck3() throws IOException {
*/
assertThat(printer.content).isEqualTo("Übersetzung der length-Funktion");
}
@Test
public void testConditionalOr2Type() throws IOException {
var tool = new SysMLv2Tool();
Log.getFindings().clear();
tool.init();

var astExp = SysMLv2Mill.parser().parse_String("constraint { true | false }").get();
tool.createSymbolTable(astExp);
tool.completeSymbolTable(astExp);

SymTypeExpression type = TypeCheck3.typeOf(((ASTConstraintUsage)astExp.getSysMLElement(0)).getExpression());

assertThat(Log.getFindings().isEmpty()).isTrue();
assertThat(type.isPrimitive()).isTrue();
}

@Test
public void testConditionalOr2TypeExpressionOnly() throws IOException {
var tool = new SysMLv2Tool();
Log.getFindings().clear();
tool.init();

var astExp = SysMLv2Mill.parser().parse_StringExpression("true | false").get();

SymTypeExpression type = TypeCheck3.typeOf(astExp);

assertThat(Log.getFindings().isEmpty()).isTrue();
assertThat(type.isPrimitive()).isTrue();
}
}
Loading