From 10f9867d9b243c365a9d7fa606d1e900f07230ad Mon Sep 17 00:00:00 2001 From: Arthur Daussy Date: Thu, 13 Jun 2024 17:23:17 +0200 Subject: [PATCH] [394] Fix some minor issue with redefine feature Bug: https://github.com/eclipse-syson/syson/issues/394 Signed-off-by: Arthur Daussy --- .../services/DetailsViewService.java | 3 ++ .../impl/ConjugatedPortDefinitionImpl.java | 16 +++++-- .../sysml/impl/FeatureMembershipImpl.java | 43 ++++++------------- .../sysml/impl/IncludeUseCaseUsageImpl.java | 7 +-- .../syson/sysml/impl/MetadataUsageImpl.java | 2 +- .../sysml/impl/ReferenceSubsettingImpl.java | 18 +++++++- .../impl/StateSubactionMembershipImpl.java | 20 ++++++--- .../impl/TransitionFeatureMembershipImpl.java | 10 ++--- .../eclipse/syson/sysml/impl/UsageImpl.java | 2 +- .../ConjugatedPortDefinitionImplTest.java | 2 + 10 files changed, 71 insertions(+), 52 deletions(-) diff --git a/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/services/DetailsViewService.java b/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/services/DetailsViewService.java index 62d533faa..b7dd61718 100644 --- a/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/services/DetailsViewService.java +++ b/backend/application/syson-application-configuration/src/main/java/org/eclipse/syson/application/services/DetailsViewService.java @@ -41,6 +41,7 @@ import org.eclipse.syson.sysml.EndFeatureMembership; import org.eclipse.syson.sysml.Feature; import org.eclipse.syson.sysml.FeatureDirectionKind; +import org.eclipse.syson.sysml.FeatureMembership; import org.eclipse.syson.sysml.FeatureReferenceExpression; import org.eclipse.syson.sysml.FeatureTyping; import org.eclipse.syson.sysml.FeatureValue; @@ -164,6 +165,8 @@ public boolean isReadOnly(Element element, EStructuralFeature eStructuralFeature if ((element instanceof StateUsage && SysmlPackage.eINSTANCE.getStateUsage_IsParallel().equals(eStructuralFeature)) || (element instanceof StateDefinition && SysmlPackage.eINSTANCE.getStateDefinition_IsParallel().equals(eStructuralFeature))) { isReadOnly = isReadOnly || ((Type) element).getOwnedFeature().stream().filter(TransitionUsage.class::isInstance).findAny().isPresent(); + } else if (element instanceof FeatureMembership && SysmlPackage.eINSTANCE.getFeaturing_Feature().equals(eStructuralFeature)) { + isReadOnly = true; } } return isReadOnly; diff --git a/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/ConjugatedPortDefinitionImpl.java b/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/ConjugatedPortDefinitionImpl.java index 21b363627..f81b84c7d 100644 --- a/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/ConjugatedPortDefinitionImpl.java +++ b/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/ConjugatedPortDefinitionImpl.java @@ -73,9 +73,9 @@ public PortDefinition getOriginalPortDefinition() { * @generated NOT */ public PortDefinition basicGetOriginalPortDefinition() { - Namespace owningNamespace = this.getOwningNamespace(); - if (owningNamespace instanceof PortDefinition portDefinition) { - return portDefinition; + PortConjugation conjugator = this.getOwnedPortConjugator(); + if (conjugator != null) { + return conjugator.getOriginalPortDefinition(); } return null; } @@ -171,4 +171,14 @@ public Conjugation getOwnedConjugator() { return this.getOwnedPortConjugator(); } + /** + * Redefines getter generated from eAnnotation + * + * @generated NOT + */ + @Override + public Namespace getOwningNamespace() { + return this.getOriginalPortDefinition(); + } + } // ConjugatedPortDefinitionImpl diff --git a/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/FeatureMembershipImpl.java b/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/FeatureMembershipImpl.java index 070af1de7..a848e115e 100644 --- a/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/FeatureMembershipImpl.java +++ b/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/FeatureMembershipImpl.java @@ -80,50 +80,23 @@ protected EClass eStaticClass() { return SysmlPackage.eINSTANCE.getFeatureMembership(); } - /** - * - * - * @generated - */ - @Override - public Feature getFeature() { - if (this.feature != null && this.feature.eIsProxy()) { - InternalEObject oldFeature = (InternalEObject) this.feature; - this.feature = (Feature) this.eResolveProxy(oldFeature); - if (this.feature != oldFeature) { - if (this.eNotificationRequired()) { - this.eNotify(new ENotificationImpl(this, Notification.RESOLVE, SysmlPackage.FEATURE_MEMBERSHIP__FEATURE, oldFeature, this.feature)); - } - } - } - return this.feature; - } - /** * * * @generated NOT */ public Feature basicGetFeature() { - Feature ownedMemberFeature = this.getOwnedMemberFeature(); - if (ownedMemberFeature != null) { - return ownedMemberFeature; - } - return this.feature; + return this.getFeature(); } /** * * - * @generated + * @generated NOT */ @Override public void setFeature(Feature newFeature) { - Feature oldFeature = this.feature; - this.feature = newFeature; - if (this.eNotificationRequired()) { - this.eNotify(new ENotificationImpl(this, Notification.SET, SysmlPackage.FEATURE_MEMBERSHIP__FEATURE, oldFeature, this.feature)); - } + // It redefines "feature" feature from Featuring } /** @@ -390,4 +363,14 @@ public Namespace getMembershipOwningNamespace() { return this.getOwningType(); } + /** + * Redefines getter generated from eAnnotation + * + * @generated NOT + */ + @Override + public Feature getFeature() { + return this.getOwnedMemberFeature(); + } + } // FeatureMembershipImpl diff --git a/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/IncludeUseCaseUsageImpl.java b/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/IncludeUseCaseUsageImpl.java index 834f12f30..18aff6dc3 100644 --- a/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/IncludeUseCaseUsageImpl.java +++ b/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/IncludeUseCaseUsageImpl.java @@ -93,13 +93,10 @@ public ActionUsage getPerformedAction() { /** * * - * @generated + * @generated NOT */ public ActionUsage basicGetPerformedAction() { - // TODO: implement this method to return the 'Performed Action' reference - // -> do not perform proxy resolution - // Ensure that you remove @generated or mark it @generated NOT - return null; + return this.getUseCaseIncluded(); } /** diff --git a/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/MetadataUsageImpl.java b/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/MetadataUsageImpl.java index 5689fe647..dadc1f2ff 100644 --- a/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/MetadataUsageImpl.java +++ b/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/MetadataUsageImpl.java @@ -414,7 +414,7 @@ public Object eInvoke(int operationID, EList arguments) throws InvocationTarg /** * Redefines getter generated from eAnnotation * - * @generated + * @generated NOT */ @Override public EList getItemDefinition() { diff --git a/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/ReferenceSubsettingImpl.java b/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/ReferenceSubsettingImpl.java index 8ee79c39d..337765ce8 100644 --- a/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/ReferenceSubsettingImpl.java +++ b/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/ReferenceSubsettingImpl.java @@ -16,6 +16,7 @@ import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.ENotificationImpl; +import org.eclipse.syson.sysml.Element; import org.eclipse.syson.sysml.Feature; import org.eclipse.syson.sysml.ReferenceSubsetting; import org.eclipse.syson.sysml.SysmlPackage; @@ -124,7 +125,7 @@ public Feature getReferencingFeature() { * @generated NOT */ public Feature basicGetReferencingFeature() { - return this.getSubsettingFeature(); + return this.getOwningFeature(); } /** @@ -222,7 +223,20 @@ public void setSubsettedFeature(Feature newSubsettedFeature) { */ @Override public Feature getOwningFeature() { - return this.getReferencingFeature(); + Element owner = this.getOwningRelatedElement(); + if (owner instanceof Feature feature) { + return feature; + } + return null; } + /** + * Redefines getter generated from eAnnotation + * + * @generated NOT + */ + @Override + public Feature getSubsettingFeature() { + return this.getReferencingFeature(); + } } // ReferenceSubsettingImpl diff --git a/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/StateSubactionMembershipImpl.java b/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/StateSubactionMembershipImpl.java index 0a8824247..eac71e0af 100644 --- a/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/StateSubactionMembershipImpl.java +++ b/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/StateSubactionMembershipImpl.java @@ -100,11 +100,11 @@ public ActionUsage getAction() { * @generated NOT */ public ActionUsage basicGetAction() { - Feature ownedMemberFeature = this.getOwnedMemberFeature(); - if (ownedMemberFeature instanceof ActionUsage au) { - return au; - } - return null; + return this.getOwnedRelatedElement().stream() + .filter(ActionUsage.class::isInstance) + .map(ActionUsage.class::cast) + .findFirst() + .orElse(null); } /** @@ -214,4 +214,14 @@ public String toString() { return result.toString(); } + /** + * Redefines getter generated from eAnnotation + * + * @generated NOT + */ + @Override + public Feature getOwnedMemberFeature() { + return this.getAction(); + } + } // StateSubactionMembershipImpl diff --git a/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/TransitionFeatureMembershipImpl.java b/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/TransitionFeatureMembershipImpl.java index a2b6278bb..4797d3ee8 100644 --- a/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/TransitionFeatureMembershipImpl.java +++ b/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/TransitionFeatureMembershipImpl.java @@ -118,11 +118,11 @@ public Step getTransitionFeature() { * @generated NOT */ public Step basicGetTransitionFeature() { - Feature memberFeature = this.getFeature(); - if (memberFeature instanceof Step step) { - return step; - } - return null; + return getOwnedRelatedElement().stream() + .filter(Step.class::isInstance) + .map(Step.class::cast) + .findFirst() + .orElse(null); } /** diff --git a/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/UsageImpl.java b/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/UsageImpl.java index a3bbfdd19..17d5557a3 100644 --- a/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/UsageImpl.java +++ b/backend/metamodel/syson-sysml-metamodel/src/main/java/org/eclipse/syson/sysml/impl/UsageImpl.java @@ -1049,7 +1049,7 @@ public String toString() { /** * Redefines getter generated from eAnnotation * - * @generated + * @generated NOT */ @Override public EList getType() { diff --git a/backend/metamodel/syson-sysml-metamodel/src/test/java/org/eclipse/syson/sysml/impl/ConjugatedPortDefinitionImplTest.java b/backend/metamodel/syson-sysml-metamodel/src/test/java/org/eclipse/syson/sysml/impl/ConjugatedPortDefinitionImplTest.java index 9e068b717..06b6f2cd2 100644 --- a/backend/metamodel/syson-sysml-metamodel/src/test/java/org/eclipse/syson/sysml/impl/ConjugatedPortDefinitionImplTest.java +++ b/backend/metamodel/syson-sysml-metamodel/src/test/java/org/eclipse/syson/sysml/impl/ConjugatedPortDefinitionImplTest.java @@ -15,6 +15,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import org.eclipse.syson.sysml.ConjugatedPortDefinition; +import org.eclipse.syson.sysml.PortConjugation; import org.eclipse.syson.sysml.PortDefinition; import org.eclipse.syson.sysml.helper.LabelConstants; import org.eclipse.syson.sysml.util.ModelBuilder; @@ -39,6 +40,7 @@ public void setUp() { public void getNames() { PortDefinition port = this.builder.createWithName(PortDefinition.class, "p1"); ConjugatedPortDefinition conjugatedPort = this.builder.createInWithName(ConjugatedPortDefinition.class, port, "unusedName"); + this.builder.createIn(PortConjugation.class, conjugatedPort).setOriginalPortDefinition(port); assertEquals(LabelConstants.CONJUGATED + "p1", conjugatedPort.getName()); }