Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -110,15 +110,21 @@ package ChangingFeatureValuesExecution {
#atom
behavior MyPaint specializes Paint {
feature redefines objectToPaint : MyProduct;
step redefines painting : PaintingMyProductFeatureWrite;
step redefines painted : PaintedMyProductFeatureWrite;
step redefines painting : PaintingMyProductFeatureWrite {
in onOccurrence;
}
step redefines painted : PaintedMyProductFeatureWrite {
in onOccurrence;
}
succession redefines p_before_p : MyPaintingFW_Before_PaintFW_Link first painting then painted;
}

#atom
behavior MyDry specializes Dry {
feature redefines objectToDry : MyProduct;
step redefines dried : MyProductFeatureWrite;
step redefines dried : MyProductFeatureWrite {
in onOccurrence;
}
}
#atom
assoc MyPaint_Before_Dry_Link specializes HappensBefore {
Expand All @@ -128,7 +134,9 @@ package ChangingFeatureValuesExecution {
#atom
behavior MyShip specializes Ship {
feature redefines objectToShip : MyProduct;
step redefines shipped : MyProductFeatureWrite;
step redefines shipped : MyProductFeatureWrite {
in onOccurrence;
}
}
#atom
assoc MyDry_Before_Ship_Link specializes HappensBefore {
Expand All @@ -144,7 +152,9 @@ package ChangingFeatureValuesExecution {
feature obPiS chains objectToFinish.beforePaint.isShipped = false;


step redefines paint : MyPaint;
step redefines paint : MyPaint {
feature redefines paint::objectToPaint, MyPaint::objectToPaint;
}
feature subsets objectToFinish.beforePaint.immediateSuccessors,
objectToFinish.whilePainting.startShot.timeCoincidentOccurrences
chains paint.painting.endShot;
Expand All @@ -161,7 +171,9 @@ package ChangingFeatureValuesExecution {
feature oaPiS chains objectToFinish.afterPaint.isShipped = false;


step redefines dry : MyDry;
step redefines dry : MyDry {
feature redefines dry::objectToDry, MyDry::objectToDry;
}
succession redefines p_before_d : MyPaint_Before_Dry_Link [1] first paint then dry;
feature subsets objectToFinish.afterPaint.immediateSuccessors,
objectToFinish.afterDry.startShot.timeCoincidentOccurrences
Expand All @@ -171,7 +183,9 @@ package ChangingFeatureValuesExecution {
feature oaDiS chains objectToFinish.afterDry.isShipped = false;


step redefines ship : MyShip;
step redefines ship : MyShip {
feature redefines ship::objectToShip, MyShip::objectToShip;
}
succession redefines d_before_s : MyDry_Before_Ship_Link [1] first dry then ship;
feature subsets objectToFinish.afterDry.immediateSuccessors,
objectToFinish.afterShip.startShot.timeCoincidentOccurrences
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,8 @@ package ExtendedOccurrences {
connector : Occurrences::HappensDuring from [1] that to [1] self;
}
}
struct ExtendedObject :> ExtendedOccurrence {
feature self : ExtendedObject :>> Objects::Object::self, ExtendedOccurrence::self;
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package TimeVaryingFeaturesEnhanced {
private import ExtendedOccurrences::*;

class CC1 :> ExtendedOccurrence {
var feature x;
//member feature x featured by CC1_snapshots {
Expand Down Expand Up @@ -116,7 +116,7 @@ package TimeVaryingFeaturesEnhanced {
//}
}

struct Car1 :> ExtendedOccurrence { // May or may not be a life
struct Car1 :> ExtendedObject { // May or may not be a life
var feature driver : Person [0..1];
//member feature driver : Person [0..1] featured by Car_snapshots {
// member feature Car_snapshots :>> ExtendedOccurrences::ExtendedOccurrence::snapshots featured by Car1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,8 +133,8 @@ standard library package FeatureReferencingPerformances {
*/

in feature onOccurrence : Evaluation redefines onOccurrence {
protected monitoredOccurrence : Evaluation [1] redefines monitoredOccurrence {
out result : Anything[*] redefines result, monitoredFeature;
protected expr monitoredOccurrence : Evaluation [1] redefines monitoredOccurrence {
return result : Anything[*] redefines result, monitoredFeature;
}
}
}
Expand All @@ -147,7 +147,9 @@ standard library package FeatureReferencingPerformances {
*/

in bool redefines onOccurrence {
protected bool redefines monitoredOccurrence[1];
protected bool redefines monitoredOccurrence[1] {
return result : Boolean [1];
}
}
out redefines afterValues : Boolean [1];
out redefines beforeValues : Boolean [1];
Expand All @@ -167,10 +169,16 @@ standard library package FeatureReferencingPerformances {
feature isToTrue : Boolean [1] default true;
out afterValues: Boolean[1] redefines values = isToTrue;
private feature monitor1 : BooleanEvaluationResultMonitorPerformance [1] {
feature redefines endWhen : HappensJustBefore;
feature redefines endWhen : HappensJustBefore {
end feature earlierOccurrence;
end feature laterOccurrence;
}
}
private feature monitor2 : BooleanEvaluationResultMonitorPerformance [1] {
feature redefines endWhen : HappensJustBefore;
feature redefines endWhen : HappensJustBefore {
end feature earlierOccurrence;
end feature laterOccurrence;
}
}

private connector : HappensJustBefore from [1] monitor1 to [0..1] monitor2;
Expand Down
37 changes: 28 additions & 9 deletions org.omg.kerml.xpect.tests/library/Objects.kerml
Original file line number Diff line number Diff line change
Expand Up @@ -165,27 +165,46 @@ standard library package Objects {
* inner space dimension of structured space object is the highest of their cells.
*/

abstract portion feature structuredSpaceObjectCells : StructuredSpaceObject[1..*] subsets Occurrence::spaceSlices
{ feature cellOrientation : Integer [0..1];
abstract portion feature structuredSpaceObjectCells : StructuredSpaceObject[1..*] subsets Occurrence::spaceSlices {
feature cellOrientation : Integer [0..1];
inv { notEmpty(cellOrientation) implies (cellOrientation >= -1 & cellOrientation <= 1) }
}
}

comment about StructuredSurface, StructuredCurve, StructuredPoint
/*
* The structures StructuredSurface, StructuredCurve and StructuredPoint provide common, necessary redefinitions of
* innerSpaceDimension. They also provide single types for the StructuredSpaceObject features faces, edges and
* vertices, which avoids problems when these features are related by connectors with ends that have owned
* cross features.
*/
struct StructuredSurface specializes StructuredSpaceObject, Surface {
feature redefines StructuredSpaceObject::innerSpaceDimension, Surface::innerSpaceDimension;
}
struct StructuredCurve specializes StructuredSpaceObject, Curve {
feature redefines StructuredSpaceObject::innerSpaceDimension, Curve::innerSpaceDimension;
}
struct StructuredPoint specializes StructuredSpaceObject, Point {
feature redefines StructuredSpaceObject::innerSpaceDimension, Point::innerSpaceDimension;
}

portion feature faces : Surface[0..*] ordered subsets structuredSpaceObjectCells {
feature redefines edges subsets StructuredSpaceObject::edges;
feature redefines vertices subsets StructuredSpaceObject::vertices;
portion feature faces : StructuredSurface[0..*] ordered subsets structuredSpaceObjectCells {
feature redefines that : StructuredSpaceObject;
feature redefines edges subsets that.edges;
feature redefines vertices subsets that.vertices;
derived feature redefines spaceBoundary;
inv { isEmpty(spaceBoundary) == isEmpty(union(edges, vertices)) }
inv { notEmpty(spaceBoundary) implies contains(spaceBoundary.unionsOf, union(edges, vertices)) }
}

portion feature edges : Curve[0..*] ordered subsets structuredSpaceObjectCells {
feature redefines vertices subsets StructuredSpaceObject::vertices;
portion feature edges : StructuredCurve[0..*] ordered subsets structuredSpaceObjectCells {
feature redefines that : StructuredSpaceObject;
feature redefines vertices subsets that.vertices;
derived feature redefines spaceBoundary;
inv { isEmpty(spaceBoundary) == isEmpty(vertices) }
inv { notEmpty(spaceBoundary) implies contains(spaceBoundary.unionsOf, vertices) }
}

portion feature vertices : Point[0..*] ordered subsets structuredSpaceObjectCells;
portion feature vertices : StructuredPoint[0..*] ordered subsets structuredSpaceObjectCells;

derived feature redefines innerSpaceDimension =
if notEmpty(faces) ? 2 else if notEmpty(edges) ? 1 else 0;
Expand Down
1 change: 1 addition & 0 deletions org.omg.kerml.xpect.tests/library/Observation.kerml
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ standard library package Observation {
end feature source {
feature redefines sourceOutput = changeSignal;
}
end feature target;
}
}

Expand Down
6 changes: 3 additions & 3 deletions org.omg.kerml.xpect.tests/library/Occurrences.kerml
Original file line number Diff line number Diff line change
Expand Up @@ -537,16 +537,16 @@ standard library package Occurrences {
* the inner ones.
*/

feature redefines isClosed = true;
inv { isClosed == true }

feature spaceBounder: Occurrence [1] subsets self;

outer: Occurrence [0..1] subsets spaceSlices {
feature outer: Occurrence [0..1] subsets spaceSlices {
feature redefines isClosed = true;
feature redefines innerSpaceDimension = spaceBounder.innerSpaceDimension;
}

inner: Occurrence [0..*] subsets spaceSlices {
feature inner: Occurrence [0..*] subsets spaceSlices {
feature redefines isClosed = true;
feature redefines innerSpaceDimension = spaceBounder.innerSpaceDimension;
}
Expand Down
2 changes: 1 addition & 1 deletion org.omg.kerml.xpect.tests/library/Transfers.kerml
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ standard library package Transfers {
private succession self then target;
}

interaction FlowTransferBefore specializes FlowTransfer, TransferBefore intersects FlowTransfer, TransferBefore {
interaction FlowTransferBefore specializes TransferBefore, FlowTransfer intersects FlowTransfer, TransferBefore {
doc
/*
* FlowTransferBefore is a FlowTransfer that is also a TransferBefore.
Expand Down
4 changes: 3 additions & 1 deletion org.omg.kerml.xpect.tests/library/VectorFunctions.kerml
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,9 @@ standard library package VectorFunctions {
}
function CartesianThreeVectorOf specializes CartesianVectorOf {
in components: Real[3] ordered nonunique;
return : CartesianThreeVectorValue[1];
return : CartesianThreeVectorValue[1] {
feature :>> CartesianVectorOf::result::dimension, CartesianThreeVectorValue::dimension;
}
}

feature cartesianZeroVector: CartesianVectorValue[3] =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ package test{
public import OuterPackage::*;
}
feature inner1 subsets inner {
//XPECT warnings --> "Duplicate of inherited member name B from OuterPackage" at "B"
//XPECT warnings --> "Duplicate of inherited member name 'B' from OuterPackage" at "B"
feature B redefines A {
//XPECT linkedName at a1 --> OuterPackage.A.a1
//* XPECT scope at a1 ---
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,12 @@ package test{
classifier F {}
}
classifier D :> C {
// XPECT warnings --> "Duplicate of inherited member name D from C" at "D"
// XPECT warnings --> "Duplicate of inherited member name 'D' from C" at "D"
classifier D {}
}
classifier E :> D {
// XPECT warnings --> "Duplicate of inherited member name F from C" at "F"
classifier E :> C;
classifier F :> E {
// XPECT warnings --> "Duplicate of inherited member name 'F' from C" at "F"
classifier F {}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ package RedefinitionDiamond {

feature B :> A1, A2 {
p2 :>> p1; // 2
// XPECT warnings ---> "Duplicate of inherited member name p from A2" at "p"
// XPECT warnings ---> "Duplicate of inherited member name 'p' from A2" at "p"
feature p;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ package RedefinitionDiamond {

feature B :> A1, A2 {
// p2 :>> p1; // 2
// XPECT warnings ---> "Duplicate of inherited member name p from A2" at "p"
// XPECT warnings ---> "Duplicate of inherited member name 'p' from A2" at "p"
feature p;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ package Specialization_invalid {
"Cannot specialize class or association" at "A1"
---
*/
// XPECT warnings ---> "Duplicate of inherited member name 'self' from DataValue, Occurrence" at "datatype D2 specializes D1, C1, A1;"
datatype D2 specializes D1, C1, A1;

class C1;
Expand All @@ -44,15 +45,18 @@ package Specialization_invalid {
"Cannot specialize data type or association" at "A1"
---
*/
// XPECT warnings ---> "Duplicate of inherited member name 'self' from DataValue, Occurrence" at "class C2 specializes C1, D1, A1;"
class C2 specializes C1, D1, A1;

abstract assoc A1;
abstract assoc struct A2 specializes C2, A1;
abstract interaction A3 specializes C2, A1;
abstract assoc struct A2 specializes A, A1;
abstract interaction A3 specializes A, A1;

// XPECT errors--->"Cannot specialize behavior" at "B1"
// XPECT warnings ---> "Duplicate of inherited member name 'self' from Object, Performance" at "struct S specializes B1;"
struct S specializes B1;

// XPECT errors--->"Cannot specialize structure" at "S"
// XPECT warnings ---> "Duplicate of inherited member name 'self' from Object, Performance" at "behavior B1 specializes S;"
behavior B1 specializes S;
}
Loading