Skip to content

Commit af9c208

Browse files
authored
Merge pull request #683 from Systems-Modeling/ST6RI-877/878
ST6RI 877 Parameter and end features are computed incorrectly / ST6RI-878 Problems with parameters in TransitionPerformances and Actions models (KERML11-79, SYSML21-327)
2 parents 9d899db + 9365517 commit af9c208

File tree

15 files changed

+103
-169
lines changed

15 files changed

+103
-169
lines changed

org.omg.kerml.xpect.tests/library/TransitionPerformances.kerml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ standard library package TransitionPerformances {
4141

4242
feature accNum: Natural [1] = if isEmpty(trigger) ? 0 else 1;
4343
step accept: AcceptPerformance[accNum] subsets timeEnclosedOccurrences, acceptPerformances {
44-
in feature redefines receiver = triggerTarget;
4544
feature redefines acceptedTransfer = trigger;
4645
}
46+
binding accept.receiver = triggerTarget;
4747

4848
private succession [*] guard then [accNum] accept;
4949
}

org.omg.sysml.xpect.tests/library.kernel/TransitionPerformances.kerml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ standard library package TransitionPerformances {
4141

4242
feature accNum: Natural [1] = if isEmpty(trigger) ? 0 else 1;
4343
step accept: AcceptPerformance[accNum] subsets timeEnclosedOccurrences, acceptPerformances {
44-
in feature redefines receiver = triggerTarget;
4544
feature redefines acceptedTransfer = trigger;
4645
}
46+
binding accept.receiver = triggerTarget;
4747

4848
private succession [*] guard then [accNum] accept;
4949
}

org.omg.sysml.xpect.tests/library.systems/Actions.sysml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ standard library package Actions {
144144
/*
145145
* The subactions of this Action that are AssignmentActions.
146146
*/
147+
148+
in target;
147149
}
148150

149151
abstract action ifSubactions : IfThenAction[0..*] :> subactions, ifThenActions {

org.omg.sysml.xtext/src/org/omg/sysml/xtext/validation/SysMLValidator.xtend

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
*****************************************************************************/
2626
package org.omg.sysml.xtext.validation
2727

28+
import org.eclipse.emf.ecore.EObject
2829
import org.eclipse.emf.ecore.EReference
2930
import org.eclipse.emf.ecore.EStructuralFeature
3031
import org.eclipse.xtext.validation.Check
@@ -88,8 +89,6 @@ import org.omg.sysml.lang.sysml.UseCaseUsage
8889
import org.omg.sysml.lang.sysml.UseCaseDefinition
8990
import org.omg.sysml.lang.sysml.MetadataUsage
9091
import org.omg.sysml.lang.sysml.Metaclass
91-
import org.omg.sysml.util.FeatureUtil
92-
import org.omg.sysml.util.UsageUtil
9392
import org.omg.sysml.lang.sysml.Interaction
9493
import org.omg.sysml.lang.sysml.SendActionUsage
9594
import org.omg.sysml.lang.sysml.FeatureReferenceExpression
@@ -122,7 +121,6 @@ import org.omg.sysml.lang.sysml.ViewRenderingMembership
122121
import org.omg.sysml.lang.sysml.AttributeDefinition
123122
import org.omg.sysml.lang.sysml.Namespace
124123
import org.omg.sysml.lang.sysml.ActionDefinition
125-
import org.eclipse.emf.ecore.EObject
126124
import org.omg.sysml.lang.sysml.TransitionFeatureKind
127125
import org.omg.sysml.lang.sysml.ActorMembership
128126
import org.omg.sysml.lang.sysml.RequirementConstraintKind
@@ -131,10 +129,11 @@ import org.omg.sysml.lang.sysml.ReferenceUsage
131129
import org.omg.sysml.lang.sysml.IfActionUsage
132130
import org.omg.sysml.lang.sysml.WhileLoopActionUsage
133131
import org.omg.sysml.lang.sysml.TriggerKind
134-
import org.omg.sysml.util.TypeUtil
135132
import org.omg.sysml.lang.sysml.FlowDefinition
136133
import org.omg.sysml.lang.sysml.FlowUsage
137134
import org.omg.sysml.lang.sysml.Relationship
135+
import org.omg.sysml.util.FeatureUtil
136+
import org.omg.sysml.util.UsageUtil
138137

139138
/**
140139
* This class contains custom validation rules.
@@ -667,7 +666,7 @@ class SysMLValidator extends KerMLValidator {
667666
@Check
668667
def checkFlowDefinition(FlowDefinition cdef) {
669668
// validateConnectionDefinitionConnectionEnds
670-
val ends = TypeUtil.getAllEndFeaturesOf(cdef)
669+
val ends = cdef.endFeature
671670
if (ends.size > 2) {
672671
val ownedEnds = cdef.ownedEndFeature
673672
if (ownedEnds.size <= 2) {

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import java.util.List;
2626

2727
import org.omg.sysml.lang.sysml.ActionUsage;
28-
import org.omg.sysml.lang.sysml.Element;
2928
import org.omg.sysml.lang.sysml.Feature;
3029
import org.omg.sysml.lang.sysml.FeatureMembership;
3130
import org.omg.sysml.lang.sysml.PartDefinition;
@@ -130,10 +129,10 @@ public boolean isComputeRedefinitions() {
130129
}
131130

132131
@Override
133-
protected List<? extends Feature> getRelevantFeatures(Type type, Element skip) {
132+
protected List<? extends Feature> getRelevantFeatures(Type type) {
134133
ActionUsage target = getTarget();
135134
String redefinedFeature = getRedefinedFeature(target);
136-
return redefinedFeature == null? super.getRelevantFeatures(type, skip):
135+
return redefinedFeature == null? super.getRelevantFeatures(type):
137136
type == target.getOwningType()? Collections.singletonList(target):
138137
Collections.singletonList((Feature)getLibraryType(redefinedFeature));
139138
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,14 @@ protected String getDefaultSupertype() {
8080
// Computed Redefinition
8181

8282
@Override
83-
protected List<? extends Feature> getRelevantFeatures(Type type, Element skip) {
83+
protected List<? extends Feature> getRelevantFeatures(Type type) {
8484
Expression target = getTarget();
8585
Type owningType = target.getOwningType();
8686
return ExpressionUtil.isTransitionGuard(target)?
8787
type == owningType? Collections.singletonList(target):
8888
Collections.singletonList((Feature)getLibraryType(EXPRESSION_GUARD_FEATURE)):
8989
owningType instanceof FeatureValue? Collections.emptyList():
90-
super.getRelevantFeatures(type, skip);
90+
super.getRelevantFeatures(type);
9191
}
9292

9393
@Override

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

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -572,10 +572,10 @@ protected void addRedefinitions(Element skip) {
572572
Feature target = getTarget();
573573
Type type = target.getOwningType();
574574
if (type != null) {
575-
int i = getRelevantFeatures(type, skip).indexOf(target);
575+
int i = getRelevantFeatures(type).indexOf(target);
576576
if (i >= 0) {
577577
for (Type general: getGeneralTypes(type, skip)) {
578-
List<? extends Feature> features = getRelevantFeatures(general, skip);
578+
List<? extends Feature> features = getRelevantFeatures(general);
579579
if (i < features.size()) {
580580
Feature redefinedFeature = features.get(i);
581581
if (redefinedFeature != null && redefinedFeature != target) {
@@ -606,18 +606,23 @@ protected List<Type> getGeneralTypes(Type type, Element skip) {
606606
* Get the relevant Features that may be redefined from the given Type.
607607
* This includes end features, owned features of constructor results, and
608608
* generally parameters.
609-
*
610-
* @satisfies checkFeatureEndRedefinition
611609
*/
612-
protected List<? extends Feature> getRelevantFeatures(Type type, Element skip) {
610+
protected List<? extends Feature> getRelevantFeatures(Type type) {
613611
Feature target = getTarget();
614612
return type == null? Collections.emptyList():
615-
target.isEnd()? TypeUtil.getAllEndFeaturesOf(type):
613+
target.isEnd()? getEndRelevantFeatures(type):
616614
ExpressionUtil.isConstructorResult(target.getOwningType())? getConstructorRelevantFeatures(type):
617-
FeatureUtil.isParameter(target)? getParameterRelevantFeatures(type, skip):
615+
FeatureUtil.isParameter(target)? getParameterRelevantFeatures(type):
618616
Collections.emptyList();
619617
}
620618

619+
/**
620+
* @satisfies checkFeatureEndRedefinition
621+
*/
622+
protected List<? extends Feature> getEndRelevantFeatures(Type type) {
623+
return getTarget().getOwningType() == type? type.getOwnedEndFeature(): type.getEndFeature();
624+
}
625+
621626
/**
622627
* @satisfies checkConstructorExpressionResultFeatureRedefinition
623628
*/
@@ -640,15 +645,15 @@ protected List<? extends Feature> getConstructorRelevantFeatures(Type type) {
640645
*
641646
* @satisfies checkFeatureResultRedefinition
642647
*/
643-
public List<? extends Feature> getParameterRelevantFeatures(Type type, Element skip) {
648+
public List<? extends Feature> getParameterRelevantFeatures(Type type) {
644649
if (type != null) {
645650
if (FeatureUtil.isResultParameter(getTarget())) {
646651
Feature resultParameter = TypeUtil.getResultParameterOf(type);
647652
if (resultParameter != null) {
648653
return Collections.singletonList(resultParameter);
649654
}
650655
} else {
651-
return getRelevantParameters(type, skip);
656+
return getRelevantParameters(type);
652657
}
653658
}
654659
return Collections.emptyList();
@@ -657,11 +662,11 @@ public List<? extends Feature> getParameterRelevantFeatures(Type type, Element s
657662
/**
658663
* @satisfies checkFeatureParameterRedefinition
659664
*/
660-
protected List<Feature> getRelevantParameters(Type type, Element skip) {
665+
protected List<Feature> getRelevantParameters(Type type) {
661666
Type owningType = getTarget().getOwningType();
662667
return filterIgnoredParameters(type == owningType?
663668
TypeUtil.getOwnedParametersOf(type):
664-
TypeUtil.getAllParametersOf(type, skip));
669+
TypeUtil.getAllParametersOf(type));
665670
}
666671

667672
protected List<Feature> filterIgnoredParameters(List<Feature> parameters) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*******************************************************************************
22
* SysML 2 Pilot Implementation
3-
* Copyright (c) 2021, 2024 Model Driven Solutions, Inc.
3+
* Copyright (c) 2021, 2024, 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
@@ -58,7 +58,7 @@ protected String getDefaultSupertype() {
5858
}
5959

6060
@Override
61-
protected List<Multiplicity> getRelevantFeatures(Type type, Element skip) {
61+
protected List<Multiplicity> getRelevantFeatures(Type type) {
6262
return Collections.emptyList();
6363
}
6464

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import java.util.Collections;
2525
import java.util.List;
2626

27-
import org.omg.sysml.lang.sysml.Element;
2827
import org.omg.sysml.lang.sysml.Feature;
2928
import org.omg.sysml.lang.sysml.RequirementDefinition;
3029
import org.omg.sysml.lang.sysml.RequirementUsage;
@@ -81,14 +80,14 @@ public void addRequirementConstraintSubsetting() {
8180
* @satisfies checkRequirementUsageObjectiveRedefinition
8281
*/
8382
@Override
84-
protected List<? extends Feature> getRelevantFeatures(Type type, Element skip) {
83+
protected List<? extends Feature> getRelevantFeatures(Type type) {
8584
RequirementUsage target = getTarget();
8685
return UsageUtil.isObjective(getTarget())?
8786
Collections.singletonList(
8887
type == target.getOwningType()?
8988
UsageUtil.getOwnedObjectiveRequirementOf(type):
9089
UsageUtil.getObjectiveRequirementOf(type)):
91-
super.getRelevantFeatures(type, skip);
90+
super.getRelevantFeatures(type);
9291
}
9392

9493
}
Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*******************************************************************************
22
* SysML 2 Pilot Implementation
33
* Copyright (c) 2022 Siemens AG
4-
* Copyright (c) 2022 Model Driven Solutions, Inc.
4+
* Copyright (c) 2022, 2025 Model Driven Solutions, Inc.
55
*
66
* This program is free software: you can redistribute it and/or modify
77
* it under the terms of the GNU Lesser General Public License as published by
@@ -22,25 +22,12 @@
2222

2323
package org.omg.sysml.delegate.setting;
2424

25-
import org.eclipse.emf.common.util.EList;
2625
import org.eclipse.emf.ecore.EStructuralFeature;
27-
import org.eclipse.emf.ecore.InternalEObject;
28-
import org.omg.sysml.lang.sysml.Behavior;
29-
import org.omg.sysml.lang.sysml.Feature;
30-
import org.omg.sysml.util.NonNotifyingEObjectEList;
31-
import org.omg.sysml.util.TypeUtil;
3226

33-
public class Behavior_parameter_SettingDelegate extends BasicDerivedListSettingDelegate {
27+
public class Behavior_parameter_SettingDelegate extends Type_directedFeature_SettingDelegate {
3428

3529
public Behavior_parameter_SettingDelegate(EStructuralFeature eStructuralFeature) {
3630
super(eStructuralFeature);
3731
}
3832

39-
@Override
40-
protected EList<?> basicGet(InternalEObject owner) {
41-
EList<Feature> parameters = new NonNotifyingEObjectEList<>(Feature.class, owner, eStructuralFeature.getFeatureID());
42-
parameters.addAll(TypeUtil.getAllParametersOf((Behavior)owner));
43-
return parameters;
44-
}
45-
4633
}

0 commit comments

Comments
 (0)