Skip to content

Commit 9600683

Browse files
authored
Merge pull request #677 from Systems-Modeling/ST6RI-851
ST6RI-851 Remove automatic insertion of explicit subject and objective features
2 parents a1e24a1 + ceab5fc commit 9600683

31 files changed

Lines changed: 397 additions & 2051 deletions

File tree

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1152,7 +1152,7 @@ class KerMLValidator extends AbstractKerMLValidator {
11521152
val result = TypeUtil.getOwnedResultParameterOf(e)
11531153
if (type !== null && result !== null) {
11541154
val typeFeatures = type.feature.filter[f | f.owningMembership.visibility == VisibilityKind.PUBLIC]
1155-
val resultFeatures = result.ownedFeature.filter[p | FeatureUtil.isInputParameter(p)]
1155+
val resultFeatures = result.ownedFeature.filter[p | FeatureUtil.isInputDirected(p)]
11561156
e.checkInstantiationExpressionFeatures(typeFeatures, resultFeatures,
11571157
INVALID_CONSTRUCTOR_EXPRESSION_RESULT_FEATURE_REDEFINITION_MSG, INVALID_CONSTRUCTOR_EXPRESSION_RESULT_FEATURE_REDEFINITION,
11581158
INVALID_CONSTRUCTOR_EXPRESSION_NO_DUPLICATE_FEATURE_REDEFINITION_MSG, INVALID_CONSTRUCTOR_EXPRESSION_NO_DUPLICATE_FEATURE_REDEFINITION
@@ -1191,8 +1191,8 @@ class KerMLValidator extends AbstractKerMLValidator {
11911191

11921192
// validateInvocationExpressionParameterRedefinition
11931193
// validateInvocationExpressionNoDuplicateParameterRedefinition
1194-
val typeParams = type.feature.filter[p | FeatureUtil.isInputParameter(p)]
1195-
val exprParams = e.ownedFeature.filter[p | FeatureUtil.isInputParameter(p)]
1194+
val typeParams = type.input
1195+
val exprParams = e.ownedFeature.filter[p | FeatureUtil.isInputDirected(p)]
11961196
e.checkInstantiationExpressionFeatures(typeParams, exprParams,
11971197
INVALID_INVOCATION_EXPRESSION_PARAMETER_REDEFINITION_MSG, INVALID_INVOCATION_EXPRESSION_PARAMETER_REDEFINITION,
11981198
INVALID_INVOCATION_EXPRESSION_NO_DUPLICATE_PARAMETER_REDEFINITION_MSG, INVALID_INVOCATION_EXPRESSION_NO_DUPLICATE_PARAMETER_REDEFINITION

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ standard library package States {
8787
in transitionLinkSource[1]: StateAction :>>
8888
TransitionAction::transitionLinkSource, StateTransitionPerformance::transitionLinkSource;
8989

90-
out payload[0..*];
90+
inout payload[0..*];
9191
in :>> receiver;
9292

9393
bind payload = accepter.payload;

org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/simpletests/ActionTest.sysml.xt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ package ActionTest {
103103
}
104104
flow aa.target to snd1.receiver;
105105
action snd1 send {
106-
:>> payload = s;
106+
in :>> payload = s;
107107
}
108108
action snd2 send via this to aa.target;
109109
bind s = snd2.payload;

org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/simpletests/UseCaseTest.sysml.xt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ package UseCaseTest {
7878
part user : User;
7979

8080
use case uc2 {
81+
subject;
8182
actor :>> user;
8283
}
8384

org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/simpletests/ViewTest.sysml.xt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,12 @@ package ViewTest {
6262
part def S;
6363

6464
concern def C {
65+
subject;
6566
stakeholder s : S;
6667
}
6768

6869
concern c : C {
70+
subject;
6971
stakeholder s1;
7072
}
7173

org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/validation/invalid/CaseSubjectObjective_Invalid.sysml.xt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ package 'Case Subjects and Objectives' {
6060
// XPECT errors --> "Only one subject is allowed." at "subject s4;"
6161
subject s4;
6262

63+
// XPECT errors --> "Only one objective is allowed." at "objective o3;"
6364
objective o3;
6465

6566
// XPECT errors --> "Only one objective is allowed." at "objective o4;"
@@ -72,10 +73,18 @@ package 'Case Subjects and Objectives' {
7273
// XPECT errors --> "Subject must be first parameter." at "subject s5;"
7374
subject s5;
7475

76+
// XPECT errors --> "Only one objective is allowed." at "objective o5;"
7577
objective o5;
7678
}
7779

78-
case c1 : C1 {
80+
//* XPECT errors ---
81+
"Only one objective is allowed." at "case c1 : C1;"
82+
"Subject must be first parameter." at "case c1 : C1;"
83+
---
84+
*/
85+
case c1 : C1;
86+
87+
case c2 {
7988
in y;
8089

8190
// XPECT errors --> "Subject must be first parameter." at "subject s6;"

org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/validation/valid/SemanticMetadata_valid.sysml.xt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ package SemanticMetadata_valid {
8686

8787
requirement r1;
8888
#g requirement r2 {
89+
subject;
8990
actor #B a;
9091
assume #g constraint b;
9192
require #g r1;

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

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ import org.omg.sysml.lang.sysml.ConnectionUsage
4444
import org.omg.sysml.lang.sysml.ConstraintUsage
4545
import org.omg.sysml.lang.sysml.DataType
4646
import org.omg.sysml.lang.sysml.Definition
47-
import org.omg.sysml.lang.sysml.Element
4847
import org.omg.sysml.lang.sysml.EnumerationDefinition
4948
import org.omg.sysml.lang.sysml.EnumerationUsage
5049
import org.omg.sysml.lang.sysml.Feature
@@ -135,6 +134,7 @@ import org.omg.sysml.lang.sysml.TriggerKind
135134
import org.omg.sysml.util.TypeUtil
136135
import org.omg.sysml.lang.sysml.FlowDefinition
137136
import org.omg.sysml.lang.sysml.FlowUsage
137+
import org.omg.sysml.lang.sysml.Relationship
138138

139139
/**
140140
* This class contains custom validation rules.
@@ -932,9 +932,9 @@ class SysMLValidator extends KerMLValidator {
932932

933933
protected def checkStateSubactions(Type type) {
934934
val errorId = type instanceof Definition? INVALID_STATE_DEFINITION_SUBACTION_KIND: INVALID_STATE_USAGE_SUBACTION_KIND
935-
checkAtMostOneElement(UsageUtil.getStateSubactionMembershipsOf(type, StateSubactionKind.ENTRY), INVALID_STATE_SUBACTION_KIND_ENTRY_MSG, errorId);
936-
checkAtMostOneElement(UsageUtil.getStateSubactionMembershipsOf(type, StateSubactionKind.DO), INVALID_STATE_SUBACTION_KIND_DO_MSG, errorId);
937-
checkAtMostOneElement(UsageUtil.getStateSubactionMembershipsOf(type, StateSubactionKind.EXIT), INVALID_STATE_SUBACTION_KIND_EXIT_MSG, errorId);
935+
checkAtMostOneRelationship(type, UsageUtil.getStateSubactionMembershipsOf(type, StateSubactionKind.ENTRY), INVALID_STATE_SUBACTION_KIND_ENTRY_MSG, errorId);
936+
checkAtMostOneRelationship(type, UsageUtil.getStateSubactionMembershipsOf(type, StateSubactionKind.DO), INVALID_STATE_SUBACTION_KIND_DO_MSG, errorId);
937+
checkAtMostOneRelationship(type, UsageUtil.getStateSubactionMembershipsOf(type, StateSubactionKind.EXIT), INVALID_STATE_SUBACTION_KIND_EXIT_MSG, errorId);
938938
}
939939

940940
@Check
@@ -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
@@ -1321,17 +1321,26 @@ class SysMLValidator extends KerMLValidator {
13211321
return check
13221322
}
13231323

1324-
protected def boolean checkAtMostOneFeature(Type owningType, Class<? extends FeatureMembership> kind, String msg, String eId) {
1325-
var mems = owningType.ownedFeatureMembership.filter[m | kind.isInstance(m)]
1326-
checkAtMostOneElement(mems, msg, eId);
1324+
protected def boolean checkAtMostOneFeature(Type featuringType, Class<? extends FeatureMembership> kind, String msg, String eId) {
1325+
var mems = featuringType.featureMembership.filter[m | kind.isInstance(m)]
1326+
checkAtMostOneRelationship(featuringType, mems, msg, eId)
13271327
}
13281328

1329-
protected def boolean checkAtMostOneElement(Iterable<? extends Element> elements, String msg, String eId) {
1330-
if (elements.size <= 1) {
1329+
protected def boolean checkAtMostOneRelationship(Type type, Iterable<? extends Relationship> relationships, String msg, String eId) {
1330+
if (relationships.size <= 1) {
13311331
return true;
13321332
} else {
1333-
for (var i = 1; i < elements.size; i++) {
1334-
error(msg, elements.get(i), null, eId);
1333+
val ownedRelationships = relationships.filter[owningRelatedElement === type]
1334+
if (ownedRelationships.empty) {
1335+
error(msg, type, null, eId);
1336+
} else if (ownedRelationships.size == relationships.size) {
1337+
for (var i = 1; i < ownedRelationships.size; i++) {
1338+
error(msg, ownedRelationships.get(i), null, eId);
1339+
}
1340+
} else {
1341+
for (mem: ownedRelationships) {
1342+
error(msg, mem, null, eId);
1343+
}
13351344
}
13361345
return false;
13371346
}
@@ -1381,9 +1390,11 @@ class SysMLValidator extends KerMLValidator {
13811390
return true
13821391
}
13831392

1384-
protected def boolean checkSubjectParameter(Type type, Feature subjectParameter, Iterable<Feature> inputs, String msg, String eId) {
1385-
if (subjectParameter !== null && (inputs.empty || inputs.get(0) !== subjectParameter)) {
1386-
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) {
13871398
error(msg, subjectParameter, null, eId)
13881399
} else {
13891400
error(msg, type, null, eId)

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

Lines changed: 1 addition & 12 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
@@ -22,7 +22,6 @@
2222
package org.omg.sysml.adapter;
2323

2424
import org.omg.sysml.lang.sysml.CaseDefinition;
25-
import org.omg.sysml.util.UsageUtil;
2625

2726
public class CaseDefinitionAdapter extends CalculationDefinitionAdapter {
2827

@@ -35,14 +34,4 @@ public CaseDefinition getTarget() {
3534
return (CaseDefinition)super.getTarget();
3635
}
3736

38-
// Transformation
39-
40-
@Override
41-
public void addAdditionalMembers() {
42-
CaseDefinition target = getTarget();
43-
UsageUtil.addSubjectParameterTo(target);
44-
UsageUtil.addObjectiveRequirementTo(target);
45-
super.addAdditionalMembers();
46-
}
47-
4837
}

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

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import org.omg.sysml.lang.sysml.CaseDefinition;
2525
import org.omg.sysml.lang.sysml.CaseUsage;
2626
import org.omg.sysml.lang.sysml.Type;
27-
import org.omg.sysml.util.UsageUtil;
2827

2928
public class CaseUsageAdapter extends CalculationUsageAdapter {
3029

@@ -63,14 +62,4 @@ public boolean isSubcase() {
6362
(owningType instanceof CaseDefinition || owningType instanceof CaseUsage);
6463
}
6564

66-
// Transformation
67-
68-
@Override
69-
public void addAdditionalMembers() {
70-
CaseUsage usage = getTarget();
71-
UsageUtil.addSubjectParameterTo(usage);
72-
UsageUtil.addObjectiveRequirementTo(usage);
73-
super.addAdditionalMembers();
74-
}
75-
7665
}

0 commit comments

Comments
 (0)