From d0dad296e8738890f6b4d3ad67eb19274db67a82 Mon Sep 17 00:00:00 2001 From: Ed Seidewitz Date: Fri, 16 May 2025 16:01:15 -0400 Subject: [PATCH 1/3] ST6RI-850 Updated ConnectorUtil::addConnectorEnd for feature chains. - If the relatedFeature has no owner, then it is added as an ownedRelatedElement of the reference subsetting on the connector end. --- org.omg.sysml/src/org/omg/sysml/util/ConnectorUtil.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/org.omg.sysml/src/org/omg/sysml/util/ConnectorUtil.java b/org.omg.sysml/src/org/omg/sysml/util/ConnectorUtil.java index fa0459b6e..8c324317c 100644 --- a/org.omg.sysml/src/org/omg/sysml/util/ConnectorUtil.java +++ b/org.omg.sysml/src/org/omg/sysml/util/ConnectorUtil.java @@ -67,6 +67,9 @@ public static void transformBindingConnector(BindingConnector connector, Type ow public static Feature addConnectorEndTo(Connector connector, Feature relatedFeature) { Feature endFeature = SysMLFactory.eINSTANCE.createFeature(); ReferenceSubsetting subsetting = SysMLFactory.eINSTANCE.createReferenceSubsetting(); + if (relatedFeature.getOwner() == null) { + subsetting.getOwnedRelatedElement().add(relatedFeature); + } subsetting.setReferencedFeature(relatedFeature); endFeature.getOwnedRelationship().add(subsetting); endFeature.setIsEnd(true); From 1eed04d0bd2a7c69497d737f7acfcfdc1bc57c97 Mon Sep 17 00:00:00 2001 From: Ed Seidewitz Date: Fri, 16 May 2025 17:12:02 -0400 Subject: [PATCH 2/3] ST6RI-850 Added protective null pointer check in TransitionUsageAdapter. Checks if TransitionUsage succession is null before creating an implicit binding connector to it. A TransitionUsage should always have a nested succession, but this avoids an NPE if the usage is ill-formed. --- .../src/org/omg/sysml/adapter/TransitionUsageAdapter.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/org.omg.sysml/src/org/omg/sysml/adapter/TransitionUsageAdapter.java b/org.omg.sysml/src/org/omg/sysml/adapter/TransitionUsageAdapter.java index e30e0697f..2d5bdd9e7 100644 --- a/org.omg.sysml/src/org/omg/sysml/adapter/TransitionUsageAdapter.java +++ b/org.omg.sysml/src/org/omg/sysml/adapter/TransitionUsageAdapter.java @@ -94,10 +94,12 @@ protected Feature computeTransitionLinkConnectors() { Feature transitionLinkFeature = UsageUtil.getTransitionLinkFeatureOf(transition); if (transitionLinkFeature == null) { // checkTransitionUsageSuccessionBindingConnector - transitionLinkFeature = SysMLFactory.eINSTANCE.createReferenceUsage(); - TypeUtil.addOwnedFeatureTo(transition, transitionLinkFeature); Succession succession = transition.getSuccession(); - addBindingConnector(succession, transitionLinkFeature); + if (succession != null) { + transitionLinkFeature = SysMLFactory.eINSTANCE.createReferenceUsage(); + TypeUtil.addOwnedFeatureTo(transition, transitionLinkFeature); + addBindingConnector(succession, transitionLinkFeature); + } // checkTransitionUsageSourceBindingConnector List parameters = TypeUtil.getOwnedParametersOf(transition); From cb19bed957271f4a14f7e923977b1db459f9cdac Mon Sep 17 00:00:00 2001 From: Ed Seidewitz Date: Fri, 16 May 2025 17:34:28 -0400 Subject: [PATCH 3/3] ST6RI-850 Added further protective null pointer checks in... - FeatureAdapter::getBoundValueResult - TypeAdapter::addResultBinding --- .../src/org/omg/sysml/adapter/FeatureAdapter.java | 7 +++++-- org.omg.sysml/src/org/omg/sysml/adapter/TypeAdapter.java | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/org.omg.sysml/src/org/omg/sysml/adapter/FeatureAdapter.java b/org.omg.sysml/src/org/omg/sysml/adapter/FeatureAdapter.java index b18dbc84d..876eb4eec 100644 --- a/org.omg.sysml/src/org/omg/sysml/adapter/FeatureAdapter.java +++ b/org.omg.sysml/src/org/omg/sysml/adapter/FeatureAdapter.java @@ -209,8 +209,11 @@ protected Feature getBoundValueResult() { Expression value = valuation.getValue(); if (value != null) { ElementUtil.transform(value); - Feature result = FeatureUtil.chainFeatures(value, value.getResult()); - return result; + Feature valueResult = value.getResult(); + if (valueResult != null) { + Feature result = FeatureUtil.chainFeatures(value, value.getResult()); + return result; + } } } return null; diff --git a/org.omg.sysml/src/org/omg/sysml/adapter/TypeAdapter.java b/org.omg.sysml/src/org/omg/sysml/adapter/TypeAdapter.java index 065901af6..de2cc9190 100644 --- a/org.omg.sysml/src/org/omg/sysml/adapter/TypeAdapter.java +++ b/org.omg.sysml/src/org/omg/sysml/adapter/TypeAdapter.java @@ -478,7 +478,8 @@ public BindingConnector addBindingConnector(Feature source, Feature target) { public BindingConnector addResultBinding(Expression sourceExpression, Feature target) { ElementUtil.transform(sourceExpression); - return addBindingConnector(sourceExpression.getResult(), target); + Feature sourceResult = sourceExpression.getResult(); + return sourceResult == null || target == null? null: addBindingConnector(sourceResult, target); } public void createResultConnector(Feature result) {