diff --git a/org.omg.sysml.interactive.tests/src/org/omg/sysml/semantics/tests/SysMLSpecializationSpecialTest.java b/org.omg.sysml.interactive.tests/src/org/omg/sysml/semantics/tests/SysMLSpecializationSpecialTest.java index 947757f7eb..c06e4169c3 100644 --- a/org.omg.sysml.interactive.tests/src/org/omg/sysml/semantics/tests/SysMLSpecializationSpecialTest.java +++ b/org.omg.sysml.interactive.tests/src/org/omg/sysml/semantics/tests/SysMLSpecializationSpecialTest.java @@ -1,6 +1,6 @@ /** * SysML 2 Pilot Implementation - * Copyright (C) 2024-2025 Model Driven Solutions, Inc. + * Copyright (C) 2024-2026 Model Driven Solutions, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the Eclipse Public License as published by @@ -30,9 +30,11 @@ import org.junit.Test; import org.omg.sysml.lang.sysml.Element; import org.omg.sysml.lang.sysml.ItemDefinition; +import org.omg.sysml.lang.sysml.OccurrenceDefinition; import org.omg.sysml.lang.sysml.OccurrenceUsage; import org.omg.sysml.lang.sysml.PortDefinition; import org.omg.sysml.lang.sysml.PortUsage; +import org.omg.sysml.lang.sysml.PortionKind; import org.omg.sysml.lang.sysml.StateUsage; import org.omg.sysml.lang.sysml.SysMLFactory; import org.omg.sysml.lang.sysml.SysMLPackage; @@ -182,6 +184,58 @@ public void checkFeatureSubobjectSpecialization_PortUsage() { assertTrue(String.format("OccurrenceUsage specializes subobjects instead of %s", getSpecifics(occurrence)), occurrence.specializes((Type)libraryElement)); } + @Test + public void checkOccurrenceUsageTimesliceSpecialization_OccurrenceUsage() { + //create and add root package + org.omg.sysml.lang.sysml.Package root = SysMLFactory.eINSTANCE.createPackage(); + getResource().getContents().add(root); + + //check if library element exists + Element libraryElement = SysMLLibraryUtil.getLibraryElement(root, "Occurrences::Occurrence::timeSlices"); + assertTrue(libraryElement instanceof Type); + + //create owning type + Type owner = (Type) SysMLFactory.eINSTANCE.createOccurrenceDefinition(); + NamespaceUtil.addOwnedMemberTo(root, owner); + + //create occurrence usage + OccurrenceUsage occurrence = SysMLFactory.eINSTANCE.createOccurrenceUsage(); + occurrence.setIsReference(true); + occurrence.setPortionKind(PortionKind.TIMESLICE); + TypeUtil.addOwnedFeatureTo(owner, occurrence); + + //run transformation, add implicit elements + ElementUtil.transformAll(root, true); + + assertTrue(String.format("OccurrenceUsage specializes timeslices instead of %s", getSpecifics(occurrence)), occurrence.specializes((Type)libraryElement)); + } + + @Test + public void checkOccurrenceUsageTimesliceSpecialization_PortUsage() { + //create and add root package + org.omg.sysml.lang.sysml.Package root = SysMLFactory.eINSTANCE.createPackage(); + getResource().getContents().add(root); + + //check if library element exists + Element libraryElement = SysMLLibraryUtil.getLibraryElement(root, "Occurrences::Occurrence::timeSlices"); + assertTrue(libraryElement instanceof Type); + + //create owning type + Type owner = (Type) SysMLFactory.eINSTANCE.createPortDefinition(); + NamespaceUtil.addOwnedMemberTo(root, owner); + + //create port usage + PortUsage port = SysMLFactory.eINSTANCE.createPortUsage(); + port.setIsReference(true); + port.setPortionKind(PortionKind.TIMESLICE); + TypeUtil.addOwnedFeatureTo(owner, port); + + //run transformation, add implicit elements + ElementUtil.transformAll(root, true); + + assertTrue(String.format("PortUsage specializes timeslices instead of %s", getSpecifics(port)), port.specializes((Type)libraryElement)); + } + @Test @Ignore("TBD") public void checkUsageVariationUsageSpecialization() { diff --git a/org.omg.sysml.logic.bundle/lib/org.omg.sysml.logic-0.62.0-SNAPSHOT.jar b/org.omg.sysml.logic.bundle/lib/org.omg.sysml.logic-0.62.0-SNAPSHOT.jar index 2b7ec9ef06..3a18753948 100644 Binary files a/org.omg.sysml.logic.bundle/lib/org.omg.sysml.logic-0.62.0-SNAPSHOT.jar and b/org.omg.sysml.logic.bundle/lib/org.omg.sysml.logic-0.62.0-SNAPSHOT.jar differ diff --git a/org.omg.sysml.logic/src/main/java/org/omg/sysml/adapter/PortUsageAdapter.java b/org.omg.sysml.logic/src/main/java/org/omg/sysml/adapter/PortUsageAdapter.java index e5e7502ff7..c10dad2f0d 100644 --- a/org.omg.sysml.logic/src/main/java/org/omg/sysml/adapter/PortUsageAdapter.java +++ b/org.omg.sysml.logic/src/main/java/org/omg/sysml/adapter/PortUsageAdapter.java @@ -27,7 +27,7 @@ import org.omg.sysml.lang.sysml.PortUsage; import org.omg.sysml.lang.sysml.Type; -public class PortUsageAdapter extends UsageAdapter { +public class PortUsageAdapter extends OccurrenceUsageAdapter { public PortUsageAdapter(PortUsage element) { super(element); diff --git a/org.omg.sysml.model.bundle/lib/org.omg.sysml.model-0.62.0-SNAPSHOT.jar b/org.omg.sysml.model.bundle/lib/org.omg.sysml.model-0.62.0-SNAPSHOT.jar index 9ac46e96fa..653f74395a 100644 Binary files a/org.omg.sysml.model.bundle/lib/org.omg.sysml.model-0.62.0-SNAPSHOT.jar and b/org.omg.sysml.model.bundle/lib/org.omg.sysml.model-0.62.0-SNAPSHOT.jar differ diff --git a/sysml/src/examples/Simple Tests/PartTest.sysml b/sysml/src/examples/Simple Tests/PartTest.sysml index 1ec56ab313..21fd642bf5 100644 --- a/sysml/src/examples/Simple Tests/PartTest.sysml +++ b/sysml/src/examples/Simple Tests/PartTest.sysml @@ -19,7 +19,9 @@ package PartTest { port x: ~C { port p; ref port q; + timeslice port x1; } + timeslice part B1; package P { } succession flow x.p to a1.aa.receiver;