Skip to content

Commit 2d4355c

Browse files
authored
Merge pull request #613 from Systems-Modeling/ST6RI-809
ST6RI-809 Inherited memberships (KERML_-39)
2 parents 5ecb5c5 + 17d213f commit 2d4355c

227 files changed

Lines changed: 91918 additions & 81084 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

org.omg.kerml.xpect.tests/library/Collections.kerml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ standard library package Collections {
9797
* OrderedSet is a variable-size, ordered collection of unique elements.
9898
*/
9999

100-
feature elements[0..*] ordered :>> OrderedCollection::elements {
100+
feature elements[0..*] ordered :>> OrderedCollection::elements, UniqueCollection::elements {
101101
/* Note: Redefinition of `elements` is unique by default. */
102102
}
103103
}

org.omg.kerml.xpect.tests/library/Observation.kerml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ standard library package Observation {
8989
* Then send changeSignal to changeObserver.
9090
*/
9191

92-
feature redefines source {
92+
end feature source {
9393
feature redefines sourceOutput = changeSignal;
9494
}
9595
}

org.omg.kerml.xpect.tests/src/org/omg/kerml/xpect/tests/testsuite/ShadowingTests_ImportAndInnerClassesNamesAreTheSameBadCase3_Rdef.kerml.xt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ package test{
2525
public import OuterPackage::*;
2626
}
2727
feature inner1 subsets inner {
28-
//XPECT warnings --> "Duplicate of inherited member name" at "B"
28+
//XPECT warnings --> "Duplicate of inherited member name B from OuterPackage" at "B"
2929
feature B redefines A {
3030
//XPECT linkedName at a1 --> OuterPackage.A.a1
3131
//* XPECT scope at a1 ---

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@ package test{
3333
classifier F {}
3434
}
3535
classifier D :> C {
36-
// XPECT warnings --> "Duplicate of inherited member name" at "D"
36+
// XPECT warnings --> "Duplicate of inherited member name D from C" at "D"
3737
classifier D {}
3838
}
3939
classifier E :> D {
40-
// XPECT warnings --> "Duplicate of inherited member name" at "F"
40+
// XPECT warnings --> "Duplicate of inherited member name F from C" at "F"
4141
classifier F {}
4242
}
4343

org.omg.kerml.xpect.tests/src/org/omg/kerml/xpect/tests/validation/Redefinition_Diamond1_valid.kerml.xt renamed to org.omg.kerml.xpect.tests/src/org/omg/kerml/xpect/tests/validation/Redefinition_Diamond1_invalid.kerml.xt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ package RedefinitionDiamond {
3333

3434
feature B :> A1, A2 {
3535
p2 :>> p1; // 2
36-
// XPECT noErrors ---> ""
36+
// XPECT warnings ---> "Duplicate of inherited member name p from A2" at "p"
3737
feature p;
3838
}
3939
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ package RedefinitionDiamond {
3333

3434
feature B :> A1, A2 {
3535
// p2 :>> p1; // 2
36-
// XPECT warnings ---> "Duplicate of inherited member name" at "p"
36+
// XPECT warnings ---> "Duplicate of inherited member name p from A2" at "p"
3737
feature p;
3838
}
3939
}

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

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -372,22 +372,48 @@ class KerMLValidator extends AbstractKerMLValidator {
372372
def checkDistinguishibility(Membership mem, Iterable<Membership> others, String msg) {
373373
val memShortName = mem.memberShortName
374374
val memName = mem.memberName
375-
375+
376376
val distinctOthers = others.filter[other | mem.memberElement !== other.memberElement]
377-
if (memShortName !== null && distinctOthers.exists[other | memShortName == other.memberShortName || memShortName == other.memberName]) {
377+
if (memShortName !== null) {
378+
val dups = distinctOthers.filter[other | memShortName == other.memberShortName || memShortName == other.memberName]
379+
if (!dups.empty) {
380+
val msgDups = msg.identifyDuplicates(mem.membershipOwningNamespace, memShortName, dups)
378381
if (mem instanceof OwningMembership) {
379-
warning(msg, mem.ownedMemberElement, SysMLPackage.eINSTANCE.element_DeclaredShortName, INVALID_NAMESPACE_DISTINGUISHABILITY)
382+
warning(msgDups, mem.ownedMemberElement, SysMLPackage.eINSTANCE.element_DeclaredShortName, INVALID_NAMESPACE_DISTINGUISHABILITY)
380383
} else {
381-
warning(msg, mem, SysMLPackage.eINSTANCE.membership_MemberShortName, INVALID_NAMESPACE_DISTINGUISHABILITY)
384+
warning(msgDups, mem, SysMLPackage.eINSTANCE.membership_MemberShortName, INVALID_NAMESPACE_DISTINGUISHABILITY)
382385
}
386+
}
383387
}
384-
if (memName !== null && distinctOthers.exists[other | memName == other.memberShortName || memName == other.memberName]) {
388+
if (memName !== null) {
389+
val dups = distinctOthers.filter[other | memName == other.memberShortName || memName == other.memberName]
390+
if (!dups.empty) {
391+
val msgDups = msg.identifyDuplicates(mem.membershipOwningNamespace, memName, dups)
385392
if (mem instanceof OwningMembership) {
386-
warning(msg, mem.ownedMemberElement, SysMLPackage.eINSTANCE.element_DeclaredName, INVALID_NAMESPACE_DISTINGUISHABILITY)
393+
warning(msgDups, mem.ownedMemberElement, SysMLPackage.eINSTANCE.element_DeclaredName, INVALID_NAMESPACE_DISTINGUISHABILITY)
387394
} else {
388-
warning(msg, mem, SysMLPackage.eINSTANCE.membership_MemberName, INVALID_NAMESPACE_DISTINGUISHABILITY)
395+
warning(msgDups, mem, SysMLPackage.eINSTANCE.membership_MemberName, INVALID_NAMESPACE_DISTINGUISHABILITY)
396+
}
397+
}
398+
}
399+
}
400+
401+
def identifyDuplicates(String msg, Namespace memNs, String name, Iterable<Membership> dups) {
402+
var nsNames = ""
403+
for (dup: dups) {
404+
val ns = dup.membershipOwningNamespace
405+
if (ns !== memNs) {
406+
val nsName = ns.name
407+
if (nsName !== null) {
408+
if (!nsNames.empty) {
409+
nsNames += ", "
410+
}
411+
nsNames += nsName
389412
}
413+
}
390414
}
415+
if (nsNames.empty) msg
416+
else msg + " " + ElementUtil.escapeName(name) + " from " + nsNames;
391417
}
392418

393419
@Check

org.omg.sysml.edit/src/org/omg/sysml/lang/sysml/provider/AcceptActionUsageItemProvider.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -180,17 +180,17 @@ public String getCreateChildText(Object owner, Object feature, Object child, Col
180180

181181
boolean qualify =
182182
childFeature == SysMLPackage.Literals.ELEMENT__OWNED_RELATIONSHIP ||
183-
childFeature == SysMLPackage.Literals.TYPE__OWNED_SPECIALIZATION ||
184183
childFeature == SysMLPackage.Literals.NAMESPACE__OWNED_MEMBERSHIP ||
185184
childFeature == SysMLPackage.Literals.ELEMENT__OWNED_ANNOTATION ||
186-
childFeature == SysMLPackage.Literals.FEATURE__OWNED_TYPE_FEATURING ||
187-
childFeature == SysMLPackage.Literals.FEATURE__OWNED_FEATURE_INVERTING ||
188-
childFeature == SysMLPackage.Literals.FEATURE__OWNED_FEATURE_CHAINING ||
185+
childFeature == SysMLPackage.Literals.TYPE__OWNED_SPECIALIZATION ||
189186
childFeature == SysMLPackage.Literals.TYPE__OWNED_CONJUGATOR ||
190187
childFeature == SysMLPackage.Literals.TYPE__OWNED_INTERSECTING ||
191188
childFeature == SysMLPackage.Literals.TYPE__OWNED_UNIONING ||
192189
childFeature == SysMLPackage.Literals.TYPE__OWNED_DISJOINING ||
193190
childFeature == SysMLPackage.Literals.TYPE__OWNED_DIFFERENCING ||
191+
childFeature == SysMLPackage.Literals.FEATURE__OWNED_TYPE_FEATURING ||
192+
childFeature == SysMLPackage.Literals.FEATURE__OWNED_FEATURE_INVERTING ||
193+
childFeature == SysMLPackage.Literals.FEATURE__OWNED_FEATURE_CHAINING ||
194194
childFeature == SysMLPackage.Literals.NAMESPACE__OWNED_IMPORT;
195195

196196
if (qualify) {

org.omg.sysml.edit/src/org/omg/sysml/lang/sysml/provider/ActionDefinitionItemProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,9 @@ public String getCreateChildText(Object owner, Object feature, Object child, Col
180180

181181
boolean qualify =
182182
childFeature == SysMLPackage.Literals.ELEMENT__OWNED_RELATIONSHIP ||
183-
childFeature == SysMLPackage.Literals.TYPE__OWNED_SPECIALIZATION ||
184183
childFeature == SysMLPackage.Literals.NAMESPACE__OWNED_MEMBERSHIP ||
185184
childFeature == SysMLPackage.Literals.ELEMENT__OWNED_ANNOTATION ||
185+
childFeature == SysMLPackage.Literals.TYPE__OWNED_SPECIALIZATION ||
186186
childFeature == SysMLPackage.Literals.TYPE__OWNED_CONJUGATOR ||
187187
childFeature == SysMLPackage.Literals.TYPE__OWNED_INTERSECTING ||
188188
childFeature == SysMLPackage.Literals.TYPE__OWNED_UNIONING ||

org.omg.sysml.edit/src/org/omg/sysml/lang/sysml/provider/ActionUsageItemProvider.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -180,17 +180,17 @@ public String getCreateChildText(Object owner, Object feature, Object child, Col
180180

181181
boolean qualify =
182182
childFeature == SysMLPackage.Literals.ELEMENT__OWNED_RELATIONSHIP ||
183-
childFeature == SysMLPackage.Literals.TYPE__OWNED_SPECIALIZATION ||
184183
childFeature == SysMLPackage.Literals.NAMESPACE__OWNED_MEMBERSHIP ||
185184
childFeature == SysMLPackage.Literals.ELEMENT__OWNED_ANNOTATION ||
186-
childFeature == SysMLPackage.Literals.FEATURE__OWNED_TYPE_FEATURING ||
187-
childFeature == SysMLPackage.Literals.FEATURE__OWNED_FEATURE_INVERTING ||
188-
childFeature == SysMLPackage.Literals.FEATURE__OWNED_FEATURE_CHAINING ||
185+
childFeature == SysMLPackage.Literals.TYPE__OWNED_SPECIALIZATION ||
189186
childFeature == SysMLPackage.Literals.TYPE__OWNED_CONJUGATOR ||
190187
childFeature == SysMLPackage.Literals.TYPE__OWNED_INTERSECTING ||
191188
childFeature == SysMLPackage.Literals.TYPE__OWNED_UNIONING ||
192189
childFeature == SysMLPackage.Literals.TYPE__OWNED_DISJOINING ||
193190
childFeature == SysMLPackage.Literals.TYPE__OWNED_DIFFERENCING ||
191+
childFeature == SysMLPackage.Literals.FEATURE__OWNED_TYPE_FEATURING ||
192+
childFeature == SysMLPackage.Literals.FEATURE__OWNED_FEATURE_INVERTING ||
193+
childFeature == SysMLPackage.Literals.FEATURE__OWNED_FEATURE_CHAINING ||
194194
childFeature == SysMLPackage.Literals.NAMESPACE__OWNED_IMPORT;
195195

196196
if (qualify) {

0 commit comments

Comments
 (0)