Skip to content

Commit ce0ec72

Browse files
authored
Merge pull request #349 from Systems-Modeling/ST6RI-521
ST6RI-521 Keyword metadata for language extension
2 parents de4de68 + 84c8e75 commit ce0ec72

48 files changed

Lines changed: 23225 additions & 20525 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/Metaobjects.kerml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ package Metaobjects {
3030
/**
3131
* The single annotatedElement of this SemanticMetadata, which must be a Type.
3232
*/
33-
readonly feature annotatedType : Type[1] redefines annotatedElement;
33+
abstract readonly feature redefines annotatedElement : Type[1];
3434

3535
/**
3636
* The required base Type for the annotatedType.

org.omg.kerml.xpect.tests/src/org/omg/kerml/xpect/tests/validation/MetadataFeatureTest_Invalid.kerml.xt renamed to org.omg.kerml.xpect.tests/src/org/omg/kerml/xpect/tests/validation/MetadataTests_MetadataFeature_invalid.kerml.xt

File renamed without changes.
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
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/Links.kerml"}
7+
File {from ="/library/Occurrences.kerml"}
8+
File {from ="/library/Objects.kerml"}
9+
File {from ="/library/Metaobjects.kerml"}
10+
File {from ="/library/Performances.kerml"}
11+
File {from ="/library/BaseFunctions.kerml"}
12+
File {from ="/library/KerML.kerml"}
13+
}
14+
Workspace {
15+
JavaProject {
16+
SrcFolder {
17+
ThisFile {}
18+
File {from ="/library/Base.kerml"}
19+
File {from ="/library/Links.kerml"}
20+
File {from ="/library/Occurrences.kerml"}
21+
File {from ="/library/Objects.kerml"}
22+
File {from ="/library/Metaobjects.kerml"}
23+
File {from ="/library/Performances.kerml"}
24+
File {from ="/library/BaseFunctions.kerml"}
25+
File {from ="/library/KerML.kerml"}
26+
}
27+
}
28+
}
29+
END_SETUP
30+
*/
31+
package SemanticMetadata_invalid {
32+
33+
class C {
34+
feature x;
35+
}
36+
feature f : C {
37+
feature y;
38+
}
39+
40+
abstract metaclass A :> Metaobjects::SemanticMetadata {
41+
feature :>> baseType; // Testing that baseType can be left unbound.
42+
}
43+
44+
metaclass B :> A {
45+
feature :>> baseType = f as KerML::Type;
46+
}
47+
48+
class C1 {
49+
// XPECT errors --> "Must have a concrete type" at "@A;"
50+
@A;
51+
// XPECT errors --> "Couldn't resolve reference to Feature 'x'." at "x"
52+
feature :>> x;
53+
}
54+
55+
class C2 {
56+
@B;
57+
feature :>> x;
58+
// XPECT errors --> "Couldn't resolve reference to Feature 'y'." at "y"
59+
feature :>> y;
60+
}
61+
62+
feature f1 {
63+
// XPECT errors --> "Must have a concrete type" at "@A;"
64+
@A;
65+
}
66+
67+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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/Links.kerml"}
7+
File {from ="/library/Occurrences.kerml"}
8+
File {from ="/library/Objects.kerml"}
9+
File {from ="/library/Metaobjects.kerml"}
10+
File {from ="/library/Performances.kerml"}
11+
File {from ="/library/BaseFunctions.kerml"}
12+
File {from ="/library/KerML.kerml"}
13+
}
14+
Workspace {
15+
JavaProject {
16+
SrcFolder {
17+
ThisFile {}
18+
File {from ="/library/Base.kerml"}
19+
File {from ="/library/Links.kerml"}
20+
File {from ="/library/Occurrences.kerml"}
21+
File {from ="/library/Objects.kerml"}
22+
File {from ="/library/Metaobjects.kerml"}
23+
File {from ="/library/Performances.kerml"}
24+
File {from ="/library/BaseFunctions.kerml"}
25+
File {from ="/library/KerML.kerml"}
26+
}
27+
}
28+
}
29+
END_SETUP
30+
*/
31+
// XPECT noErrors ---> ""
32+
package SemanticMetadata_valid {
33+
34+
class C {
35+
feature x;
36+
}
37+
feature f : C {
38+
feature y;
39+
}
40+
41+
abstract metaclass A :> Metaobjects::SemanticMetadata {
42+
feature :>> baseType; // Testing that baseType can be left unbound.
43+
}
44+
45+
metaclass B :> A {
46+
feature :>> baseType = f as KerML::Type;
47+
}
48+
49+
class C1 {
50+
@B;
51+
feature :>> x;
52+
}
53+
54+
feature f1 {
55+
@B;
56+
feature :>> x;
57+
feature :>> y;
58+
}
59+
60+
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,10 @@ class KerMLValidator extends AbstractKerMLValidator {
230230
}
231231

232232
def void checkMetadataAnnotatedElements(MetadataFeature mf) {
233-
val annotatedElementFeatures = FeatureUtil.getAllSubsettingFeaturesIn(mf, mf.annotatedElementFeature).filter[f | !f.abstract];
233+
var annotatedElementFeatures = FeatureUtil.getAllSubsettingFeaturesIn(mf, mf.annotatedElementFeature);
234+
if (annotatedElementFeatures.exists[!abstract]) {
235+
annotatedElementFeatures = annotatedElementFeatures.filter[!abstract].toList
236+
}
234237
if (!annotatedElementFeatures.empty) {
235238
for (element: mf.annotatedElement) {
236239
val metaclass = ExpressionUtil.getMetaclassOf(element)

org.omg.sysml.jupyter.jupyterlab/src/main/mode.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@ export function defineSysMLv2Mode(): void {
4242
"analysis", "and", "as", "assert", "assign", "assume", "at", "attribute", "bind", "binding", "by",
4343
"calc", "case", "comment", "concern", "connect", "connection", "constraint", "decide", "def", "default",
4444
"defined", "dependency", "derived", "do", "doc", "else", "end", "entry", "enum", "event", "exhibit",
45-
"exit", "expose", "feature", "filter", "first", "flow", "for", "fork", "frame", "from", "hastype", "if",
46-
"implies", "import", "in", "include", "individual", "inout", "interface", "istype", "item", "join",
47-
"language", "loop", "merge", "message", "metadata", "nonunique", "not", "objective", "occurrence", "of",
48-
"or", "ordered", "out", "package", "parallel", "part", "perform", "port", "private", "protected",
49-
"public", "readonly", "redefines", "ref", "render", "rendering", "rep", "require", "requirement",
50-
"return", "satisfy", "send", "snapshot", "specializes", "stakeholder", "state", "subject", "subsets",
45+
"exit", "expose", "filter", "first", "flow", "for", "fork", "frame", "from", "hastype", "if", "implies",
46+
"import", "in", "include", "individual", "inout", "interface", "istype", "item", "join", "language",
47+
"loop", "merge", "message", "metadata", "nonunique", "not", "objective", "occurrence", "of", "or",
48+
"ordered", "out", "package", "parallel", "part", "perform", "port", "private", "protected", "public",
49+
"readonly", "redefines", "ref", "render", "rendering", "rep", "require", "requirement", "return",
50+
"satisfy", "send", "snapshot", "specializes", "stakeholder", "state", "subject", "subsets",
5151
"succession", "then", "timeslice", "to", "transition", "until", "use", "variant", "variation",
5252
"verification", "verify", "via", "view", "viewpoint", "when", "while", "xor"
5353
].reduce(f_wordify, {}),

org.omg.sysml.jupyter.kernel/src/main/resources/kernel/kernel.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,12 @@ var enableMode = function (CodeMirror) {
5454
"analysis", "and", "as", "assert", "assign", "assume", "at", "attribute", "bind", "binding", "by",
5555
"calc", "case", "comment", "concern", "connect", "connection", "constraint", "decide", "def", "default",
5656
"defined", "dependency", "derived", "do", "doc", "else", "end", "entry", "enum", "event", "exhibit",
57-
"exit", "expose", "feature", "filter", "first", "flow", "for", "fork", "frame", "from", "hastype", "if",
58-
"implies", "import", "in", "include", "individual", "inout", "interface", "istype", "item", "join",
59-
"language", "loop", "merge", "message", "metadata", "nonunique", "not", "objective", "occurrence", "of",
60-
"or", "ordered", "out", "package", "parallel", "part", "perform", "port", "private", "protected",
61-
"public", "readonly", "redefines", "ref", "render", "rendering", "rep", "require", "requirement",
62-
"return", "satisfy", "send", "snapshot", "specializes", "stakeholder", "state", "subject", "subsets",
57+
"exit", "expose", "filter", "first", "flow", "for", "fork", "frame", "from", "hastype", "if", "implies",
58+
"import", "in", "include", "individual", "inout", "interface", "istype", "item", "join", "language",
59+
"loop", "merge", "message", "metadata", "nonunique", "not", "objective", "occurrence", "of", "or",
60+
"ordered", "out", "package", "parallel", "part", "perform", "port", "private", "protected", "public",
61+
"readonly", "redefines", "ref", "render", "rendering", "rep", "require", "requirement", "return",
62+
"satisfy", "send", "snapshot", "specializes", "stakeholder", "state", "subject", "subsets",
6363
"succession", "then", "timeslice", "to", "transition", "until", "use", "variant", "variation",
6464
"verification", "verify", "via", "view", "viewpoint", "when", "while", "xor"
6565
]),

org.omg.sysml.xpect.tests/library.kernel/Metaobjects.kerml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ package Metaobjects {
3030
/**
3131
* The single annotatedElement of this SemanticMetadata, which must be a Type.
3232
*/
33-
readonly feature annotatedType : Type[1] redefines annotatedElement;
33+
abstract readonly feature redefines annotatedElement : Type[1];
3434

3535
/**
3636
* The required base Type for the annotatedType.

org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/validation/invalid/MetadataUsage_Invalid.sysml.xt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ XPECT_SETUP org.omg.sysml.xpect.tests.validation.invalid.SysMLTests
1313
File {from ="/library.kernel/DataFunctions.kerml"}
1414
File {from ="/library.kernel/ScalarFunctions.kerml"}
1515
File {from ="/library.kernel/ControlFunctions.kerml"}
16+
File {from ="/library.kernel/KerML.kerml"}
1617
File {from ="/library.systems/Attributes.sysml"}
1718
File {from ="/library.systems/Items.sysml"}
1819
File {from ="/library.systems/Metadata.sysml"}
@@ -35,6 +36,7 @@ XPECT_SETUP org.omg.sysml.xpect.tests.validation.invalid.SysMLTests
3536
File {from ="/library.kernel/DataFunctions.kerml"}
3637
File {from ="/library.kernel/ScalarFunctions.kerml"}
3738
File {from ="/library.kernel/ControlFunctions.kerml"}
39+
File {from ="/library.kernel/KerML.kerml"}
3840
File {from ="/library.systems/Attributes.sysml"}
3941
File {from ="/library.systems/Items.sysml"}
4042
File {from ="/library.systems/Metadata.sysml"}

org.omg.sysml.xpect.tests/src/org/omg/sysml/xpect/tests/validation/invalid/Relationship_invalid_relatedElement0.sysml.xt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ package BindingConnectorExample {
3535
part def B1;
3636
part def V;
3737
part v : V {
38-
// XPECT warnings ---> "Duplicate owned member name" at "b0"
38+
// XPECT warnings --> "Duplicate owned member name" at "b0"
3939
part b0 : B0 {
4040
port p0 {
4141
in ref myIn;
@@ -46,13 +46,13 @@ package BindingConnectorExample {
4646
out ref myOut;
4747
}
4848
}
49+
// XPECT warnings --> "Duplicate owned member name" at "b0"
4950
//* XPECT errors ---
5051
"Relationships must have at least two related elements" at "bind b0.p0.myIn to"
5152
"mismatched input 'to' expecting '='" at "to"
5253
"no viable alternative at input '.'" at "."
5354
"no viable alternative at input '.'" at "."
5455
--- */
55-
// XPECT warnings ---> "Duplicate owned member name" at "b0"
5656
bind b0.p0.myIn to b0.p1.myOut;
5757
}
5858
}

0 commit comments

Comments
 (0)