diff --git a/org.omg.sysml/src/org/omg/sysml/delegate/setting/TransitionUsage_source_SettingDelegate.java b/org.omg.sysml/src/org/omg/sysml/delegate/setting/TransitionUsage_source_SettingDelegate.java index cebb86d77..d347844ff 100644 --- a/org.omg.sysml/src/org/omg/sysml/delegate/setting/TransitionUsage_source_SettingDelegate.java +++ b/org.omg.sysml/src/org/omg/sysml/delegate/setting/TransitionUsage_source_SettingDelegate.java @@ -22,15 +22,13 @@ package org.omg.sysml.delegate.setting; -import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.InternalEObject; -import org.omg.sysml.lang.sysml.ActionUsage; -import org.omg.sysml.lang.sysml.Element; -import org.omg.sysml.lang.sysml.Membership; +import org.omg.sysml.lang.sysml.Feature; import org.omg.sysml.lang.sysml.TransitionUsage; -import org.omg.sysml.util.NamespaceUtil; +import org.omg.sysml.util.FeatureUtil; +import org.omg.sysml.util.UsageUtil; public class TransitionUsage_source_SettingDelegate extends BasicDerivedObjectSettingDelegate { @@ -40,14 +38,8 @@ public TransitionUsage_source_SettingDelegate(EStructuralFeature eStructuralFeat @Override protected EObject basicGet(InternalEObject owner) { - NamespaceUtil.addAdditionalMembersTo((TransitionUsage)owner); - EList ownedMemberships = ((TransitionUsage)owner).getOwnedMembership(); - if (ownedMemberships.isEmpty()) { - return null; - } else { - Element member = ownedMemberships.get(0).getMemberElement(); - return member instanceof ActionUsage? (ActionUsage)member: null; - } + Feature source = UsageUtil.getSourceFeatureOf((TransitionUsage)owner); + return source == null? null: FeatureUtil.getBasicFeatureOf(source); } } diff --git a/org.omg.sysml/src/org/omg/sysml/util/UsageUtil.java b/org.omg.sysml/src/org/omg/sysml/util/UsageUtil.java index 481ede46f..15bd58caf 100644 --- a/org.omg.sysml/src/org/omg/sysml/util/UsageUtil.java +++ b/org.omg.sysml/src/org/omg/sysml/util/UsageUtil.java @@ -199,7 +199,7 @@ public static Feature getSourceFeature(Feature feature) { if (owningNamespace instanceof TransitionUsage) { TransitionUsage transition = (TransitionUsage)owningNamespace; if (transition.getSuccession() == feature) { - return transition.getSource(); + return getSourceFeatureOf(transition); } } return getPreviousFeature(feature); @@ -377,6 +377,17 @@ private static boolean hasIncomingTransitionsIn(Type container, StateUsage state // Transitions + public static Feature getSourceFeatureOf(TransitionUsage transition) { + NamespaceUtil.addAdditionalMembersTo(transition); + return transition.getOwnedMembership().stream(). + filter(mem->!(mem instanceof FeatureMembership)). + map(Membership::getMemberElement). + filter(Feature.class::isInstance). + map(Feature.class::cast). + filter(f->FeatureUtil.getBasicFeatureOf(f) instanceof ActionUsage). + findFirst().orElse(null); + } + public static Feature getTransitionSourceOf(Feature transition) { Feature source= transition instanceof TransitionUsage? ((TransitionUsage)transition).getSource(): transition instanceof Succession? ((Succession)transition).getSourceFeature():