Skip to content

Commit 4a96c23

Browse files
committed
KERML_-117 Moved adding index result type to new IndexExpressionAdapter.
1 parent 21f74b8 commit 4a96c23

3 files changed

Lines changed: 75 additions & 35 deletions

File tree

org.omg.sysml/src/org/omg/sysml/adapter/ElementAdapterFactory.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,11 @@ public ElementAdapter caseIncludeUseCaseUsage(IncludeUseCaseUsage element) {
307307
return new IncludeUseCaseUsageAdapter(element);
308308
}
309309

310+
@Override
311+
public ElementAdapter caseIndexExpression(IndexExpression element) {
312+
return new IndexExpressionAdapter(element);
313+
}
314+
310315
@Override
311316
public ElementAdapter caseIntersecting(Intersecting element) {
312317
return new IntersectingAdapter(element);
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*******************************************************************************
2+
* SysML 2 Pilot Implementation
3+
* Copyright (c) 2024 Model Driven Solutions, Inc.
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU Lesser General Public License as published by
7+
* the Free Software Foundation, either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU Lesser General Public License for more details.
14+
*
15+
* You should have received a copy of theGNU Lesser General Public License
16+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
17+
*
18+
* @license LGPL-3.0-or-later <http://spdx.org/licenses/LGPL-3.0-or-later>
19+
*
20+
*******************************************************************************/
21+
22+
package org.omg.sysml.adapter;
23+
24+
import org.eclipse.emf.common.util.EList;
25+
import org.omg.sysml.lang.sysml.Expression;
26+
import org.omg.sysml.lang.sysml.Feature;
27+
import org.omg.sysml.lang.sysml.IndexExpression;
28+
import org.omg.sysml.lang.sysml.SysMLPackage;
29+
import org.omg.sysml.lang.sysml.Type;
30+
import org.omg.sysml.util.ElementUtil;
31+
import org.omg.sysml.util.TypeUtil;
32+
33+
public class IndexExpressionAdapter extends OperatorExpressionAdapter {
34+
35+
public static final String ARRAY_TYPE = "Collections::Array";
36+
37+
public IndexExpressionAdapter(IndexExpression element) {
38+
super(element);
39+
}
40+
41+
@Override
42+
public IndexExpression getTarget() {
43+
return (IndexExpression)super.getTarget();
44+
}
45+
46+
@Override
47+
protected void addResultTyping() {
48+
IndexExpression target = getTarget();
49+
EList<Expression> arguments = target.getArgument();
50+
if (!arguments.isEmpty()) {
51+
Expression seqArgument = arguments.get(0);
52+
ElementUtil.transform(seqArgument);
53+
Feature seqResult = seqArgument.getResult();
54+
if (!hasArrayType(seqResult)) {
55+
Feature resultFeature = target.getResult();
56+
if (resultFeature != null && seqResult != null) {
57+
TypeUtil.addImplicitGeneralTypeTo(resultFeature, SysMLPackage.eINSTANCE.getSubsetting(), seqResult);
58+
}
59+
}
60+
}
61+
}
62+
63+
protected boolean hasArrayType(Feature feature) {
64+
Type arrayType = getLibraryType(ARRAY_TYPE);
65+
return arrayType != null &&
66+
feature.getType().stream().anyMatch(t->TypeUtil.conforms(t, arrayType));
67+
}
68+
69+
}
Lines changed: 1 addition & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*******************************************************************************
22
* SysML 2 Pilot Implementation
3-
* Copyright (c) 2021-2023 Model Driven Solutions, Inc.
3+
* Copyright (c) 2021-2024 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
@@ -21,21 +21,12 @@
2121

2222
package org.omg.sysml.adapter;
2323

24-
import org.eclipse.emf.common.util.EList;
25-
import org.omg.sysml.lang.sysml.Expression;
26-
import org.omg.sysml.lang.sysml.Feature;
2724
import org.omg.sysml.lang.sysml.OperatorExpression;
2825
import org.omg.sysml.lang.sysml.SysMLPackage;
29-
import org.omg.sysml.lang.sysml.Type;
30-
import org.omg.sysml.util.ElementUtil;
3126
import org.omg.sysml.util.ExpressionUtil;
32-
import org.omg.sysml.util.TypeUtil;
3327

3428
public class OperatorExpressionAdapter extends InvocationExpressionAdapter {
3529

36-
public static final String INDEXING_OPERATOR = "#";
37-
public static final String ARRAY_TYPE = "Collections::Array";
38-
3930
public OperatorExpressionAdapter(OperatorExpression element) {
4031
super(element);
4132
}
@@ -45,30 +36,6 @@ public OperatorExpression getTarget() {
4536
return (OperatorExpression)super.getTarget();
4637
}
4738

48-
public void addIndexingResultSubsetting() {
49-
OperatorExpression target = getTarget();
50-
if (INDEXING_OPERATOR.equals(target.getOperator())) {
51-
EList<Expression> arguments = target.getArgument();
52-
if (!arguments.isEmpty()) {
53-
Expression seqArgument = arguments.get(0);
54-
ElementUtil.transform(seqArgument);
55-
Feature seqResult = seqArgument.getResult();
56-
if (!hasArrayType(seqResult)) {
57-
Feature resultFeature = target.getResult();
58-
if (resultFeature != null && seqResult != null) {
59-
TypeUtil.addImplicitGeneralTypeTo(resultFeature, SysMLPackage.eINSTANCE.getSubsetting(), seqResult);
60-
}
61-
}
62-
}
63-
}
64-
}
65-
66-
protected boolean hasArrayType(Feature feature) {
67-
Type arrayType = getLibraryType(ARRAY_TYPE);
68-
return arrayType != null &&
69-
feature.getType().stream().anyMatch(t->TypeUtil.conforms(t, arrayType));
70-
}
71-
7239
@Override
7340
public void computeImplicitGeneralTypes() {
7441
OperatorExpression target = getTarget();
@@ -77,7 +44,6 @@ public void computeImplicitGeneralTypes() {
7744
addDefaultGeneralType(SysMLPackage.eINSTANCE.getFeatureTyping(), ExpressionUtil.getOperatorQualifiedNames(operator));
7845
}
7946
super.computeImplicitGeneralTypes();
80-
addIndexingResultSubsetting();
8147
}
8248

8349
}

0 commit comments

Comments
 (0)