Skip to content

Commit 9718c8b

Browse files
authored
Merge pull request #567 from Systems-Modeling/ST6RI-772
ST6RI-772 Shorthand notation successions are not rendered (PlantUML)
2 parents 1ffdaf0 + 2bc085a commit 9718c8b

8 files changed

Lines changed: 70 additions & 122 deletions

File tree

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

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -422,11 +422,6 @@ public ElementAdapter caseSuccession(Succession element) {
422422
return new SuccessionAdapter(element);
423423
}
424424

425-
@Override
426-
public ElementAdapter caseSuccessionAsUsage(SuccessionAsUsage element) {
427-
return new SuccessionAsUsageAdapter(element);
428-
}
429-
430425
@Override
431426
public ElementAdapter caseTransitionUsage(TransitionUsage element) {
432427
return new TransitionUsageAdapter(element);

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -303,9 +303,13 @@ public List<Feature> getSubsettedFeatures() {
303303
public Feature getReferencedFeature() {
304304
Feature target = getTarget();
305305
ReferenceSubsetting ownedReferenceSubsetting = target.getOwnedReferenceSubsetting();
306-
return ownedReferenceSubsetting != null? ownedReferenceSubsetting.getReferencedFeature():
307-
getImplicitGeneralTypesOnly(SysMLPackage.Literals.REFERENCE_SUBSETTING).stream().
308-
map(Feature.class::cast).findFirst().orElse(null);
306+
if (ownedReferenceSubsetting != null) {
307+
return ownedReferenceSubsetting.getReferencedFeature();
308+
} else {
309+
computeImplicitGeneralTypes();
310+
return getImplicitGeneralTypesOnly(SysMLPackage.Literals.REFERENCE_SUBSETTING).stream().
311+
map(Feature.class::cast).findFirst().orElse(null);
312+
}
309313
}
310314

311315
public List<Feature> getRedefinedFeatures() {

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

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

2222
package org.omg.sysml.adapter;
2323

24+
import org.eclipse.emf.common.util.EList;
2425
import org.omg.sysml.lang.sysml.Element;
2526
import org.omg.sysml.lang.sysml.Feature;
2627
import org.omg.sysml.lang.sysml.SysMLPackage;
2728
import org.omg.sysml.lang.sysml.TransitionUsage;
2829
import org.omg.sysml.lang.sysml.Type;
2930
import org.omg.sysml.lang.sysml.ReferenceUsage;
31+
import org.omg.sysml.lang.sysml.SuccessionAsUsage;
3032
import org.omg.sysml.lang.sysml.util.SysMLLibraryUtil;
33+
import org.omg.sysml.util.TypeUtil;
3134
import org.omg.sysml.util.UsageUtil;
3235

3336
public class ReferenceUsageAdapter extends UsageAdapter {
@@ -49,12 +52,29 @@ public ReferenceUsage getTarget() {
4952
public void addDefaultGeneralType() {
5053
ReferenceUsage target = getTarget();
5154
Type type = target.getOwningType();
52-
if ((type instanceof TransitionUsage) && target == UsageUtil.getPayloadParameterOf((TransitionUsage)type)) {
53-
Feature accepterParameter = UsageUtil.getAccepterPayloadParameterOf((TransitionUsage)type);
54-
if (accepterParameter != null) {
55-
addImplicitGeneralType(SysMLPackage.eINSTANCE.getSubsetting(), accepterParameter);
56-
target.setDeclaredName(accepterParameter.getDeclaredName());
57-
return;
55+
if (type instanceof TransitionUsage) {
56+
if (target == UsageUtil.getPayloadParameterOf((TransitionUsage)type)) {
57+
Feature accepterParameter = UsageUtil.getAccepterPayloadParameterOf((TransitionUsage)type);
58+
if (accepterParameter != null) {
59+
addImplicitGeneralType(SysMLPackage.eINSTANCE.getSubsetting(), accepterParameter);
60+
target.setDeclaredName(accepterParameter.getDeclaredName());
61+
return;
62+
}
63+
}
64+
} else if (type instanceof SuccessionAsUsage) {
65+
EList<Feature> ends = ((SuccessionAsUsage)type).getOwnedEndFeature();
66+
int i = ends.indexOf(target);
67+
if (i < 2 && target.getOwnedReferenceSubsetting() == null &&
68+
!TypeUtil.isImplicitSpecializationDeclaredFor(target, SysMLPackage.eINSTANCE.getReferenceSubsetting())) {
69+
if (i == 0) {
70+
TypeUtil.addImplicitGeneralTypeTo(target,
71+
SysMLPackage.eINSTANCE.getReferenceSubsetting(),
72+
UsageUtil.getSourceFeature((SuccessionAsUsage)type));
73+
} else if (i == 1) {
74+
TypeUtil.addImplicitGeneralTypeTo(target,
75+
SysMLPackage.eINSTANCE.getReferenceSubsetting(),
76+
UsageUtil.getTargetFeature((SuccessionAsUsage)type));
77+
}
5878
}
5979
}
6080
super.addDefaultGeneralType();

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

Lines changed: 0 additions & 101 deletions
This file was deleted.

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

Lines changed: 2 additions & 3 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, 2023, 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
@@ -104,12 +104,11 @@ protected Feature computeTransitionLinkConnectors() {
104104
}
105105

106106
@Override
107-
public void doTransform() {
107+
public void addAdditionalMembers() {
108108
// Note: Needs to come before computeTransitionLinkConnectors.
109109
computeSource();
110110
// Note: Needs to come before clearing and recomputation of inheritance cache.
111111
computeTransitionLinkConnectors();
112-
super.doTransform();
113112
}
114113

115114
}

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

Lines changed: 3 additions & 1 deletion
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) 2023 Model Driven Solutions, Inc.
4+
* Copyright (c) 2023, 2024 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
@@ -30,6 +30,7 @@
3030
import org.omg.sysml.lang.sysml.Element;
3131
import org.omg.sysml.lang.sysml.Membership;
3232
import org.omg.sysml.lang.sysml.TransitionUsage;
33+
import org.omg.sysml.util.NamespaceUtil;
3334

3435
public class TransitionUsage_source_SettingDelegate extends BasicDerivedObjectSettingDelegate {
3536

@@ -39,6 +40,7 @@ public TransitionUsage_source_SettingDelegate(EStructuralFeature eStructuralFeat
3940

4041
@Override
4142
protected EObject basicGet(InternalEObject owner) {
43+
NamespaceUtil.addAdditionalMembersTo((TransitionUsage)owner);
4244
EList<Membership> ownedMemberships = ((TransitionUsage)owner).getOwnedMembership();
4345
if (ownedMemberships.isEmpty()) {
4446
return null;

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import org.omg.sysml.lang.sysml.MultiplicityRange;
4848
import org.omg.sysml.lang.sysml.OwningMembership;
4949
import org.omg.sysml.lang.sysml.Redefinition;
50+
import org.omg.sysml.lang.sysml.ReferenceSubsetting;
5051
import org.omg.sysml.lang.sysml.ReturnParameterMembership;
5152
import org.omg.sysml.lang.sysml.Step;
5253
import org.omg.sysml.lang.sysml.Subsetting;
@@ -183,8 +184,14 @@ public static Subsetting addSubsettingTo(Feature feature) {
183184
}
184185

185186
public static <T extends Feature> T getEffectiveReferencedFeatureOf(T feature, Class<T> kind) {
186-
Feature referencedFeature = getBasicFeatureOf(getReferencedFeatureOf(feature));
187-
return kind.isInstance(referencedFeature)? kind.cast(referencedFeature): feature;
187+
ReferenceSubsetting subsetting = feature.getOwnedReferenceSubsetting();
188+
if (subsetting != null) {
189+
Feature referencedFeature = getBasicFeatureOf(subsetting.getReferencedFeature());
190+
if (kind.isInstance(referencedFeature)) {
191+
return kind.cast(referencedFeature);
192+
}
193+
}
194+
return feature;
188195
}
189196

190197
public static List<Feature> getRedefinedFeaturesOf(Feature feature) {

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,28 @@ public static Expression getArgumentOf(ActionUsage action, int i) {
194194

195195
// SuccessionAsUsages
196196

197+
public static Feature getSourceFeature(Feature feature) {
198+
Namespace owningNamespace = feature.getOwningNamespace();
199+
if (owningNamespace instanceof TransitionUsage) {
200+
TransitionUsage transition = (TransitionUsage)owningNamespace;
201+
if (transition.getSuccession() == feature) {
202+
return transition.getSource();
203+
}
204+
}
205+
return getPreviousFeature(feature);
206+
}
207+
208+
public static Feature getTargetFeature(Feature feature) {
209+
Type type = feature.getOwningType();
210+
if (type == null) {
211+
return null;
212+
} else {
213+
EList<FeatureMembership> memberships = type.getOwnedFeatureMembership();
214+
int i = memberships.indexOf(feature.getOwningFeatureMembership()) + 1;
215+
return i < memberships.size()? memberships.get(i).getOwnedMemberFeature(): null;
216+
}
217+
}
218+
197219
public static Feature getPreviousFeature(Feature feature) {
198220
Namespace owner = feature.getOwningNamespace();
199221
if (!(owner instanceof Type)) {

0 commit comments

Comments
 (0)