use of org.osate.ba.aadlba.RelationalOperator in project osate2 by osate.
the class AdaLikeDataTypeChecker method checkDefinition.
@Override
public TypeHolder checkDefinition(BehaviorElement e, Enumerator operator, TypeHolder operand1, TypeHolder operand2) {
// Operator ** has special consistency checking.
if (operator != BinaryNumericOperator.MULTIPLY_MULTIPLY && !conformsTo(operand1, operand2, true)) {
reportErrorConsystency(e, operator, operand1, operand2);
return null;
}
if (operator instanceof LogicalOperator) {
if (operand1.getDataRep() == DataRepresentation.BOOLEAN) {
return getTopLevelTypeWithoutConsistencyChecking(operand1, operand1);
} else {
reportErrorBinaryOperator(e, operator, operand1);
return null;
}
} else if (operator instanceof RelationalOperator) {
RelationalOperator rop = (RelationalOperator) operator;
DataRepresentation[] expectedTypes = null;
// Operators = and != are defined for all coherent types.
if (rop == RelationalOperator.EQUAL || rop == RelationalOperator.NOT_EQUAL) {
return new TypeHolder(DataRepresentation.BOOLEAN, null);
}
expectedTypes = _alphaNumTypes;
if (Aadl2Utils.contains(operand1.getDataRep(), expectedTypes)) {
return new TypeHolder(DataRepresentation.BOOLEAN, null);
} else {
reportErrorBinaryOperator(e, operator, operand1);
return null;
}
} else if (operator instanceof BinaryAddingOperator) {
if (Aadl2Utils.contains(operand1.getDataRep(), _numTypes)) {
return getTopLevelTypeWithoutConsistencyChecking(operand1, operand2);
} else {
reportErrorBinaryOperator(e, operator, operand1);
return null;
}
} else if (operator instanceof MultiplyingOperator) {
MultiplyingOperator op = (MultiplyingOperator) operator;
switch(op) {
case MULTIPLY:
case DIVIDE:
{
if (Aadl2Utils.contains(operand1.getDataRep(), _numTypes)) {
return getTopLevelTypeWithoutConsistencyChecking(operand1, operand2);
} else {
reportErrorBinaryOperator(e, operator, operand1);
return null;
}
}
case MOD:
case REM:
{
if (operand1.getDataRep() == DataRepresentation.INTEGER) {
return getTopLevelTypeWithoutConsistencyChecking(operand1, operand2);
} else {
reportErrorBinaryOperator(e, operator, operand1);
return null;
}
}
default:
return null;
}
} else if (operator instanceof BinaryNumericOperator) {
// Checks operands consistency:
if (Aadl2Utils.contains(operand1.getDataRep(), _numTypesWithoutFixed)) {
boolean reportError = false;
if (operand2.getDataRep() == DataRepresentation.INTEGER) {
// Datatyped operand case : checks if operand2 is a natural.
if (operand2.getKlass() != null) {
EList<org.osate.aadl2.PropertyExpression> l = PropertyUtils.findPropertyExpression(operand2.getKlass(), DataModelProperties.INTEGER_RANGE);
if (l.size() > 0) {
RangeValue rv = (RangeValue) l.get(l.size() - 1);
if (rv.getMinimumValue().getScaledValue() < 0) {
reportError = true;
}
} else {
reportError = true;
}
} else // constant data case : checks if the constant value is not
// negative.
{
if (e instanceof Factor) {
Value val = ((Factor) e).getSecondValue();
// PropertyConstants and warns PropertyValues.
if (val instanceof BehaviorPropertyConstant) {
BehaviorPropertyConstant bpc = (BehaviorPropertyConstant) val;
org.osate.aadl2.PropertyConstant pc = bpc.getProperty();
org.osate.aadl2.IntegerLiteral intLit = (org.osate.aadl2.IntegerLiteral) pc.getConstantValue();
if (intLit.getValue() < 0) {
reportError = true;
}
} else if (val instanceof PropertyReference) // PropertyValue case : its value can only be evaluated at
// runtime so raises a warning.
{
_errManager.warning(e, "Cannot evaluate if the exponent" + " is a natural");
}
}
}
} else {
reportError = true;
}
if (reportError) {
_errManager.error(e, "exponent must be of type natural, found " + operand2.toString());
return null;
} else {
return operand1;
}
} else {
reportErrorConsystency(e, operator, operand1, operand2);
return null;
}
} else {
String errorMsg = "operator : " + operator.getName() + " is not supported.";
System.err.println(errorMsg);
throw new UnsupportedOperationException(errorMsg);
}
}
use of org.osate.ba.aadlba.RelationalOperator in project osate2 by osate.
the class RelationItemProvider method getText.
/**
* This returns the label text for the adapted class.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public String getText(Object object) {
RelationalOperator labelValue = ((Relation) object).getRelationalOperator();
String label = labelValue == null ? null : labelValue.toString();
return label == null || label.length() == 0 ? getString("_UI_Relation_type") : getString("_UI_Relation_type") + " " + label;
}
use of org.osate.ba.aadlba.RelationalOperator in project osate2 by osate.
the class RelationImpl method setRelationalOperator.
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void setRelationalOperator(RelationalOperator newRelationalOperator) {
RelationalOperator oldRelationalOperator = relationalOperator;
relationalOperator = newRelationalOperator == null ? RELATIONAL_OPERATOR_EDEFAULT : newRelationalOperator;
boolean oldRelationalOperatorESet = relationalOperatorESet;
relationalOperatorESet = true;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, AadlBaPackage.RELATION__RELATIONAL_OPERATOR, oldRelationalOperator, relationalOperator, !oldRelationalOperatorESet));
}
use of org.osate.ba.aadlba.RelationalOperator in project osate2 by osate.
the class RelationImpl method unsetRelationalOperator.
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void unsetRelationalOperator() {
RelationalOperator oldRelationalOperator = relationalOperator;
boolean oldRelationalOperatorESet = relationalOperatorESet;
relationalOperator = RELATIONAL_OPERATOR_EDEFAULT;
relationalOperatorESet = false;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.UNSET, AadlBaPackage.RELATION__RELATIONAL_OPERATOR, oldRelationalOperator, RELATIONAL_OPERATOR_EDEFAULT, oldRelationalOperatorESet));
}
Aggregations