Skip to content

Commit 4ff26c8

Browse files
authored
Merge pull request #594 from Systems-Modeling/ST6RI-795
ST6RI-795 Improve performance of validation involving inherited memberships
2 parents ac3d3a8 + 4843cec commit 4ff26c8

20 files changed

Lines changed: 505 additions & 99 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//*
2+
XPECT_SETUP org.omg.kerml.xpect.tests.validation.KerMLValidationTest
3+
ResourceSet {
4+
ThisFile {}
5+
File {from ="/library/Base.kerml"}
6+
File {from ="/library/Occurrences.kerml"}
7+
File {from ="/library/Objects.kerml"}
8+
File {from ="/library/Performances.kerml"}
9+
}
10+
Workspace {
11+
JavaProject {
12+
SrcFolder {
13+
ThisFile {}
14+
File {from ="/library/Base.kerml"}
15+
File {from ="/library/Occurrences.kerml"}
16+
File {from ="/library/Objects.kerml"}
17+
File {from ="/library/Performances.kerml"}
18+
}
19+
}
20+
}
21+
END_SETUP
22+
*/
23+
package RedefinitionDiamond {
24+
feature A {
25+
feature p[*];
26+
}
27+
feature A1 :> A {
28+
p1 :>> p;
29+
}
30+
feature A2 :> A {
31+
// p :>> p; // 1
32+
}
33+
34+
feature B :> A1, A2 {
35+
// p2 :>> p1; // 2
36+
// XPECT noErrors ---> ""
37+
feature p;
38+
}
39+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//*
2+
XPECT_SETUP org.omg.kerml.xpect.tests.validation.KerMLValidationTest
3+
ResourceSet {
4+
ThisFile {}
5+
File {from ="/library/Base.kerml"}
6+
File {from ="/library/Occurrences.kerml"}
7+
File {from ="/library/Objects.kerml"}
8+
File {from ="/library/Performances.kerml"}
9+
}
10+
Workspace {
11+
JavaProject {
12+
SrcFolder {
13+
ThisFile {}
14+
File {from ="/library/Base.kerml"}
15+
File {from ="/library/Occurrences.kerml"}
16+
File {from ="/library/Objects.kerml"}
17+
File {from ="/library/Performances.kerml"}
18+
}
19+
}
20+
}
21+
END_SETUP
22+
*/
23+
package RedefinitionDiamond {
24+
feature A {
25+
feature p[*];
26+
}
27+
feature A1 :> A {
28+
p1 :>> p;
29+
}
30+
feature A2 :> A {
31+
p :>> p; // 1
32+
}
33+
34+
feature B :> A1, A2 {
35+
p2 :>> p1; // 2
36+
// XPECT noErrors ---> ""
37+
feature p;
38+
}
39+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//*
2+
XPECT_SETUP org.omg.kerml.xpect.tests.validation.KerMLValidationTest
3+
ResourceSet {
4+
ThisFile {}
5+
File {from ="/library/Base.kerml"}
6+
File {from ="/library/Occurrences.kerml"}
7+
File {from ="/library/Objects.kerml"}
8+
File {from ="/library/Performances.kerml"}
9+
}
10+
Workspace {
11+
JavaProject {
12+
SrcFolder {
13+
ThisFile {}
14+
File {from ="/library/Base.kerml"}
15+
File {from ="/library/Occurrences.kerml"}
16+
File {from ="/library/Objects.kerml"}
17+
File {from ="/library/Performances.kerml"}
18+
}
19+
}
20+
}
21+
END_SETUP
22+
*/
23+
package RedefinitionDiamond {
24+
feature A {
25+
feature p[*];
26+
}
27+
feature A1 :> A {
28+
p1 :>> p;
29+
}
30+
feature A2 :> A {
31+
// p :>> p; // 1
32+
}
33+
34+
feature B :> A1, A2 {
35+
p2 :>> p1; // 2
36+
// XPECT noErrors ---> ""
37+
feature p;
38+
}
39+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//*
2+
XPECT_SETUP org.omg.kerml.xpect.tests.validation.KerMLValidationTest
3+
ResourceSet {
4+
ThisFile {}
5+
File {from ="/library/Base.kerml"}
6+
File {from ="/library/Occurrences.kerml"}
7+
File {from ="/library/Objects.kerml"}
8+
File {from ="/library/Performances.kerml"}
9+
}
10+
Workspace {
11+
JavaProject {
12+
SrcFolder {
13+
ThisFile {}
14+
File {from ="/library/Base.kerml"}
15+
File {from ="/library/Occurrences.kerml"}
16+
File {from ="/library/Objects.kerml"}
17+
File {from ="/library/Performances.kerml"}
18+
}
19+
}
20+
}
21+
END_SETUP
22+
*/
23+
package RedefinitionDiamond {
24+
feature A {
25+
feature p[*];
26+
}
27+
feature A1 :> A {
28+
p1 :>> p;
29+
}
30+
feature A2 :> A {
31+
p :>> p; // 1
32+
}
33+
34+
feature B :> A1, A2 {
35+
// p2 :>> p1; // 2
36+
// XPECT warnings ---> "Duplicate of inherited member name" at "p"
37+
feature p;
38+
}
39+
}

org.omg.kerml.xtext/src/org/omg/kerml/xtext/scoping/KerMLScope.xtend

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ class KerMLScope extends AbstractScope implements ISysMLScope {
366366
val newRedefined = new HashSet()
367367
if (redefined !== null) {
368368
newRedefined.addAll(redefined)
369-
newRedefined.addAll(ns.redefinedFeatures)
369+
newRedefined.addAll(TypeUtil.getFeaturesRedefinedBy(ns, skip))
370370
}
371371
for (e: ns.ownedSpecialization) {
372372
if (!scopeProvider.visited.contains(e)) {
@@ -402,11 +402,6 @@ class KerMLScope extends AbstractScope implements ISysMLScope {
402402
return false
403403
}
404404

405-
protected def Set<Feature> redefinedFeatures(Type type) {
406-
type.ownedFeature.
407-
flatMap[feature|FeatureUtil.getRedefinedFeaturesWithComputedOf(feature, skip)].toSet
408-
}
409-
410405
protected def boolean imp(Namespace ns, QualifiedName qn, Set<Namespace> visited, boolean isInsideScope, boolean includeImplicitGen, boolean includeAll) {
411406
for (e: ns.ownedImport) {
412407
if (!scopeProvider.visited.contains(e)) {

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,6 @@ class KerMLValidator extends AbstractKerMLValidator {
307307
checkDistinguishibility(mem, aliasMemberships, INVALID_NAMESPACE_DISTINGUISHABILITY_MSG_1)
308308
}
309309
if (namesp instanceof Type) {
310-
ElementUtil.clearCachesOf(namesp) // Force recomputation of inherited memberships.
311310
val inheritedMemberships = namesp.inheritedMembership
312311
for (mem: ownedMemberships) {
313312
checkDistinguishibility(mem, inheritedMemberships, INVALID_NAMESPACE_DISTINGUISHABILITY_MSG_2)
@@ -754,7 +753,7 @@ class KerMLValidator extends AbstractKerMLValidator {
754753
checkAtMostOne(mems, INVALID_EXPRESSION_RESULT_PARAMETER_MEMBERSHIP_MSG, SysMLPackage.eINSTANCE.parameterMembership_OwnedMemberParameter, INVALID_EXPRESSION_RESULT_PARAMETER_MEMBERSHIP)
755754

756755
// validateExpressionResultExpressionMembership
757-
val reMems = e.membership.filter[m | m instanceof ResultExpressionMembership]
756+
val reMems = TypeUtil.getResultExpressionMembershipsOf(e)
758757
if (reMems.size() > 1) {
759758
val ownedMem = reMems.filter[m | m.membershipOwningNamespace === e]
760759
if (!ownedMem.isEmpty) {
@@ -772,7 +771,7 @@ class KerMLValidator extends AbstractKerMLValidator {
772771
checkAtMostOne(mems, INVALID_FUNCTION_RESULT_PARAMETER_MEMBERSHIP_MSG, SysMLPackage.eINSTANCE.parameterMembership_OwnedMemberParameter, INVALID_FUNCTION_RESULT_PARAMETER_MEMBERSHIP)
773772

774773
// validateFunctionResultExpressionMembership
775-
val reMems = f.membership.filter[m | m instanceof ResultExpressionMembership]
774+
val reMems = TypeUtil.getResultExpressionMembershipsOf(f)
776775
if (reMems.size() > 1) {
777776
val ownedMem = reMems.filter[m | m.membershipOwningNamespace === f]
778777
if (!ownedMem.isEmpty) {

org.omg.sysml.interactive/.launch/SysML Interactive Profiler.launch

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
99
<listEntry value="1"/>
1010
</listAttribute>
11+
<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.launching.sourceLocator.JavaAdvancedSourceLookupDirector"/>
12+
<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;sourceLookupDirector&gt;&#10; &lt;sourceContainers duplicates=&quot;false&quot;&gt;&#10; &lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;folder nest=&amp;quot;false&amp;quot; path=&amp;quot;/org.omg.kerml.xtext/src&amp;quot;/&amp;gt;&amp;#10;&quot; typeId=&quot;org.eclipse.debug.core.containerType.folder&quot;/&gt;&#10; &lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;default/&amp;gt;&amp;#10;&quot; typeId=&quot;org.eclipse.debug.core.containerType.default&quot;/&gt;&#10; &lt;/sourceContainers&gt;&#10;&lt;/sourceLookupDirector&gt;&#10;"/>
1113
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_ATTR_USE_ARGFILE" value="false"/>
1214
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_EXCLUDE_TEST_CODE" value="true"/>
1315
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES" value="true"/>

org.omg.sysml.interactive/VehicleModel_2_Simplified.sysml

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package s_friedenthal_SimpleVehicle{
22
// this is a simplified version of the vehicle model
3-
import Definitions::*;
3+
public import Definitions::*;
44
package Definitions{
5-
import PartDefinitions::*;
6-
import PortDefinitions::*;
7-
import ItemDefinitions::*;
8-
import ActionDefinitions::*;
9-
import RequirementDefinitions::*;
10-
import VerificationCaseDefinitions::*;
11-
import AttributeDefinitions::*;
5+
public import PartDefinitions::*;
6+
public import PortDefinitions::*;
7+
public import ItemDefinitions::*;
8+
public import ActionDefinitions::*;
9+
public import RequirementDefinitions::*;
10+
public import VerificationCaseDefinitions::*;
11+
public import AttributeDefinitions::*;
1212
package PartDefinitions{
1313
part def Vehicle{
1414
attribute mass :> ISQ::mass = dryMass + cargoMass + fuelMass;
@@ -150,12 +150,12 @@ package s_friedenthal_SimpleVehicle{
150150
verification def ReliabilityTest;
151151
}
152152
package AttributeDefinitions{
153-
import ScalarValues::*;
153+
public import ScalarValues::*;
154154
// Scalar Functions provides Sum expression
155-
import NumericalFunctions::*;
156-
import Quantities::*;
157-
import SI::*;
158-
//import USCustomaryUnits::*;
155+
public import NumericalFunctions::*;
156+
public import Quantities::*;
157+
public import SI::*;
158+
//public import USCustomaryUnits::*;
159159
alias Torque for ISQ::TorqueValue;
160160
attribute distancePerVolume :> scalarQuantities = distance / volume;
161161
attribute timePerDistance :> scalarQuantities = time / distance;
@@ -233,8 +233,8 @@ package s_friedenthal_SimpleVehicle{
233233
}
234234
}
235235
package FuelEconomyAnalysisModel{
236-
import Configurations::Configuration_1::**;
237-
import SampledFunctions::SampledFunction;
236+
public import Configurations::Configuration_1::**;
237+
public import SampledFunctions::SampledFunction;
238238

239239
/*
240240
This analysis model was provided by Hisashi Miyashita on January 27, 2021
@@ -327,9 +327,9 @@ package s_friedenthal_SimpleVehicle{
327327
}
328328
}
329329
package VehicleVerification{
330-
import Configurations::Configuration_1::**;
330+
public import Configurations::Configuration_1::**;
331331
// the following is a model library which contains VerfictKind
332-
import VerificationCases::*;
332+
public import VerificationCases::*;
333333
package VerificationCases1{
334334
verification massTests:MassTest {
335335
subject = vehicle_1;
@@ -349,7 +349,7 @@ package s_friedenthal_SimpleVehicle{
349349
}
350350
}
351351
package VerificationSystem{
352-
import VerificationCases1::*;
352+
public import VerificationCases1::*;
353353
part massVerificationSystem{
354354
perform massTests;
355355
part scale{
@@ -404,7 +404,7 @@ package s_friedenthal_SimplePartsTree1{
404404
}
405405
}
406406
package s_friedenthal_SimplePartsTree2{
407-
//import Definitions::**;
407+
//public import Definitions::**;
408408
package Definitions{
409409
package PartDefinitions{
410410
part def A{
@@ -431,7 +431,7 @@ package s_friedenthal_SimplePartsTree2{
431431
}
432432
}
433433
package Configurations{
434-
import Definitions::**;
434+
public import Definitions::**;
435435
package Configuration_1{
436436
package PartsTree{
437437
part a:A{
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
//*
2+
XPECT_SETUP org.omg.sysml.xpect.tests.validation.valid.SysMLTests
3+
ResourceSet {
4+
ThisFile {}
5+
File {from ="/library.kernel/Base.kerml"}
6+
File {from ="/library.kernel/Occurrences.kerml"}
7+
File {from ="/library.kernel/Objects.kerml"}
8+
File {from ="/library.kernel/Performances.kerml"}
9+
File {from ="/library.systems/Items.sysml"}
10+
File {from ="/library.systems/Parts.sysml"}
11+
}
12+
Workspace {
13+
JavaProject {
14+
SrcFolder {
15+
ThisFile {}
16+
File {from ="/library.kernel/Base.kerml"}
17+
File {from ="/library.kernel/Occurrences.kerml"}
18+
File {from ="/library.kernel/Objects.kerml"}
19+
File {from ="/library.kernel/Performances.kerml"}
20+
File {from ="/library.systems/Items.sysml"}
21+
File {from ="/library.systems/Parts.sysml"}
22+
}
23+
}
24+
}
25+
END_SETUP
26+
*/
27+
package RedefinitionDiamond {
28+
part A {
29+
part p[*];
30+
}
31+
part A1 :> A {
32+
p1 :>> p;
33+
}
34+
part A2 :> A {
35+
p :>> p; // 1
36+
}
37+
38+
part B :> A1, A2 {
39+
// p2 :>> p1; // 2
40+
// XPECT warnings ---> "Duplicate of inherited member name" at "p"
41+
part p;
42+
}
43+
}

0 commit comments

Comments
 (0)