@@ -211,6 +211,8 @@ class KerMLValidator extends AbstractKerMLValidator {
211211
212212 public static val INVALID_ASSOCIATION_BINARY_SPECIALIZATION = " validateAssociationBinarySpecialization"
213213 public static val INVALID_ASSOCIATION_BINARY_SPECIALIZATION_MSG = " Cannot have more than two ends"
214+ public static val INVALID_ASSOCIATION_END_TYPES = " validateAssociationEndTypes"
215+ public static val INVALID_ASSOCIATION_END_TYPES_MSG = " An association end must have exactly one type"
214216 public static val INVALID_ASSOCIATION_RELATED_TYPES = " validateAssociationRelatedTypes"
215217 public static val INVALID_ASSOCIATION_RELATED_TYPES_MSG = " Must have at least two related elements"
216218 public static val INVALID_ASSOCIATION_STRUCTURE_INTERSECTION = " validateAssociationStructureIntersection"
@@ -767,12 +769,12 @@ class KerMLValidator extends AbstractKerMLValidator {
767769 def checkAssociation (Association a ){
768770 // validateAssociationBinarySpecialization
769771 // NOTE: It is sufficient to check owned ends, since they will redefine ends from any supertypes.
770- val associationEnds = TypeUtil . getOwnedEndFeaturesOf(a);
771- if (associationEnds . size() > 2 ) {
772+ val ownedEndFeatures = TypeUtil . getOwnedEndFeaturesOf(a);
773+ if (ownedEndFeatures . size() > 2 ) {
772774 val binaryLinkType = SysMLLibraryUtil . getLibraryElement(a, " Links::BinaryLink" ) as Type
773775 if (a. conformsTo(binaryLinkType)) {
774- for (var i = 2 ; i < associationEnds . size(); i++ ) {
775- error(INVALID_ASSOCIATION_BINARY_SPECIALIZATION_MSG , associationEnds . get(i), null , INVALID_ASSOCIATION_BINARY_SPECIALIZATION )
776+ for (var i = 2 ; i < ownedEndFeatures . size(); i++ ) {
777+ error(INVALID_ASSOCIATION_BINARY_SPECIALIZATION_MSG , ownedEndFeatures . get(i), null , INVALID_ASSOCIATION_BINARY_SPECIALIZATION )
776778 }
777779 }
778780 }
@@ -784,6 +786,13 @@ class KerMLValidator extends AbstractKerMLValidator {
784786 error(INVALID_ASSOCIATION_RELATED_TYPES_MSG , a, SysMLPackage . eINSTANCE. relationship_RelatedElement, INVALID_ASSOCIATION_RELATED_TYPES )
785787 }
786788
789+ // validateAssociationEndTypes
790+ for (end: ownedEndFeatures) {
791+ if (end. type. size != 1 ) {
792+ error(INVALID_ASSOCIATION_END_TYPES_MSG , end, null , INVALID_ASSOCIATION_END_TYPES )
793+ }
794+ }
795+
787796 // validateAssociationStructureIntersection is automatically satisfied
788797 }
789798
0 commit comments