Search in sources :

Example 1 with RelationalOperator

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);
    }
}
Also used : RelationalOperator(org.osate.ba.aadlba.RelationalOperator) LogicalOperator(org.osate.ba.aadlba.LogicalOperator) RangeValue(org.osate.aadl2.RangeValue) PropertyReference(org.osate.ba.aadlba.PropertyReference) BehaviorPropertyConstant(org.osate.ba.aadlba.BehaviorPropertyConstant) Factor(org.osate.ba.aadlba.Factor) BinaryAddingOperator(org.osate.ba.aadlba.BinaryAddingOperator) RangeValue(org.osate.aadl2.RangeValue) Value(org.osate.ba.aadlba.Value) MultiplyingOperator(org.osate.ba.aadlba.MultiplyingOperator) BinaryNumericOperator(org.osate.ba.aadlba.BinaryNumericOperator)

Example 2 with RelationalOperator

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;
}
Also used : RelationalOperator(org.osate.ba.aadlba.RelationalOperator) Relation(org.osate.ba.aadlba.Relation)

Example 3 with RelationalOperator

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));
}
Also used : RelationalOperator(org.osate.ba.aadlba.RelationalOperator) ENotificationImpl(org.eclipse.emf.ecore.impl.ENotificationImpl)

Example 4 with RelationalOperator

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));
}
Also used : RelationalOperator(org.osate.ba.aadlba.RelationalOperator) ENotificationImpl(org.eclipse.emf.ecore.impl.ENotificationImpl)

Aggregations

RelationalOperator (org.osate.ba.aadlba.RelationalOperator)4 ENotificationImpl (org.eclipse.emf.ecore.impl.ENotificationImpl)2 RangeValue (org.osate.aadl2.RangeValue)1 BehaviorPropertyConstant (org.osate.ba.aadlba.BehaviorPropertyConstant)1 BinaryAddingOperator (org.osate.ba.aadlba.BinaryAddingOperator)1 BinaryNumericOperator (org.osate.ba.aadlba.BinaryNumericOperator)1 Factor (org.osate.ba.aadlba.Factor)1 LogicalOperator (org.osate.ba.aadlba.LogicalOperator)1 MultiplyingOperator (org.osate.ba.aadlba.MultiplyingOperator)1 PropertyReference (org.osate.ba.aadlba.PropertyReference)1 Relation (org.osate.ba.aadlba.Relation)1 Value (org.osate.ba.aadlba.Value)1