Skip to content

Commit 5705615

Browse files
authored
Merge pull request #731 from Systems-Modeling/ST6RI-906
ST6RI-906 Evaluation of functions from TrigFunctions
2 parents a8cc426 + 43747fb commit 5705615

93 files changed

Lines changed: 891 additions & 246 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

org.omg.sysml.execution/src/org/omg/sysml/execution/expressions/ExpressionEvaluator.java

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*******************************************************************************
22
* SysML 2 Pilot Implementation
3-
* Copyright (c) 2022-2025 Model Driven Solutions, Inc.
3+
* Copyright (c) 2022-2026 Model Driven Solutions, Inc.
44
*
55
* This program is free software: you can redistribute it and/or modify
66
* it under the terms of the GNU Lesser General Public License as published by
@@ -27,7 +27,6 @@
2727
import org.omg.sysml.lang.sysml.Element;
2828
import org.omg.sysml.lang.sysml.Expression;
2929
import org.omg.sysml.lang.sysml.Feature;
30-
import org.omg.sysml.lang.sysml.FeatureTyping;
3130
import org.omg.sysml.lang.sysml.FeatureValue;
3231
import org.omg.sysml.lang.sysml.Function;
3332
import org.omg.sysml.lang.sysml.InvocationExpression;
@@ -37,6 +36,7 @@
3736
import org.omg.sysml.util.ElementUtil;
3837
import org.omg.sysml.util.EvaluationUtil;
3938
import org.omg.sysml.util.FeatureUtil;
39+
import org.omg.sysml.util.NamespaceUtil;
4040
import org.omg.sysml.util.TypeUtil;
4141

4242
public class ExpressionEvaluator extends ModelLevelExpressionEvaluator {
@@ -74,13 +74,9 @@ public EList<Element> evaluateInvocation(InvocationExpression expression, Elemen
7474
protected InvocationExpression instantiateInvocation(InvocationExpression expression, Element target) {
7575
InvocationExpression instantiation = SysMLFactory.eINSTANCE.createInvocationExpression();
7676

77-
// Copy typing from original expression.
78-
for (FeatureTyping typing: expression.getOwnedTyping()) {
79-
FeatureTyping newTyping = SysMLFactory.eINSTANCE.createFeatureTyping();
80-
newTyping.setType(typing.getType());
81-
newTyping.setTypedFeature(instantiation);
82-
instantiation.getOwnedRelationship().add(newTyping);
83-
}
77+
// Copy instantiatedType from original expression.
78+
Type instantiatedType = expression.getInstantiatedType();
79+
NamespaceUtil.addMemberTo(instantiation, instantiatedType);
8480

8581
// Add implicit generalization.
8682
ElementUtil.transform(instantiation);
@@ -119,4 +115,15 @@ protected InvocationExpression instantiateInvocation(InvocationExpression expres
119115

120116
return instantiation;
121117
}
118+
119+
@Override
120+
public EList<Element> evaluateFeature(Feature feature, Type type) {
121+
EList<Element> results = super.evaluateFeature(feature, type);
122+
Element result = results == null || results.size() != 1? null: results.get(0);
123+
124+
// Treat an unbound input parameter as if it was null.
125+
return type != null && result instanceof Feature && !(result instanceof Expression) &&
126+
FeatureUtil.isInputParameter((Feature)results.get(0), type)? EvaluationUtil.nullList(): results;
127+
}
128+
122129
}

org.omg.sysml.execution/src/org/omg/sysml/execution/expressions/LibraryFunctionFactory.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,15 @@
2626
import org.omg.sysml.execution.expressions.functions.numerical.*;
2727
import org.omg.sysml.execution.expressions.functions.sequence.*;
2828
import org.omg.sysml.execution.expressions.functions.string.*;
29+
import org.omg.sysml.execution.expressions.functions.trig.*;
2930

3031
public class LibraryFunctionFactory extends org.omg.sysml.expressions.ModelLevelLibraryFunctionFactory {
3132

3233
public static final LibraryFunctionFactory INSTANCE = new LibraryFunctionFactory();
3334

3435
@Override
35-
protected void initializeFunctionMap() {
36-
super.initializeFunctionMap();
36+
protected void initialize() {
37+
super.initialize();
3738

3839
// ControlFunctions
3940
put(new ExistsFunction());
@@ -75,6 +76,17 @@ protected void initializeFunctionMap() {
7576
// StringFunctions
7677
put(new StringLengthFunction());
7778
put(new StringSubstringFunction());
79+
80+
// TrigFunctions
81+
put(new ACosFunction());
82+
put(new AsinFunction());
83+
put(new AtanFunction());
84+
put(new CosFunction());
85+
put(new CotFunction());
86+
put(new DegFunction());
87+
put(new RadFunction());
88+
put(new SinFunction());
89+
put(new TanFunction());
7890
}
7991

8092
}

org.omg.sysml.execution/src/org/omg/sysml/execution/expressions/functions/control/ExistsFunction.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,21 @@
2121
package org.omg.sysml.execution.expressions.functions.control;
2222

2323
import org.eclipse.emf.common.util.EList;
24-
import org.omg.sysml.expressions.ModelLevelExpressionEvaluator;
24+
import org.omg.sysml.expressions.ExpressionEvaluator;
2525
import org.omg.sysml.lang.sysml.Element;
2626
import org.omg.sysml.lang.sysml.InvocationExpression;
2727
import org.omg.sysml.util.EvaluationUtil;
2828

2929
public class ExistsFunction extends ForAllFunction {
3030

3131
@Override
32-
public String getOperatorName() {
32+
public String getFunctionName() {
3333
return "exists";
3434
}
3535

3636
@Override
3737
public EList<Element> invoke(InvocationExpression invocation, Element target,
38-
ModelLevelExpressionEvaluator evaluator) {
38+
ExpressionEvaluator evaluator) {
3939
Boolean result = forAll(invocation, target, evaluator, false);
4040
return result == null? EvaluationUtil.singletonList(invocation): EvaluationUtil.booleanResult(!result);
4141
}

org.omg.sysml.execution/src/org/omg/sysml/execution/expressions/functions/control/ForAllFunction.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
package org.omg.sysml.execution.expressions.functions.control;
2222

2323
import org.eclipse.emf.common.util.EList;
24-
import org.omg.sysml.expressions.ModelLevelExpressionEvaluator;
24+
import org.omg.sysml.expressions.ExpressionEvaluator;
2525
import org.omg.sysml.expressions.functions.control.ControlFunction;
2626
import org.omg.sysml.lang.sysml.Element;
2727
import org.omg.sysml.lang.sysml.Expression;
@@ -31,12 +31,12 @@
3131
public class ForAllFunction extends ControlFunction {
3232

3333
@Override
34-
public String getOperatorName() {
34+
public String getFunctionName() {
3535
return "forAll";
3636
}
3737

3838
public Boolean forAll(InvocationExpression invocation, Element target,
39-
ModelLevelExpressionEvaluator evaluator, Boolean test) {
39+
ExpressionEvaluator evaluator, Boolean test) {
4040
EList<Element> list = evaluator.evaluateArgument(invocation, 0, target);
4141
Element expr = evaluator.argumentValue(invocation, 1, target);
4242
if (list == null || !(expr instanceof Expression)) {
@@ -60,7 +60,7 @@ public Boolean forAll(InvocationExpression invocation, Element target,
6060

6161
@Override
6262
public EList<Element> invoke(InvocationExpression invocation, Element target,
63-
ModelLevelExpressionEvaluator evaluator) {
63+
ExpressionEvaluator evaluator) {
6464
Boolean result = forAll(invocation, target, evaluator, true);
6565
return result == null? EvaluationUtil.singletonList(invocation): EvaluationUtil.booleanResult(result);
6666
}

org.omg.sysml.execution/src/org/omg/sysml/execution/expressions/functions/control/MaximizeFunction.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import java.util.function.BiFunction;
2424

2525
import org.eclipse.emf.common.util.EList;
26-
import org.omg.sysml.expressions.ModelLevelExpressionEvaluator;
26+
import org.omg.sysml.expressions.ExpressionEvaluator;
2727
import org.omg.sysml.lang.sysml.Element;
2828
import org.omg.sysml.lang.sysml.Expression;
2929
import org.omg.sysml.lang.sysml.InvocationExpression;
@@ -35,13 +35,13 @@ public class MaximizeFunction extends ReduceFunction {
3535
private static final String MAX_FUNCTION = "DataFunctions::max";
3636

3737
@Override
38-
public String getOperatorName() {
38+
public String getFunctionName() {
3939
return "maximize";
4040
}
4141

4242
@Override
4343
public EList<Element> invoke(InvocationExpression invocation, Element target,
44-
ModelLevelExpressionEvaluator evaluator) {
44+
ExpressionEvaluator evaluator) {
4545
EList<Element> list = evaluator.evaluateArgument(invocation, 0, target);
4646
Element expr = evaluator.argumentValue(invocation, 1, target);
4747
if (list == null || !(expr instanceof Expression)) {

org.omg.sysml.execution/src/org/omg/sysml/execution/expressions/functions/control/MinimizeFunction.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import java.util.function.BiFunction;
2424

2525
import org.eclipse.emf.common.util.EList;
26-
import org.omg.sysml.expressions.ModelLevelExpressionEvaluator;
26+
import org.omg.sysml.expressions.ExpressionEvaluator;
2727
import org.omg.sysml.lang.sysml.Element;
2828
import org.omg.sysml.lang.sysml.Expression;
2929
import org.omg.sysml.lang.sysml.InvocationExpression;
@@ -35,13 +35,13 @@ public class MinimizeFunction extends ReduceFunction {
3535
private static final String MIN_FUNCTION = "DataFunctions::min";
3636

3737
@Override
38-
public String getOperatorName() {
38+
public String getFunctionName() {
3939
return "minimize";
4040
}
4141

4242
@Override
4343
public EList<Element> invoke(InvocationExpression invocation, Element target,
44-
ModelLevelExpressionEvaluator evaluator) {
44+
ExpressionEvaluator evaluator) {
4545
EList<Element> list = evaluator.evaluateArgument(invocation, 0, target);
4646
Element expr = evaluator.argumentValue(invocation, 1, target);
4747
if (list == null || !(expr instanceof Expression)) {

org.omg.sysml.execution/src/org/omg/sysml/execution/expressions/functions/control/ReduceFunction.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import java.util.function.BiFunction;
2424

2525
import org.eclipse.emf.common.util.EList;
26-
import org.omg.sysml.expressions.ModelLevelExpressionEvaluator;
26+
import org.omg.sysml.expressions.ExpressionEvaluator;
2727
import org.omg.sysml.expressions.functions.control.ControlFunction;
2828
import org.omg.sysml.lang.sysml.Element;
2929
import org.omg.sysml.lang.sysml.Expression;
@@ -33,7 +33,7 @@
3333
public class ReduceFunction extends ControlFunction {
3434

3535
@Override
36-
public String getOperatorName() {
36+
public String getFunctionName() {
3737
return "reduce";
3838
}
3939

@@ -55,7 +55,7 @@ protected EList<Element> reduce(InvocationExpression invocation, EList<Element>
5555

5656
@Override
5757
public EList<Element> invoke(InvocationExpression invocation, Element target,
58-
ModelLevelExpressionEvaluator evaluator) {
58+
ExpressionEvaluator evaluator) {
5959
EList<Element> list = evaluator.evaluateArgument(invocation, 0, target);
6060
Element expr = evaluator.argumentValue(invocation, 1, target);
6161
if (list == null || !(expr instanceof Expression)) {

org.omg.sysml.execution/src/org/omg/sysml/execution/expressions/functions/control/RejectFunction.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import java.util.function.BiFunction;
2424

2525
import org.eclipse.emf.common.util.EList;
26-
import org.omg.sysml.expressions.ModelLevelExpressionEvaluator;
26+
import org.omg.sysml.expressions.ExpressionEvaluator;
2727
import org.omg.sysml.expressions.functions.control.ControlFunction;
2828
import org.omg.sysml.lang.sysml.Element;
2929
import org.omg.sysml.lang.sysml.InvocationExpression;
@@ -32,13 +32,13 @@
3232
public class RejectFunction extends ControlFunction {
3333

3434
@Override
35-
public String getOperatorName() {
35+
public String getFunctionName() {
3636
return "reject";
3737
}
3838

3939
@Override
4040
public EList<Element> invoke(InvocationExpression invocation, Element target,
41-
ModelLevelExpressionEvaluator evaluator) {
41+
ExpressionEvaluator evaluator) {
4242
return collectSelected(invocation, target, evaluator, new BiFunction<>() {
4343
@Override
4444
public EList<Element> apply(Element value, EList<Element> exprValue) {

org.omg.sysml.execution/src/org/omg/sysml/execution/expressions/functions/control/SelectOneFunction.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
package org.omg.sysml.execution.expressions.functions.control;
2222

2323
import org.eclipse.emf.common.util.EList;
24-
import org.omg.sysml.expressions.ModelLevelExpressionEvaluator;
24+
import org.omg.sysml.expressions.ExpressionEvaluator;
2525
import org.omg.sysml.expressions.functions.control.SelectFunction;
2626
import org.omg.sysml.lang.sysml.Element;
2727
import org.omg.sysml.lang.sysml.InvocationExpression;
@@ -30,13 +30,13 @@
3030
public class SelectOneFunction extends SelectFunction {
3131

3232
@Override
33-
public String getOperatorName() {
33+
public String getFunctionName() {
3434
return "selectOne";
3535
}
3636

3737
@Override
3838
public EList<Element> invoke(InvocationExpression invocation, Element target,
39-
ModelLevelExpressionEvaluator evaluator) {
39+
ExpressionEvaluator evaluator) {
4040
EList<Element> list = super.invoke(invocation, target, evaluator);
4141
return list.isEmpty()? EvaluationUtil.nullList():
4242
EvaluationUtil.singletonList(list.get(0));

org.omg.sysml.execution/src/org/omg/sysml/execution/expressions/functions/data/MaxFunction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
public class MaxFunction extends ArithmeticFunction {
3030

3131
@Override
32-
public String getOperatorName() {
32+
public String getFunctionName() {
3333
return "max";
3434
}
3535

0 commit comments

Comments
 (0)