diff --git a/kerml/src/examples/Simple Tests/Filtering.kerml b/kerml/src/examples/Simple Tests/Filtering.kerml index 3de84e15e0..ad1fda6f19 100644 --- a/kerml/src/examples/Simple Tests/Filtering.kerml +++ b/kerml/src/examples/Simple Tests/Filtering.kerml @@ -23,15 +23,17 @@ package Filtering { package UpperLevelApprovals { private import DesignModel::**; - filter Annotations::ApprovalAnnotation::approved and - Annotations::ApprovalAnnotation::level > 1; + filter (as Annotations::ApprovalAnnotation).approved and + (as Annotations::ApprovalAnnotation).level > 1; struct Test :> System; } package UpperLevelApprovals1 { private import Annotations::**; - private import DesignModel::**[@Structure][approved and level > 1]; + private import DesignModel::**[@Structure] + [(as Annotations::ApprovalAnnotation).approved and + (as Annotations::ApprovalAnnotation).level > 1]; struct Test :> System; } diff --git a/org.omg.kerml.xpect.tests/src/org/omg/kerml/xpect/tests/imports/local/Import_Filtered.kerml.xt b/org.omg.kerml.xpect.tests/src/org/omg/kerml/xpect/tests/imports/local/Import_Filtered.kerml.xt index a58c8aa5ff..fe22ced8c8 100644 --- a/org.omg.kerml.xpect.tests/src/org/omg/kerml/xpect/tests/imports/local/Import_Filtered.kerml.xt +++ b/org.omg.kerml.xpect.tests/src/org/omg/kerml/xpect/tests/imports/local/Import_Filtered.kerml.xt @@ -237,7 +237,7 @@ package Import_Filtered { } package 'Mandatory Features_true_1' { - public import vehicle1_c1::**[Safety::isMandatory]; + public import vehicle1_c1::**[(as Safety).isMandatory]; classifier b :> seatBelt; // XPECT errors --> "Couldn't resolve reference to Classifier 'alarm'." at "alarm" @@ -259,7 +259,7 @@ package Import_Filtered { } package 'Mandatory Features_true_2' { - public import vehicle1_c1::**[Safety::isMandatory == true]; + public import vehicle1_c1::**[(as Safety).isMandatory == true]; classifier b :> seatBelt; // XPECT errors --> "Couldn't resolve reference to Classifier 'alarm'." at "alarm" @@ -281,7 +281,7 @@ package Import_Filtered { } package 'Mandatory Features_false' { - public import vehicle1_c1::**[Safety::isMandatory == false]; + public import vehicle1_c1::**[(as Safety).isMandatory == false]; classifier j :> antilockBrakes; // XPECT errors --> "Couldn't resolve reference to Classifier 'alarm'." at "alarm" diff --git a/org.omg.kerml.xpect.tests/src/org/omg/kerml/xpect/tests/validation/MetadataTests_MetadataFeature_invalid.kerml.xt b/org.omg.kerml.xpect.tests/src/org/omg/kerml/xpect/tests/validation/MetadataTests_MetadataFeature_invalid.kerml.xt index 05ce9c1f2d..ced959af04 100644 --- a/org.omg.kerml.xpect.tests/src/org/omg/kerml/xpect/tests/validation/MetadataTests_MetadataFeature_invalid.kerml.xt +++ b/org.omg.kerml.xpect.tests/src/org/omg/kerml/xpect/tests/validation/MetadataTests_MetadataFeature_invalid.kerml.xt @@ -50,12 +50,12 @@ package MetadataFeatureTest { function f { in x; return : ScalarValues::Boolean; } - // XPECT errors --> "Must be model-level evaluable" at "filter f(A::y);" - filter f(A::y); - // XPECT errors --> "Must be model-level evaluable" at "filter ~A::z;" - filter ~A::z; - // XPECT errors --> "Must be model-level evaluable" at "filter A::y->ControlFunctions::collect {in x; x};" - filter A::y->ControlFunctions::collect {in x; x}; + // XPECT errors --> "Must be model-level evaluable" at "filter f((as A).y);" + filter f((as A).y); + // XPECT errors --> "Must be model-level evaluable" at "filter ~(as A).z;" + filter ~(as A).z; + // XPECT errors --> "Must be model-level evaluable" at "filter (as A).y->ControlFunctions::collect {in x; x};" + filter (as A).y->ControlFunctions::collect {in x; x}; // XPECT errors --> "Must have a Boolean result" at "filter new A(null, 1, "", false);" filter new A(null, 1, "", false); @@ -66,8 +66,8 @@ package MetadataFeatureTest { // XPECT errors --> "Must be model-level evaluable" at "= ~3" x = ~3; y = "e"; - // XPECT errors --> "Must be model-level evaluable" at "= f(A::y)" - z = f(A::y); + // XPECT errors --> "Must be model-level evaluable" at "= f((as A).y)" + z = f((as A).y); u { v = 1; // XPECT errors --> "Must redefine an owning-type feature" at "bad;" diff --git a/org.omg.sysml.interactive.tests/src/org/omg/sysml/interactive/tests/ModelLevelEvaluationTest.java b/org.omg.sysml.interactive.tests/src/org/omg/sysml/interactive/tests/ModelLevelEvaluationTest.java index 91f15eea49..325226ed0e 100644 --- a/org.omg.sysml.interactive.tests/src/org/omg/sysml/interactive/tests/ModelLevelEvaluationTest.java +++ b/org.omg.sysml.interactive.tests/src/org/omg/sysml/interactive/tests/ModelLevelEvaluationTest.java @@ -371,7 +371,7 @@ public void testFeatureReferenceEvaluation() throws Exception { assertEquals(1, evaluateIntegerValue(instance, checkAnnotatingFeature(instance, "Annotation", "x"), - "Annotation::a")); + "(as Annotation).a")); } @Test @@ -385,7 +385,7 @@ public void testEnumeratedValueEvaluation() throws Exception { assertEquals(instance.resolve("E::e"), evaluateSingleValue(instance, checkAnnotatingFeature(instance, "Annotation", "x"), - "Annotation::a")); + "(as Annotation).a")); } @Test @@ -408,8 +408,8 @@ public void testIsTypeEvaluation() throws Exception { "attribute x {@Annotation{a = E::e; b = 2;}}"); MetadataFeature feature = checkAnnotatingFeature(instance, "Annotation", "x"); - assertTrue(evaluateBooleanValue(instance, feature, "Annotation::a istype E")); - assertTrue(evaluateBooleanValue(instance, feature, "Annotation::b istype ScalarValues::Integer")); + assertTrue(evaluateBooleanValue(instance, feature, "(as Annotation).a istype E")); + assertTrue(evaluateBooleanValue(instance, feature, "(as Annotation).b istype ScalarValues::Integer")); } @Test diff --git a/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/simpletests/ElementFilter.sysml.xt b/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/simpletests/ElementFilter.sysml.xt index 50b15fc34c..597adc572e 100644 --- a/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/simpletests/ElementFilter.sysml.xt +++ b/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/simpletests/ElementFilter.sysml.xt @@ -85,6 +85,6 @@ package ElementFilterTest { } package 'Mandatory Features' { - public import vehicle1_c1::**[@Safety and PartInfo::isMandatory]; + public import vehicle1_c1::**[@Safety and (as PartInfo).isMandatory]; } } diff --git a/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/validation/invalid/MetadataUsage_Invalid.sysml.xt b/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/validation/invalid/MetadataUsage_Invalid.sysml.xt index 6da9797d8f..a719cb0a22 100644 --- a/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/validation/invalid/MetadataUsage_Invalid.sysml.xt +++ b/org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/validation/invalid/MetadataUsage_Invalid.sysml.xt @@ -62,12 +62,12 @@ package Test { calc def f { in x : ScalarValues::Boolean; } - // XPECT errors --> "Must be model-level evaluable" at "filter f(A::z);" - filter f(A::z); - // XPECT errors --> "Must be model-level evaluable" at "filter ~A::z;" - filter ~A::z; - // XPECT errors --> "Must be model-level evaluable" at "filter A::y->ControlFunctions::collect {in ref x; x};" - filter A::y->ControlFunctions::collect {in ref x; x}; + // XPECT errors --> "Must be model-level evaluable" at "filter f((as A).z);" + filter f((as A).z); + // XPECT errors --> "Must be model-level evaluable" at "filter ~(as A).z;" + filter ~(as A).z; + // XPECT errors --> "Must be model-level evaluable" at "filter (as A).y->ControlFunctions::collect {in ref x; x};" + filter (as A).y->ControlFunctions::collect {in ref x; x}; // XPECT errors --> "Must have a Boolean result" at "filter new A(null, 1, "", false);" filter new A(null, 1, "", false); @@ -82,8 +82,8 @@ package Test { // XPECT errors --> "Must be model-level evaluable" at "= ~3" x = ~3; y = E::e; - // XPECT errors --> "Must be model-level evaluable" at "= f(A::z)" - z = f(A::z); + // XPECT errors --> "Must be model-level evaluable" at "= f((as A).z)" + z = f((as A).z); u { v = 1; // XPECT errors --> "Must redefine an owning-type feature" at "bad;" diff --git a/org.omg.sysml/src/org/omg/sysml/adapter/FeatureReferenceExpressionAdapter.java b/org.omg.sysml/src/org/omg/sysml/adapter/FeatureReferenceExpressionAdapter.java index 615e7b7861..730e0f206a 100644 --- a/org.omg.sysml/src/org/omg/sysml/adapter/FeatureReferenceExpressionAdapter.java +++ b/org.omg.sysml/src/org/omg/sysml/adapter/FeatureReferenceExpressionAdapter.java @@ -1,6 +1,6 @@ /******************************************************************************* * SysML 2 Pilot Implementation - * Copyright (c) 2021, 2022 Model Driven Solutions, Inc. + * Copyright (c) 2021, 2022, 2026 Model Driven Solutions, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by @@ -63,19 +63,11 @@ protected boolean isInFilterExpression() { * @satisfies checkFeatureReferenceExpressionBindingConnector */ protected void addReferenceConnector() { - /* - * TODO: Update checkFeatureReferenceExpressionBindingConnector? - * - * OCL does not include !isInFilterExpression check. - * - */ - if (!isInFilterExpression()) { - FeatureReferenceExpression target = getTarget(); - Feature referent = target.getReferent(); - Feature result = target.getResult(); - if (referent != null && result != null) { - addBindingConnector(referent, result); - } + FeatureReferenceExpression target = getTarget(); + Feature referent = target.getReferent(); + Feature result = target.getResult(); + if (referent != null && result != null) { + addBindingConnector(referent, result); } } diff --git a/sysml/src/examples/Vehicle Example/SysML v2 Spec Annex A SimpleVehicleModel.sysml b/sysml/src/examples/Vehicle Example/SysML v2 Spec Annex A SimpleVehicleModel.sysml index a5b1548ee6..f3fb8695e7 100644 --- a/sysml/src/examples/Vehicle Example/SysML v2 Spec Annex A SimpleVehicleModel.sysml +++ b/sysml/src/examples/Vehicle Example/SysML v2 Spec Annex A SimpleVehicleModel.sysml @@ -1536,7 +1536,7 @@ package SimpleVehicleModel{ package MandatorySafetyGroup { /* Parts that contribute to safety AND are mandatory. */ public import vehicle_b::**; - filter @Safety and Safety::isMandatory; + filter @Safety and (as Safety).isMandatory; } } package Views_Viewpoints{ diff --git a/sysml/src/training/40. Filtering/Filtering Example-1.sysml b/sysml/src/training/40. Filtering/Filtering Example-1.sysml index 6fcc067d78..34b1f36f00 100644 --- a/sysml/src/training/40. Filtering/Filtering Example-1.sysml +++ b/sysml/src/training/40. Filtering/Filtering Example-1.sysml @@ -32,6 +32,6 @@ package 'Filtering Example-1' { package 'Mandatory Safety Features' { /* Parts that contribute to safety AND are mandatory. */ public import vehicle::**; - filter @Safety and Safety::isMandatory; + filter @Safety and (as Safety).isMandatory; } } \ No newline at end of file diff --git a/sysml/src/training/40. Filtering/Filtering Example-2.sysml b/sysml/src/training/40. Filtering/Filtering Example-2.sysml index 0bc6633329..08f2d8d53d 100644 --- a/sysml/src/training/40. Filtering/Filtering Example-2.sysml +++ b/sysml/src/training/40. Filtering/Filtering Example-2.sysml @@ -30,6 +30,6 @@ package 'Filtering Example-2' { package 'Mandatory Safety Features' { /* Parts that contribute to safety AND are mandatory. */ - public import vehicle::**[@Safety and Safety::isMandatory]; + public import vehicle::**[@Safety and (as Safety).isMandatory]; } } \ No newline at end of file diff --git a/sysml/src/validation/11-View and Viewpoint/11b-Safety and Security Feature Views.sysml b/sysml/src/validation/11-View and Viewpoint/11b-Safety and Security Feature Views.sysml index 398e3d0798..7a96c4aee7 100644 --- a/sysml/src/validation/11-View and Viewpoint/11b-Safety and Security Feature Views.sysml +++ b/sysml/src/validation/11-View and Viewpoint/11b-Safety and Security Feature Views.sysml @@ -54,11 +54,11 @@ package '11b-Safety and Security Feaure Views' { view vehicleMandatorySafetyFeatureView :> vehicleSafetyFeatureView { expose vehicle::*::**; - filter Safety::isMandatory; + filter @Safety and (as Safety).isMandatory; } view vehicleMandatorySafetyFeatureViewStandalone { - expose vehicle::**[@Safety and Safety::isMandatory]; + expose vehicle::**[@Safety and (as Safety).isMandatory]; render asElementTable; } } diff --git a/sysml/src/validation/13-Model Containment/13b-Safety and Security Features Element Group-1.sysml b/sysml/src/validation/13-Model Containment/13b-Safety and Security Features Element Group-1.sysml index 1b21634532..e23c7c86ff 100644 --- a/sysml/src/validation/13-Model Containment/13b-Safety and Security Features Element Group-1.sysml +++ b/sysml/src/validation/13-Model Containment/13b-Safety and Security Features Element Group-1.sysml @@ -51,6 +51,6 @@ package '13b-Safety and Security Features Element Group-1' { package 'Mandatory Safety Features' { /* Parts that contribute to safety AND are mandatory. */ public import vehicle::**; - filter @Safety and Safety::isMandatory; + filter @Safety and (as Safety).isMandatory; } } diff --git a/sysml/src/validation/13-Model Containment/13b-Safety and Security Features Element Group-2.sysml b/sysml/src/validation/13-Model Containment/13b-Safety and Security Features Element Group-2.sysml index bd3995c460..ff8f4e08fe 100644 --- a/sysml/src/validation/13-Model Containment/13b-Safety and Security Features Element Group-2.sysml +++ b/sysml/src/validation/13-Model Containment/13b-Safety and Security Features Element Group-2.sysml @@ -47,6 +47,6 @@ package '13b-Safety and Security Features Element Group-2' { package 'Mandatory Saftey Features' { /* Parts that contribute to safety AND are mandatory. */ - public import vehicle::**[@Safety and Safety::isMandatory]; + public import vehicle::**[@Safety and (as Safety).isMandatory]; } }