Skip to content

Commit 814e887

Browse files
authored
Merge pull request #609 from Systems-Modeling/ST6RI-730
ST6RI-730 Validation updates from KerML FTF1 Ballot #3
2 parents 967ce0c + 0409174 commit 814e887

2 files changed

Lines changed: 35 additions & 0 deletions

File tree

org.omg.kerml.xpect.tests/src/org/omg/kerml/xpect/tests/validation/Specialization_invalid.kerml.xt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ XPECT_SETUP org.omg.kerml.xpect.tests.parsing.KerMLParsingTest
66
File {from ="/library/Links.kerml"}
77
File {from ="/library/Occurrences.kerml"}
88
File {from ="/library/Objects.kerml"}
9+
File {from ="/library/Performances.kerml"}
910
}
1011
Workspace {
1112
JavaProject {
@@ -15,6 +16,7 @@ XPECT_SETUP org.omg.kerml.xpect.tests.parsing.KerMLParsingTest
1516
File {from ="/library/Links.kerml"}
1617
File {from ="/library/Occurrences.kerml"}
1718
File {from ="/library/Objects.kerml"}
19+
File {from ="/library/Performances.kerml"}
1820
}
1921
}
2022
}
@@ -47,4 +49,10 @@ package Specialization_invalid {
4749
abstract assoc A1;
4850
abstract assoc struct A2 specializes C2, A1;
4951
abstract interaction A3 specializes C2, A1;
52+
53+
// XPECT errors--->"Cannot specialize behavior" at "B1"
54+
struct S specializes B1;
55+
56+
// XPECT errors--->"Cannot specialize structure" at "S"
57+
behavior B1 specializes S;
5058
}

org.omg.kerml.xtext/src/org/omg/kerml/xtext/validation/KerMLValidator.xtend

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ import org.omg.sysml.lang.sysml.FeatureDirectionKind
9090
import org.omg.sysml.lang.sysml.Metaclass
9191
import org.omg.sysml.lang.sysml.Import
9292
import org.omg.sysml.lang.sysml.VisibilityKind
93+
import org.omg.sysml.lang.sysml.Structure
9394

9495
/**
9596
* This class contains custom validation rules.
@@ -180,6 +181,9 @@ class KerMLValidator extends AbstractKerMLValidator {
180181
public static val INVALID_CLASS_SPECIALIZATION = "validateClassSpecialization"
181182
public static val INVALID_CLASS_SPECIALIZATION_MSG = "Cannot specialize data type or association"
182183

184+
public static val INVALID_STRUCTURE_SPECIALIZATION = "validateStructureSpecialization"
185+
public static val INVALID_STRUCTURE_SPECIALIZATION_MSG = "Cannot specialize behavior"
186+
183187
public static val INVALID_ASSOCIATION_BINARY_SPECIALIZATION = "validateAssociationBinarySpecialization"
184188
public static val INVALID_ASSOCIATION_BINARY_SPECIALIZATION_MSG = "Cannot have more than two ends"
185189
public static val INVALID_ASSOCIATION_RELATED_TYPES = "validateAssociationRelatedTypes"
@@ -203,6 +207,9 @@ class KerMLValidator extends AbstractKerMLValidator {
203207
public static val INVALID_CONNECTOR_TYPE_FEATURING = "validateConnectorTypeFeaturing"
204208
public static val INVALID_CONNECTOR_TYPE_FEATURING_MSG = "Should be an accessible feature (use dot notation for nesting)"
205209

210+
public static val INVALID_BEHAVIOR_SPECIALIZATION = "validateBehaviorSpecialization"
211+
public static val INVALID_BEHAVIOR_SPECIALIZATION_MSG = "Cannot specialize structure"
212+
206213
public static val INVALID_PARAMETER_MEMBERSHIP_OWNING_TYPE = "validateParameterMembershipOwningType"
207214
public static val INVALID_PARAMETER_MEMBERSHIP_OWNING_TYPE_MSG = "Parameter membership not allowed"
208215

@@ -598,6 +605,16 @@ class KerMLValidator extends AbstractKerMLValidator {
598605
}
599606
}
600607

608+
@Check
609+
def checkStructure(Structure c) {
610+
// validateStructureSpecialization
611+
for (s: c.ownedSpecialization) {
612+
if (s.general instanceof Behavior) {
613+
error(INVALID_STRUCTURE_SPECIALIZATION_MSG, s, SysMLPackage.eINSTANCE.specialization_General, INVALID_STRUCTURE_SPECIALIZATION)
614+
}
615+
}
616+
}
617+
601618
@Check
602619
def checkAssociation(Association a){
603620
// validateAssociationBinarySpecialization
@@ -733,6 +750,16 @@ class KerMLValidator extends AbstractKerMLValidator {
733750
}
734751
}
735752

753+
@Check
754+
def checkBehavior(Behavior b) {
755+
// validateStructureSpecialization
756+
for (s: b.ownedSpecialization) {
757+
if (s.general instanceof Structure) {
758+
error(INVALID_BEHAVIOR_SPECIALIZATION_MSG, s, SysMLPackage.eINSTANCE.specialization_General, INVALID_BEHAVIOR_SPECIALIZATION)
759+
}
760+
}
761+
}
762+
736763
@Check
737764
def checkParameterMembership(ParameterMembership m) {
738765
if (!(m instanceof ReturnParameterMembership)) {

0 commit comments

Comments
 (0)