Skip to content

Commit 27cfe6b

Browse files
committed
KERML_-99 Revised FeatureChainExpressionAdapter for result subsetting.
- Also moved adding of sourceTarget feature into addAdditionalMembers method.
1 parent 657bce5 commit 27cfe6b

3 files changed

Lines changed: 29 additions & 15 deletions

File tree

org.omg.kerml.xtext/src/org/omg/kerml/xtext/validation/KerMLValidator.xtend

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -976,6 +976,8 @@ class KerMLValidator extends AbstractKerMLValidator {
976976
)) {
977977
error(INVALID_FEATURE_CHAIN_EXPRESSION_FEATURE_CONFORMANCE_MSG, e.ownedMembership.get(1), SysMLPackage.eINSTANCE.membership_MemberElement, INVALID_FEATURE_CHAIN_EXPRESSION_FEATURE_CONFORMANCE)
978978
}
979+
980+
// validateFeatureChainExpressionOperator is automatically satisfied
979981
}
980982

981983
@Check

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

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*******************************************************************************
22
* SysML 2 Pilot Implementation
3-
* Copyright (c) 2021, 2022 Model Driven Solutions, Inc.
3+
* Copyright (c) 2021, 2022, 2025 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,13 +21,11 @@
2121

2222
package org.omg.sysml.adapter;
2323

24-
import java.util.List;
25-
26-
import org.omg.sysml.lang.sysml.Element;
2724
import org.omg.sysml.lang.sysml.Feature;
2825
import org.omg.sysml.lang.sysml.FeatureChainExpression;
2926
import org.omg.sysml.lang.sysml.SysMLFactory;
3027
import org.omg.sysml.lang.sysml.SysMLPackage;
28+
import org.omg.sysml.util.FeatureUtil;
3129
import org.omg.sysml.util.ImplicitGeneralizationMap;
3230
import org.omg.sysml.util.TypeUtil;
3331

@@ -46,26 +44,36 @@ public FeatureChainExpression getTarget() {
4644
protected void addResultTyping() {
4745
FeatureChainExpression target = getTarget();
4846
Feature result = target.getResult();
49-
Element targetFeature = target.getTargetFeature();
50-
if (result != null) {
47+
Feature sourceTarget = target.sourceTargetFeature();
48+
if (result != null && sourceTarget != null) {
49+
Feature sourceParameter = TypeUtil.getOwnedParameterOf(target, 0, Feature.class);
5150
TypeUtil.addImplicitGeneralTypeTo(result,
52-
SysMLPackage.eINSTANCE.getSubsetting(), (Feature)targetFeature);
51+
SysMLPackage.eINSTANCE.getSubsetting(),
52+
FeatureUtil.chainFeatures(sourceParameter, sourceTarget));
5353
}
5454
}
5555

56-
protected void addTargetRedefinition() {
56+
@Override
57+
public void addAdditionalMembers() {
58+
super.addAdditionalMembers();
59+
60+
// Add sourceTarget feature.
5761
FeatureChainExpression target = getTarget();
5862
Feature sourceParameter = TypeUtil.getOwnedParameterOf(target, 0, Feature.class);
5963
if (sourceParameter != null) {
60-
Feature sourceTarget = null;
61-
List<Feature> sourceFeatures = sourceParameter.getOwnedFeature();
62-
if (!sourceFeatures.isEmpty()) {
63-
sourceTarget = sourceFeatures.get(0);
64-
} else {
65-
sourceTarget = SysMLFactory.eINSTANCE.createFeature();
64+
if (sourceParameter.getOwnedFeature().isEmpty()) {
65+
Feature sourceTarget = SysMLFactory.eINSTANCE.createFeature();
6666
sourceTarget.setDeclaredName(""); // To avoid effective naming.
6767
TypeUtil.addOwnedFeatureTo(sourceParameter, sourceTarget);
6868
}
69+
}
70+
}
71+
72+
protected void addTargetRedefinition() {
73+
FeatureChainExpression target = getTarget();
74+
Feature sourceParameter = TypeUtil.getOwnedParameterOf(target, 0, Feature.class);
75+
if (sourceParameter != null) {
76+
Feature sourceTarget = target.sourceTargetFeature();
6977
TypeUtil.addImplicitGeneralTypeTo(sourceTarget,
7078
SysMLPackage.eINSTANCE.getRedefinition(),
7179
getLibraryType(ImplicitGeneralizationMap.getDefaultSupertypeFor(target.getClass(), "target")));

org.omg.sysml/syntax-gen/org/omg/sysml/lang/sysml/impl/FeatureChainExpressionImpl.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@
4747
*/
4848
public class FeatureChainExpressionImpl extends OperatorExpressionImpl implements FeatureChainExpression {
4949

50+
private static final String FEATURE_CHAIN_FUNCTION = ".";
51+
5052
/**
5153
* The cached setting delegate for the '{@link #getTargetFeature() <em>Target Feature</em>}' reference.
5254
* <!-- begin-user-doc -->
@@ -56,7 +58,6 @@ public class FeatureChainExpressionImpl extends OperatorExpressionImpl implement
5658
* @ordered
5759
*/
5860
protected EStructuralFeature.Internal.SettingDelegate TARGET_FEATURE__ESETTING_DELEGATE = ((EStructuralFeature.Internal)SysMLPackage.Literals.FEATURE_CHAIN_EXPRESSION__TARGET_FEATURE).getSettingDelegate();
59-
private static final String FEATURE_CHAIN_FUNCTION = ".";
6061

6162
/**
6263
* <!-- begin-user-doc -->
@@ -77,6 +78,9 @@ protected EClass eStaticClass() {
7778
return SysMLPackage.Literals.FEATURE_CHAIN_EXPRESSION;
7879
}
7980

81+
/**
82+
* @generated NOT
83+
*/
8084
@Override
8185
public String getOperator() {
8286
return FEATURE_CHAIN_FUNCTION;

0 commit comments

Comments
 (0)