Skip to content

Commit 8b1b762

Browse files
committed
ST6RI-851 Updated subject and objective redefinitions computation.
- Need to handle redefining subjects and objectives that are not directly owned by general types.
1 parent 28737d5 commit 8b1b762

6 files changed

Lines changed: 302 additions & 1895 deletions

File tree

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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1079,7 +1079,7 @@ class SysMLValidator extends KerMLValidator {
10791079
checkAtMostOneFeature(defn, SubjectMembership, INVALID_REQUIREMENT_DEFINITION_ONLY_ONE_SUBJECT_MSG, INVALID_REQUIREMENT_DEFINITION_ONLY_ONE_SUBJECT)
10801080

10811081
// validateRequirementDefinitionSubjectParameterPosition
1082-
checkSubjectParameter(defn, defn.subjectParameter, defn.input, INVALID_REQUIREMENT_DEFINITION_SUBJECT_PARAMETER_POSITION_MSG, INVALID_REQUIREMENT_DEFINITION_SUBJECT_PARAMETER_POSITION)
1082+
checkSubjectParameter(defn, INVALID_REQUIREMENT_DEFINITION_SUBJECT_PARAMETER_POSITION_MSG, INVALID_REQUIREMENT_DEFINITION_SUBJECT_PARAMETER_POSITION)
10831083
}
10841084

10851085
@Check
@@ -1091,7 +1091,7 @@ class SysMLValidator extends KerMLValidator {
10911091
checkAtMostOneFeature(usg, SubjectMembership, INVALID_REQUIREMENT_USAGE_ONLY_ONE_SUBJECT_MSG, INVALID_REQUIREMENT_USAGE_ONLY_ONE_SUBJECT)
10921092

10931093
// validateRequirementUsageSubjectParameterPosition
1094-
checkSubjectParameter(usg, usg.subjectParameter, usg.input, INVALID_REQUIREMENT_USAGE_SUBJECT_PARAMETER_POSITION_MSG, INVALID_REQUIREMENT_USAGE_SUBJECT_PARAMETER_POSITION)
1094+
checkSubjectParameter(usg, INVALID_REQUIREMENT_USAGE_SUBJECT_PARAMETER_POSITION_MSG, INVALID_REQUIREMENT_USAGE_SUBJECT_PARAMETER_POSITION)
10951095
}
10961096

10971097
@Check
@@ -1129,7 +1129,7 @@ class SysMLValidator extends KerMLValidator {
11291129
checkAtMostOneFeature(defn, SubjectMembership, INVALID_CASE_DEFINITION_ONLY_ONE_SUBJECT_MSG, INVALID_CASE_DEFINITION_ONLY_ONE_SUBJECT)
11301130

11311131
// validateCaseDefinitionSubjectParameterPosition
1132-
checkSubjectParameter(defn, defn.subjectParameter, defn.input, INVALID_CASE_DEFINITION_SUBJECT_PARAMETER_POSITION_MSG, INVALID_CASE_DEFINITION_SUBJECT_PARAMETER_POSITION)
1132+
checkSubjectParameter(defn, INVALID_CASE_DEFINITION_SUBJECT_PARAMETER_POSITION_MSG, INVALID_CASE_DEFINITION_SUBJECT_PARAMETER_POSITION)
11331133
}
11341134

11351135
@Check
@@ -1145,7 +1145,7 @@ class SysMLValidator extends KerMLValidator {
11451145
checkAtMostOneFeature(usg, SubjectMembership, INVALID_CASE_USAGE_ONLY_ONE_SUBJECT_MSG, INVALID_CASE_USAGE_ONLY_ONE_SUBJECT)
11461146

11471147
// validateCaseUsageSubjectParameterPosition
1148-
checkSubjectParameter(usg, usg.subjectParameter, usg.input, INVALID_CASE_USAGE_SUBJECT_PARAMETER_POSITION_MSG, INVALID_CASE_USAGE_SUBJECT_PARAMETER_POSITION)
1148+
checkSubjectParameter(usg, INVALID_CASE_USAGE_SUBJECT_PARAMETER_POSITION_MSG, INVALID_CASE_USAGE_SUBJECT_PARAMETER_POSITION)
11491149
}
11501150

11511151
@Check
@@ -1390,9 +1390,11 @@ class SysMLValidator extends KerMLValidator {
13901390
return true
13911391
}
13921392

1393-
protected def boolean checkSubjectParameter(Type type, Feature subjectParameter, Iterable<Feature> inputs, String msg, String eId) {
1394-
if (subjectParameter !== null && (inputs.empty || inputs.get(0) !== subjectParameter)) {
1395-
if (subjectParameter.owningType === type) {
1393+
protected def boolean checkSubjectParameter(Type type, String msg, String eId) {
1394+
val inputs = type.input
1395+
if (inputs.empty || !UsageUtil.isSubjectParameter(inputs.get(0))) {
1396+
val subjectParameter = UsageUtil.getOwnedSubjectParameterOf(type)
1397+
if (subjectParameter !== null) {
13961398
error(msg, subjectParameter, null, eId)
13971399
} else {
13981400
error(msg, type, null, eId)

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,12 @@ public void addRequirementConstraintSubsetting() {
8282
*/
8383
@Override
8484
protected List<? extends Feature> getRelevantFeatures(Type type, Element skip) {
85+
RequirementUsage target = getTarget();
8586
return UsageUtil.isObjective(getTarget())?
86-
Collections.singletonList(UsageUtil.getObjectiveRequirementOf(type)):
87+
Collections.singletonList(
88+
type == target.getOwningType()?
89+
UsageUtil.getOwnedObjectiveRequirementOf(type):
90+
UsageUtil.getObjectiveRequirementOf(type)):
8791
super.getRelevantFeatures(type, skip);
8892
}
8993

org.omg.sysml/src/org/omg/sysml/delegate/setting/CaseDefinition_objectiveRequirement_SettingDelegate.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/*******************************************************************************
22
* SysML 2 Pilot Implementation
33
* Copyright (c) 2022 Siemens AG
4+
* Copyright (c) 2025 Model Driven Solutions, Inc.
45
*
56
* This program is free software: you can redistribute it and/or modify
67
* it under the terms of the GNU Lesser General Public License as published by
@@ -25,9 +26,7 @@
2526
import org.eclipse.emf.ecore.EStructuralFeature;
2627
import org.eclipse.emf.ecore.InternalEObject;
2728
import org.omg.sysml.lang.sysml.CaseDefinition;
28-
import org.omg.sysml.lang.sysml.ObjectiveMembership;
29-
import org.omg.sysml.lang.sysml.RequirementUsage;
30-
import org.omg.sysml.util.TypeUtil;
29+
import org.omg.sysml.util.UsageUtil;
3130

3231
public class CaseDefinition_objectiveRequirement_SettingDelegate extends BasicDerivedObjectSettingDelegate {
3332

@@ -37,7 +36,7 @@ public CaseDefinition_objectiveRequirement_SettingDelegate(EStructuralFeature eS
3736

3837
@Override
3938
protected EObject basicGet(InternalEObject owner) {
40-
return (RequirementUsage)TypeUtil.getOwnedFeatureByMembershipIn((CaseDefinition)owner, ObjectiveMembership.class);
39+
return UsageUtil.getObjectiveRequirementOf((CaseDefinition)owner);
4140
}
4241

4342
}

org.omg.sysml/src/org/omg/sysml/delegate/setting/CaseUsage_objectiveRequirement_SettingDelegate.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/*******************************************************************************
22
* SysML 2 Pilot Implementation
33
* Copyright (c) 2022 Siemens AG
4+
* Copyright (c) 2025 Model Driven Solutions, Inc.
45
*
56
* This program is free software: you can redistribute it and/or modify
67
* it under the terms of the GNU Lesser General Public License as published by
@@ -25,9 +26,7 @@
2526
import org.eclipse.emf.ecore.EStructuralFeature;
2627
import org.eclipse.emf.ecore.InternalEObject;
2728
import org.omg.sysml.lang.sysml.CaseUsage;
28-
import org.omg.sysml.lang.sysml.ObjectiveMembership;
29-
import org.omg.sysml.lang.sysml.RequirementUsage;
30-
import org.omg.sysml.util.TypeUtil;
29+
import org.omg.sysml.util.UsageUtil;
3130

3231
public class CaseUsage_objectiveRequirement_SettingDelegate extends BasicDerivedObjectSettingDelegate {
3332

@@ -37,7 +36,7 @@ public CaseUsage_objectiveRequirement_SettingDelegate(EStructuralFeature eStruct
3736

3837
@Override
3938
protected EObject basicGet(InternalEObject owner) {
40-
return (RequirementUsage)TypeUtil.getOwnedFeatureByMembershipIn((CaseUsage)owner, ObjectiveMembership.class);
39+
return UsageUtil.getObjectiveRequirementOf((CaseUsage)owner);
4140
}
4241

4342
}

org.omg.sysml/src/org/omg/sysml/util/UsageUtil.java

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -120,36 +120,44 @@ public static VariantMembership getOwningVariantMembershipFor(Usage usage) {
120120

121121
// Subjects
122122

123-
public static boolean isSubjectParameter(Usage usage) {
124-
return usage.getOwningFeatureMembership() instanceof SubjectMembership;
123+
public static boolean isSubjectParameter(Feature feature) {
124+
return feature != null && feature.getOwningFeatureMembership() instanceof SubjectMembership;
125125
}
126126

127-
public static Usage getSubjectParameterOf(Type type) {
128-
NamespaceUtil.addAdditionalMembersTo(type);
127+
public static Usage getOwnedSubjectParameterOf(Type type) {
129128
return (Usage)TypeUtil.getOwnedFeatureByMembershipIn(type, SubjectMembership.class);
130129
}
131130

131+
public static Usage getSubjectParameterOf(Type type) {
132+
return (Usage)TypeUtil.getFeatureByMembershipIn(type, SubjectMembership.class);
133+
}
134+
132135
public static boolean hasRelevantSubjectParameter(Usage usage) {
133136
return getUsageAdapter(usage).hasRelevantSubjectParameter();
134137
}
135138

136139
public static FeatureValue getSatisfyingFeatureValueOf(SatisfyRequirementUsage usage) {
137-
Feature subject = usage.getSubjectParameter();
140+
Feature subject = UsageUtil.getOwnedSubjectParameterOf(usage);
138141
return subject == null? null: FeatureUtil.getValuationFor(subject);
139142
}
140143

141144
// Objectives
142145

146+
public static RequirementUsage getOwnedObjectiveRequirementOf(Type type) {
147+
if (type instanceof Feature) {
148+
type = ((Feature)type).getFeatureTarget();
149+
}
150+
return (RequirementUsage)TypeUtil.getOwnedFeatureByMembershipIn(type, ObjectiveMembership.class);
151+
}
152+
143153
public static RequirementUsage getObjectiveRequirementOf(Type type) {
144154
// TODO: Update checkRequirementUsageObjectiveRedefinition
145155
// See SYSML21-309
146156
if (type instanceof Feature) {
147157
type = ((Feature)type).getFeatureTarget();
148158
}
149-
NamespaceUtil.addAdditionalMembersTo(type);
150-
return type instanceof CaseDefinition? ((CaseDefinition)type).getObjectiveRequirement():
151-
type instanceof CaseUsage? ((CaseUsage)type).getObjectiveRequirement():
152-
null;
159+
return !(type instanceof CaseDefinition || type instanceof CaseUsage)? null:
160+
(RequirementUsage)TypeUtil.getFeatureByMembershipIn(type, ObjectiveMembership.class);
153161
}
154162

155163
// Actors

0 commit comments

Comments
 (0)