diff options
author | Kristóf Marussy <kristof@marussy.com> | 2024-01-31 02:00:09 +0100 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2024-01-31 18:45:13 +0100 |
commit | c63126d2f1ce5f571c316b37e00fb43d2da7c7d3 (patch) | |
tree | 16e9dd04624565f7c9ccedd17749a9f264e89cb0 /subprojects | |
parent | fix(build): avoid cyclic dependency (diff) | |
download | refinery-c63126d2f1ce5f571c316b37e00fb43d2da7c7d3.tar.gz refinery-c63126d2f1ce5f571c316b37e00fb43d2da7c7d3.tar.zst refinery-c63126d2f1ce5f571c316b37e00fb43d2da7c7d3.zip |
refactor(language): module and node declarations
* New default file extension: .refinery (.problem is also supported).
* Add module keyword for self-contained modules.
* Rename indiv declarations to atom declaration.
* Add node and multi declarations for explicitly declared nodes and
multi-objects, respectively.
Diffstat (limited to 'subprojects')
25 files changed, 391 insertions, 161 deletions
diff --git a/subprojects/frontend/src/editor/EditorTheme.ts b/subprojects/frontend/src/editor/EditorTheme.ts index 1cad4a36..f499b0d9 100644 --- a/subprojects/frontend/src/editor/EditorTheme.ts +++ b/subprojects/frontend/src/editor/EditorTheme.ts | |||
@@ -126,7 +126,7 @@ export default styled('div', { | |||
126 | color: theme.palette.text.secondary, | 126 | color: theme.palette.text.secondary, |
127 | }, | 127 | }, |
128 | }, | 128 | }, |
129 | '.tok-problem-individual': { | 129 | '.tok-problem-atom': { |
130 | '&, & .tok-variableName': { | 130 | '&, & .tok-variableName': { |
131 | color: theme.palette.text.primary, | 131 | color: theme.palette.text.primary, |
132 | }, | 132 | }, |
diff --git a/subprojects/frontend/src/language/problem.grammar b/subprojects/frontend/src/language/problem.grammar index ce3baa02..b08a9c36 100644 --- a/subprojects/frontend/src/language/problem.grammar +++ b/subprojects/frontend/src/language/problem.grammar | |||
@@ -28,7 +28,7 @@ statement { | |||
28 | (":" Expr)? "." | 28 | (":" Expr)? "." |
29 | } | | 29 | } | |
30 | ProblemDeclaration { | 30 | ProblemDeclaration { |
31 | kw<"problem"> QualifiedName "." | 31 | (ckw<"module"> | kw<"problem">) QualifiedName "." |
32 | } | | 32 | } | |
33 | ClassDefinition { | 33 | ClassDefinition { |
34 | kw<"abstract">? kw<"class"> RelationName | 34 | kw<"abstract">? kw<"class"> RelationName |
@@ -37,7 +37,7 @@ statement { | |||
37 | } | | 37 | } | |
38 | EnumDefinition { | 38 | EnumDefinition { |
39 | kw<"enum"> RelationName | 39 | kw<"enum"> RelationName |
40 | (EnumBody { "{" sep<",", IndividualNodeName> "}" } | ".") | 40 | (EnumBody { "{" sep<",", AtomNodeName> "}" } | ".") |
41 | } | | 41 | } | |
42 | PredicateDefinition { | 42 | PredicateDefinition { |
43 | ( | 43 | ( |
@@ -56,8 +56,11 @@ statement { | |||
56 | // RuleName ParameterList<Parameter>? | 56 | // RuleName ParameterList<Parameter>? |
57 | // RuleBody { ":" sep<OrOp, Conjunction> "==>" sep<OrOp, Consequent> "." } | 57 | // RuleBody { ":" sep<OrOp, Conjunction> "==>" sep<OrOp, Consequent> "." } |
58 | //} | | 58 | //} | |
59 | IndividualDeclaration { | 59 | AtomDeclaration { |
60 | kw<"indiv"> sep<",", IndividualNodeName> "." | 60 | ckw<"atom"> sep<",", AtomNodeName> "." |
61 | } | | ||
62 | NodeDeclaration { | ||
63 | (ckw<"node"> | ckw<"multi">) sep<",", NodeName> "." | ||
61 | } | | 64 | } | |
62 | ScopeDeclaration { | 65 | ScopeDeclaration { |
63 | kw<"scope"> sep<",", ScopeElement> "." | 66 | kw<"scope"> sep<",", ScopeElement> "." |
@@ -161,7 +164,7 @@ RelationName { QualifiedName ~name } | |||
161 | 164 | ||
162 | //RuleName { QualifiedName } | 165 | //RuleName { QualifiedName } |
163 | 166 | ||
164 | IndividualNodeName { QualifiedName } | 167 | AtomNodeName { QualifiedName } |
165 | 168 | ||
166 | VariableName[@dynamicPrecedence=10] { QualifiedName ~name } | 169 | VariableName[@dynamicPrecedence=10] { QualifiedName ~name } |
167 | 170 | ||
diff --git a/subprojects/frontend/src/language/problemLanguageSupport.ts b/subprojects/frontend/src/language/problemLanguageSupport.ts index 2121e05f..3847fdd8 100644 --- a/subprojects/frontend/src/language/problemLanguageSupport.ts +++ b/subprojects/frontend/src/language/problemLanguageSupport.ts | |||
@@ -27,7 +27,8 @@ const parserWithMetadata = parser.configure({ | |||
27 | styleTags({ | 27 | styleTags({ |
28 | LineComment: t.lineComment, | 28 | LineComment: t.lineComment, |
29 | BlockComment: t.blockComment, | 29 | BlockComment: t.blockComment, |
30 | 'problem class enum pred fn indiv scope': t.definitionKeyword, | 30 | 'module problem class enum pred fn scope': t.definitionKeyword, |
31 | 'node atom multi': t.definitionKeyword, | ||
31 | 'abstract extends refers contains container opposite': t.modifier, | 32 | 'abstract extends refers contains container opposite': t.modifier, |
32 | 'default error contained containment': t.modifier, | 33 | 'default error contained containment': t.modifier, |
33 | 'true false unknown error': t.keyword, | 34 | 'true false unknown error': t.keyword, |
@@ -44,7 +45,7 @@ const parserWithMetadata = parser.configure({ | |||
44 | String: t.string, | 45 | String: t.string, |
45 | 'RelationName/QualifiedName': t.typeName, | 46 | 'RelationName/QualifiedName': t.typeName, |
46 | // 'RuleName/QualifiedName': t.typeName, | 47 | // 'RuleName/QualifiedName': t.typeName, |
47 | 'IndividualNodeName/QualifiedName': t.atom, | 48 | 'AtomNodeName/QualifiedName': t.atom, |
48 | 'VariableName/QualifiedName': t.variableName, | 49 | 'VariableName/QualifiedName': t.variableName, |
49 | '{ }': t.brace, | 50 | '{ }': t.brace, |
50 | '( )': t.paren, | 51 | '( )': t.paren, |
@@ -54,7 +55,8 @@ const parserWithMetadata = parser.configure({ | |||
54 | }), | 55 | }), |
55 | indentNodeProp.add({ | 56 | indentNodeProp.add({ |
56 | ProblemDeclaration: indentDeclaration, | 57 | ProblemDeclaration: indentDeclaration, |
57 | UniqueDeclaration: indentDeclaration, | 58 | AtomDeclaration: indentDeclaration, |
59 | NodeDeclaration: indentDeclaration, | ||
58 | ScopeDeclaration: indentDeclaration, | 60 | ScopeDeclaration: indentDeclaration, |
59 | PredicateBody: indentPredicateOrRule, | 61 | PredicateBody: indentPredicateOrRule, |
60 | FunctionBody: indentPredicateOrRule, | 62 | FunctionBody: indentPredicateOrRule, |
@@ -70,7 +72,8 @@ const parserWithMetadata = parser.configure({ | |||
70 | // RuleBody: foldInside, | 72 | // RuleBody: foldInside, |
71 | Conjunction: foldConjunction, | 73 | Conjunction: foldConjunction, |
72 | // Consequent: foldWholeNode, | 74 | // Consequent: foldWholeNode, |
73 | UniqueDeclaration: foldDeclaration, | 75 | AtomDeclaration: foldDeclaration, |
76 | NodeDeclaration: foldDeclaration, | ||
74 | ScopeDeclaration: foldDeclaration, | 77 | ScopeDeclaration: foldDeclaration, |
75 | BlockComment: foldBlockComment, | 78 | BlockComment: foldBlockComment, |
76 | }), | 79 | }), |
diff --git a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java index f64d4066..94a61c4f 100644 --- a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java +++ b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/ProblemSemanticHighlightingCalculator.java | |||
@@ -29,7 +29,7 @@ public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighli | |||
29 | private static final String CONTAINMENT_CLASS = "containment"; | 29 | private static final String CONTAINMENT_CLASS = "containment"; |
30 | private static final String ERROR_CLASS = "error"; | 30 | private static final String ERROR_CLASS = "error"; |
31 | private static final String NODE_CLASS = "node"; | 31 | private static final String NODE_CLASS = "node"; |
32 | private static final String INDIVIDUAL_NODE_CLASS = "individual"; | 32 | private static final String ATOM_NODE_CLASS = "atom"; |
33 | private static final String NEW_NODE_CLASS = "new"; | 33 | private static final String NEW_NODE_CLASS = "new"; |
34 | 34 | ||
35 | @Inject | 35 | @Inject |
@@ -137,10 +137,10 @@ public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighli | |||
137 | if (reference == ProblemPackage.Literals.VARIABLE_OR_NODE_EXPR__VARIABLE_OR_NODE) { | 137 | if (reference == ProblemPackage.Literals.VARIABLE_OR_NODE_EXPR__VARIABLE_OR_NODE) { |
138 | classesBuilder.add(NODE_CLASS); | 138 | classesBuilder.add(NODE_CLASS); |
139 | } | 139 | } |
140 | if (ProblemUtil.isIndividualNode(node)) { | 140 | if (ProblemUtil.isAtomNode(node)) { |
141 | classesBuilder.add(INDIVIDUAL_NODE_CLASS); | 141 | classesBuilder.add(ATOM_NODE_CLASS); |
142 | } | 142 | } |
143 | if (ProblemUtil.isNewNode(node)) { | 143 | if (ProblemUtil.isMultiNode(node)) { |
144 | classesBuilder.add(NEW_NODE_CLASS); | 144 | classesBuilder.add(NEW_NODE_CLASS); |
145 | } | 145 | } |
146 | } | 146 | } |
diff --git a/subprojects/language-model/problem.aird b/subprojects/language-model/problem.aird index a307ae83..a3420a04 100644 --- a/subprojects/language-model/problem.aird +++ b/subprojects/language-model/problem.aird | |||
@@ -1,25 +1,25 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | 1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.3/notation" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style"> | 2 | <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.3/notation" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style"> |
3 | <viewpoint:DAnalysis uid="_CqOewKA4EeuqkpDnuik1sg" selectedViews="_CsAAYKA4EeuqkpDnuik1sg" version="15.0.0.202201261500"> | 3 | <viewpoint:DAnalysis uid="_CqOewKA4EeuqkpDnuik1sg" selectedViews="_CsAAYKA4EeuqkpDnuik1sg" version="15.2.0.202303281325"> |
4 | <semanticResources>src/main/resources/model/problem.ecore</semanticResources> | 4 | <semanticResources>src/main/resources/model/problem.ecore</semanticResources> |
5 | <semanticResources>src/main/resources/model/problem.genmodel</semanticResources> | 5 | <semanticResources>src/main/resources/model/problem.genmodel</semanticResources> |
6 | <semanticResources>build/resources/main/model/problem.ecore</semanticResources> | 6 | <semanticResources>build/resources/main/model/problem.ecore</semanticResources> |
7 | <semanticResources>build/resources/main/model/problem.genmodel</semanticResources> | 7 | <semanticResources>build/resources/main/model/problem.genmodel</semanticResources> |
8 | <ownedViews xmi:type="viewpoint:DView" uid="_CsAAYKA4EeuqkpDnuik1sg"> | 8 | <ownedViews xmi:type="viewpoint:DView" uid="_CsAAYKA4EeuqkpDnuik1sg"> |
9 | <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']"/> | 9 | <viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']"/> |
10 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_CsYa4KA4EeuqkpDnuik1sg" name="declarations" repPath="#_CsUwgKA4EeuqkpDnuik1sg" changeId="7fa3b02a-a620-4e42-87d5-b2cc35ee8070"> | 10 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_CsYa4KA4EeuqkpDnuik1sg" name="declarations" repPath="#_CsUwgKA4EeuqkpDnuik1sg" changeId="1706658830410"> |
11 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> | 11 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> |
12 | <target xmi:type="ecore:EPackage" href="src/main/resources/model/problem.ecore#/"/> | 12 | <target xmi:type="ecore:EPackage" href="src/main/resources/model/problem.ecore#/"/> |
13 | </ownedRepresentationDescriptors> | 13 | </ownedRepresentationDescriptors> |
14 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_z1bOYF3lEe2LuOZzJ_LhLg" name="expressions" repPath="#_z1YyIF3lEe2LuOZzJ_LhLg" changeId="847d1bab-b9a3-4b3c-9007-d1ef6cbc7d2b"> | 14 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_z1bOYF3lEe2LuOZzJ_LhLg" name="expressions" repPath="#_z1YyIF3lEe2LuOZzJ_LhLg" changeId="1706657349781"> |
15 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> | 15 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> |
16 | <target xmi:type="ecore:EPackage" href="src/main/resources/model/problem.ecore#/"/> | 16 | <target xmi:type="ecore:EPackage" href="src/main/resources/model/problem.ecore#/"/> |
17 | </ownedRepresentationDescriptors> | 17 | </ownedRepresentationDescriptors> |
18 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_xj9yMF4eEe2rXNsIDUvqhw" name="assertions" repPath="#_xj6H0F4eEe2rXNsIDUvqhw" changeId="af7c7d5e-5f27-4ef1-b9ba-f5b0e7934a73"> | 18 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_xj9yMF4eEe2rXNsIDUvqhw" name="assertions" repPath="#_xj6H0F4eEe2rXNsIDUvqhw" changeId="1706657349781"> |
19 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> | 19 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> |
20 | <target xmi:type="ecore:EPackage" href="src/main/resources/model/problem.ecore#/"/> | 20 | <target xmi:type="ecore:EPackage" href="src/main/resources/model/problem.ecore#/"/> |
21 | </ownedRepresentationDescriptors> | 21 | </ownedRepresentationDescriptors> |
22 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_sCFokF4fEe2rXNsIDUvqhw" name="actions" repPath="#_sCFBgF4fEe2rXNsIDUvqhw" changeId="46042178-5db9-429c-bfeb-2f746d757073"> | 22 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_sCFokF4fEe2rXNsIDUvqhw" name="actions" repPath="#_sCFBgF4fEe2rXNsIDUvqhw" changeId="1706657349781"> |
23 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> | 23 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> |
24 | <target xmi:type="ecore:EPackage" href="src/main/resources/model/problem.ecore#/"/> | 24 | <target xmi:type="ecore:EPackage" href="src/main/resources/model/problem.ecore#/"/> |
25 | </ownedRepresentationDescriptors> | 25 | </ownedRepresentationDescriptors> |
@@ -31,6 +31,10 @@ | |||
31 | <children xmi:type="notation:Node" xmi:id="_D1D6MKA4EeuqkpDnuik1sg" type="2003" element="_D05iIKA4EeuqkpDnuik1sg"> | 31 | <children xmi:type="notation:Node" xmi:id="_D1D6MKA4EeuqkpDnuik1sg" type="2003" element="_D05iIKA4EeuqkpDnuik1sg"> |
32 | <children xmi:type="notation:Node" xmi:id="_D1EhQKA4EeuqkpDnuik1sg" type="5007"/> | 32 | <children xmi:type="notation:Node" xmi:id="_D1EhQKA4EeuqkpDnuik1sg" type="5007"/> |
33 | <children xmi:type="notation:Node" xmi:id="_D1FIUKA4EeuqkpDnuik1sg" type="7004"> | 33 | <children xmi:type="notation:Node" xmi:id="_D1FIUKA4EeuqkpDnuik1sg" type="7004"> |
34 | <children xmi:type="notation:Node" xmi:id="_ep380L_JEe6Mo_-4--GvQg" type="3010" element="_eplB4L_JEe6Mo_-4--GvQg"> | ||
35 | <styles xmi:type="notation:FontStyle" xmi:id="_ep380b_JEe6Mo_-4--GvQg" fontColor="2697711" fontName="Noto Sans" fontHeight="8"/> | ||
36 | <layoutConstraint xmi:type="notation:Location" xmi:id="_ep380r_JEe6Mo_-4--GvQg"/> | ||
37 | </children> | ||
34 | <styles xmi:type="notation:SortingStyle" xmi:id="_D1FIUaA4EeuqkpDnuik1sg"/> | 38 | <styles xmi:type="notation:SortingStyle" xmi:id="_D1FIUaA4EeuqkpDnuik1sg"/> |
35 | <styles xmi:type="notation:FilteringStyle" xmi:id="_D1FIUqA4EeuqkpDnuik1sg"/> | 39 | <styles xmi:type="notation:FilteringStyle" xmi:id="_D1FIUqA4EeuqkpDnuik1sg"/> |
36 | </children> | 40 | </children> |
@@ -216,11 +220,15 @@ | |||
216 | <children xmi:type="notation:Node" xmi:id="_pdJrwAGyEey7cfH5K6RyCw" type="2003" element="_pcXBkAGyEey7cfH5K6RyCw"> | 220 | <children xmi:type="notation:Node" xmi:id="_pdJrwAGyEey7cfH5K6RyCw" type="2003" element="_pcXBkAGyEey7cfH5K6RyCw"> |
217 | <children xmi:type="notation:Node" xmi:id="_pdOkQAGyEey7cfH5K6RyCw" type="5007"/> | 221 | <children xmi:type="notation:Node" xmi:id="_pdOkQAGyEey7cfH5K6RyCw" type="5007"/> |
218 | <children xmi:type="notation:Node" xmi:id="_pdOkQQGyEey7cfH5K6RyCw" type="7004"> | 222 | <children xmi:type="notation:Node" xmi:id="_pdOkQQGyEey7cfH5K6RyCw" type="7004"> |
223 | <children xmi:type="notation:Node" xmi:id="_u4zNEL_KEe6Mo_-4--GvQg" type="3010" element="_u4PMYL_KEe6Mo_-4--GvQg"> | ||
224 | <styles xmi:type="notation:FontStyle" xmi:id="_u4zNEb_KEe6Mo_-4--GvQg" fontColor="2697711" fontName="Noto Sans" fontHeight="8"/> | ||
225 | <layoutConstraint xmi:type="notation:Location" xmi:id="_u4zNEr_KEe6Mo_-4--GvQg"/> | ||
226 | </children> | ||
219 | <styles xmi:type="notation:SortingStyle" xmi:id="_pdOkQgGyEey7cfH5K6RyCw"/> | 227 | <styles xmi:type="notation:SortingStyle" xmi:id="_pdOkQgGyEey7cfH5K6RyCw"/> |
220 | <styles xmi:type="notation:FilteringStyle" xmi:id="_pdOkQwGyEey7cfH5K6RyCw"/> | 228 | <styles xmi:type="notation:FilteringStyle" xmi:id="_pdOkQwGyEey7cfH5K6RyCw"/> |
221 | </children> | 229 | </children> |
222 | <styles xmi:type="notation:ShapeStyle" xmi:id="_pdJrwQGyEey7cfH5K6RyCw" fontName="Noto Sans" fontHeight="8"/> | 230 | <styles xmi:type="notation:ShapeStyle" xmi:id="_pdJrwQGyEey7cfH5K6RyCw" fontName="Noto Sans" fontHeight="8"/> |
223 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_pdJrwgGyEey7cfH5K6RyCw" x="104" y="524" width="147" height="100"/> | 231 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_pdJrwgGyEey7cfH5K6RyCw" x="131" y="524" width="120" height="100"/> |
224 | </children> | 232 | </children> |
225 | <children xmi:type="notation:Node" xmi:id="_A9YrQCrZEeyyC-O0_LlY9w" type="2003" element="_A8hIkCrZEeyyC-O0_LlY9w"> | 233 | <children xmi:type="notation:Node" xmi:id="_A9YrQCrZEeyyC-O0_LlY9w" type="2003" element="_A8hIkCrZEeyyC-O0_LlY9w"> |
226 | <children xmi:type="notation:Node" xmi:id="_A9c8sCrZEeyyC-O0_LlY9w" type="5007"/> | 234 | <children xmi:type="notation:Node" xmi:id="_A9c8sCrZEeyyC-O0_LlY9w" type="5007"/> |
@@ -432,6 +440,44 @@ | |||
432 | <styles xmi:type="notation:ShapeStyle" xmi:id="_pOTU4Wg8Ee25oofngfVl_A" fontName="Noto Sans" fontHeight="8"/> | 440 | <styles xmi:type="notation:ShapeStyle" xmi:id="_pOTU4Wg8Ee25oofngfVl_A" fontName="Noto Sans" fontHeight="8"/> |
433 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_pOTU4mg8Ee25oofngfVl_A" x="776" y="1280" width="120" height="100"/> | 441 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_pOTU4mg8Ee25oofngfVl_A" x="776" y="1280" width="120" height="100"/> |
434 | </children> | 442 | </children> |
443 | <children xmi:type="notation:Node" xmi:id="_ZcIsoL_JEe6Mo_-4--GvQg" type="2003" element="_ZbwSIL_JEe6Mo_-4--GvQg"> | ||
444 | <children xmi:type="notation:Node" xmi:id="_ZcJTsL_JEe6Mo_-4--GvQg" type="5007"/> | ||
445 | <children xmi:type="notation:Node" xmi:id="_ZcJTsb_JEe6Mo_-4--GvQg" type="7004"> | ||
446 | <children xmi:type="notation:Node" xmi:id="_cstskL_JEe6Mo_-4--GvQg" type="3010" element="_csN9UL_JEe6Mo_-4--GvQg"> | ||
447 | <styles xmi:type="notation:FontStyle" xmi:id="_cstskb_JEe6Mo_-4--GvQg" fontName="Noto Sans" fontHeight="8"/> | ||
448 | <layoutConstraint xmi:type="notation:Location" xmi:id="_cstskr_JEe6Mo_-4--GvQg"/> | ||
449 | </children> | ||
450 | <children xmi:type="notation:Node" xmi:id="_dVoGsL_JEe6Mo_-4--GvQg" type="3010" element="_dVQTQL_JEe6Mo_-4--GvQg"> | ||
451 | <styles xmi:type="notation:FontStyle" xmi:id="_dVoGsb_JEe6Mo_-4--GvQg" fontName="Noto Sans" fontHeight="8"/> | ||
452 | <layoutConstraint xmi:type="notation:Location" xmi:id="_dVoGsr_JEe6Mo_-4--GvQg"/> | ||
453 | </children> | ||
454 | <styles xmi:type="notation:SortingStyle" xmi:id="_ZcJTsr_JEe6Mo_-4--GvQg"/> | ||
455 | <styles xmi:type="notation:FilteringStyle" xmi:id="_ZcJTs7_JEe6Mo_-4--GvQg"/> | ||
456 | </children> | ||
457 | <styles xmi:type="notation:ShapeStyle" xmi:id="_ZcIsob_JEe6Mo_-4--GvQg" fontName="Noto Sans" fontHeight="8"/> | ||
458 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZcIsor_JEe6Mo_-4--GvQg" x="131" y="20" width="120" height="100"/> | ||
459 | </children> | ||
460 | <children xmi:type="notation:Node" xmi:id="_aq0Q0L_KEe6Mo_-4--GvQg" type="2003" element="_aqfgsL_KEe6Mo_-4--GvQg"> | ||
461 | <children xmi:type="notation:Node" xmi:id="_aq0Q07_KEe6Mo_-4--GvQg" type="5007"/> | ||
462 | <children xmi:type="notation:Node" xmi:id="_aq0Q1L_KEe6Mo_-4--GvQg" type="7004"> | ||
463 | <children xmi:type="notation:Node" xmi:id="_cWM0kL_KEe6Mo_-4--GvQg" type="3010" element="_cV-yIL_KEe6Mo_-4--GvQg"> | ||
464 | <styles xmi:type="notation:FontStyle" xmi:id="_cWM0kb_KEe6Mo_-4--GvQg" fontName="Noto Sans" fontHeight="8"/> | ||
465 | <layoutConstraint xmi:type="notation:Location" xmi:id="_cWM0kr_KEe6Mo_-4--GvQg"/> | ||
466 | </children> | ||
467 | <children xmi:type="notation:Node" xmi:id="_cru_sL_KEe6Mo_-4--GvQg" type="3010" element="_crhkUL_KEe6Mo_-4--GvQg"> | ||
468 | <styles xmi:type="notation:FontStyle" xmi:id="_cru_sb_KEe6Mo_-4--GvQg" fontName="Noto Sans" fontHeight="8"/> | ||
469 | <layoutConstraint xmi:type="notation:Location" xmi:id="_cru_sr_KEe6Mo_-4--GvQg"/> | ||
470 | </children> | ||
471 | <children xmi:type="notation:Node" xmi:id="_c7vxoL_KEe6Mo_-4--GvQg" type="3010" element="_c7jkYL_KEe6Mo_-4--GvQg"> | ||
472 | <styles xmi:type="notation:FontStyle" xmi:id="_c7vxob_KEe6Mo_-4--GvQg" fontName="Noto Sans" fontHeight="8"/> | ||
473 | <layoutConstraint xmi:type="notation:Location" xmi:id="_c7vxor_KEe6Mo_-4--GvQg"/> | ||
474 | </children> | ||
475 | <styles xmi:type="notation:SortingStyle" xmi:id="_aq0Q1b_KEe6Mo_-4--GvQg"/> | ||
476 | <styles xmi:type="notation:FilteringStyle" xmi:id="_aq0Q1r_KEe6Mo_-4--GvQg"/> | ||
477 | </children> | ||
478 | <styles xmi:type="notation:ShapeStyle" xmi:id="_aq0Q0b_KEe6Mo_-4--GvQg" fontName="Noto Sans" fontHeight="8"/> | ||
479 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_aq0Q0r_KEe6Mo_-4--GvQg" x="131" y="716" width="120" height="100"/> | ||
480 | </children> | ||
435 | <styles xmi:type="notation:DiagramStyle" xmi:id="_CsZB8qA4EeuqkpDnuik1sg"/> | 481 | <styles xmi:type="notation:DiagramStyle" xmi:id="_CsZB8qA4EeuqkpDnuik1sg"/> |
436 | <edges xmi:type="notation:Edge" xmi:id="_4eaYwKA8EeuqkpDnuik1sg" type="4001" element="_4eU5TqA8EeuqkpDnuik1sg" source="_D1D6MKA4EeuqkpDnuik1sg" target="_xsq_MKA8EeuqkpDnuik1sg"> | 482 | <edges xmi:type="notation:Edge" xmi:id="_4eaYwKA8EeuqkpDnuik1sg" type="4001" element="_4eU5TqA8EeuqkpDnuik1sg" source="_D1D6MKA4EeuqkpDnuik1sg" target="_xsq_MKA8EeuqkpDnuik1sg"> |
437 | <children xmi:type="notation:Node" xmi:id="_4ea_06A8EeuqkpDnuik1sg" type="6001"> | 483 | <children xmi:type="notation:Node" xmi:id="_4ea_06A8EeuqkpDnuik1sg" type="6001"> |
@@ -675,18 +721,18 @@ | |||
675 | </edges> | 721 | </edges> |
676 | <edges xmi:type="notation:Edge" xmi:id="_zKMY0AGyEey7cfH5K6RyCw" type="4001" element="_zJpmRgGyEey7cfH5K6RyCw" source="_pdJrwAGyEey7cfH5K6RyCw" target="_xsq_MKA8EeuqkpDnuik1sg"> | 722 | <edges xmi:type="notation:Edge" xmi:id="_zKMY0AGyEey7cfH5K6RyCw" type="4001" element="_zJpmRgGyEey7cfH5K6RyCw" source="_pdJrwAGyEey7cfH5K6RyCw" target="_xsq_MKA8EeuqkpDnuik1sg"> |
677 | <children xmi:type="notation:Node" xmi:id="_zKM_4AGyEey7cfH5K6RyCw" type="6001"> | 723 | <children xmi:type="notation:Node" xmi:id="_zKM_4AGyEey7cfH5K6RyCw" type="6001"> |
678 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zKM_4QGyEey7cfH5K6RyCw" x="-400" y="-16"/> | 724 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zKM_4QGyEey7cfH5K6RyCw" x="-397" y="-12"/> |
679 | </children> | 725 | </children> |
680 | <children xmi:type="notation:Node" xmi:id="_zKM_4gGyEey7cfH5K6RyCw" type="6002"> | 726 | <children xmi:type="notation:Node" xmi:id="_zKM_4gGyEey7cfH5K6RyCw" type="6002"> |
681 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zKM_4wGyEey7cfH5K6RyCw" x="-23"/> | 727 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zKM_4wGyEey7cfH5K6RyCw" x="-43"/> |
682 | </children> | 728 | </children> |
683 | <children xmi:type="notation:Node" xmi:id="_zKM_5AGyEey7cfH5K6RyCw" type="6003"> | 729 | <children xmi:type="notation:Node" xmi:id="_zKM_5AGyEey7cfH5K6RyCw" type="6003"> |
684 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zKM_5QGyEey7cfH5K6RyCw" x="-84" y="10"/> | 730 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zKM_5QGyEey7cfH5K6RyCw" x="-88" y="10"/> |
685 | </children> | 731 | </children> |
686 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_zKMY0QGyEey7cfH5K6RyCw" routing="Rectilinear"/> | 732 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_zKMY0QGyEey7cfH5K6RyCw" routing="Rectilinear"/> |
687 | <styles xmi:type="notation:FontStyle" xmi:id="_zKMY0gGyEey7cfH5K6RyCw" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> | 733 | <styles xmi:type="notation:FontStyle" xmi:id="_zKMY0gGyEey7cfH5K6RyCw" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> |
688 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_zKMY0wGyEey7cfH5K6RyCw" points="[-84, -5, -852, 120]$[-84, -53, -852, 72]$[804, -53, 36, 72]$[804, -99, 36, 26]"/> | 734 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_zKMY0wGyEey7cfH5K6RyCw" points="[-21, -3, -828, 120]$[-21, -51, -828, 72]$[843, -51, 36, 72]$[843, -97, 36, 26]"/> |
689 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_zKNm8AGyEey7cfH5K6RyCw" id="(0.8275862068965517,0.05102040816326531)"/> | 735 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_zKNm8AGyEey7cfH5K6RyCw" id="(0.4576271186440678,0.030612244897959183)"/> |
690 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_zKNm8QGyEey7cfH5K6RyCw" id="(0.0,0.7346938775510204)"/> | 736 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_zKNm8QGyEey7cfH5K6RyCw" id="(0.0,0.7346938775510204)"/> |
691 | </edges> | 737 | </edges> |
692 | <edges xmi:type="notation:Edge" xmi:id="_vd7aQKA9EeuqkpDnuik1sg" type="4001" element="_vdptgqA9EeuqkpDnuik1sg" source="_QUDYMKA9EeuqkpDnuik1sg" target="_e73WIKA9EeuqkpDnuik1sg"> | 738 | <edges xmi:type="notation:Edge" xmi:id="_vd7aQKA9EeuqkpDnuik1sg" type="4001" element="_vdptgqA9EeuqkpDnuik1sg" source="_QUDYMKA9EeuqkpDnuik1sg" target="_e73WIKA9EeuqkpDnuik1sg"> |
@@ -750,7 +796,7 @@ | |||
750 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_s7wgoQGyEey7cfH5K6RyCw" routing="Tree"/> | 796 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_s7wgoQGyEey7cfH5K6RyCw" routing="Tree"/> |
751 | <styles xmi:type="notation:FontStyle" xmi:id="_s7wgogGyEey7cfH5K6RyCw" fontName="Noto Sans" fontHeight="8"/> | 797 | <styles xmi:type="notation:FontStyle" xmi:id="_s7wgogGyEey7cfH5K6RyCw" fontName="Noto Sans" fontHeight="8"/> |
752 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s7wgowGyEey7cfH5K6RyCw" points="[0, -6, -654, 192]$[0, -30, -654, 168]$[655, -30, 1, 168]$[655, -100, 1, 98]"/> | 798 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_s7wgowGyEey7cfH5K6RyCw" points="[0, -6, -654, 192]$[0, -30, -654, 168]$[655, -30, 1, 168]$[655, -100, 1, 98]"/> |
753 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s71ZIAGyEey7cfH5K6RyCw" id="(0.5310344827586206,0.061224489795918366)"/> | 799 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s71ZIAGyEey7cfH5K6RyCw" id="(0.652542372881356,0.0)"/> |
754 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s71ZIQGyEey7cfH5K6RyCw" id="(0.5,0.0)"/> | 800 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_s71ZIQGyEey7cfH5K6RyCw" id="(0.5,0.0)"/> |
755 | </edges> | 801 | </edges> |
756 | <edges xmi:type="notation:Edge" xmi:id="_s4W8oCtaEeySS4mYSornnA" type="4001" element="_mzziwKA9EeuqkpDnuik1sg" source="_A9YrQCrZEeyyC-O0_LlY9w" target="_e73WIKA9EeuqkpDnuik1sg"> | 802 | <edges xmi:type="notation:Edge" xmi:id="_s4W8oCtaEeySS4mYSornnA" type="4001" element="_mzziwKA9EeuqkpDnuik1sg" source="_A9YrQCrZEeyyC-O0_LlY9w" target="_e73WIKA9EeuqkpDnuik1sg"> |
@@ -1332,10 +1378,18 @@ | |||
1332 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | 1378 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> |
1333 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | 1379 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> |
1334 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | 1380 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> |
1335 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_D06wQKA4EeuqkpDnuik1sg" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> | 1381 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_fPhnkb_JEe6Mo_-4--GvQg" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> |
1336 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> | 1382 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> |
1337 | </ownedStyle> | 1383 | </ownedStyle> |
1338 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | 1384 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> |
1385 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_eplB4L_JEe6Mo_-4--GvQg" name="kind : ModuleKind = PROBLEM" tooltipText=""> | ||
1386 | <target xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//Problem/kind"/> | ||
1387 | <semanticElements xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//Problem/kind"/> | ||
1388 | <ownedStyle xmi:type="diagram:BundledImage" uid="_fPjcw7_JEe6Mo_-4--GvQg" labelAlignment="LEFT"> | ||
1389 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/> | ||
1390 | </ownedStyle> | ||
1391 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> | ||
1392 | </ownedElements> | ||
1339 | </ownedDiagramElements> | 1393 | </ownedDiagramElements> |
1340 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_JTstIKA4EeuqkpDnuik1sg" name="ClassDeclaration" tooltipText="" outgoingEdges="_jk6-PKA4EeuqkpDnuik1sg _plK3JqA9EeuqkpDnuik1sg _-XLKltawEeuymriYTNxK2g _m2GbcmTvEe2qdtyPWAtoxA _YWqZhmTzEe2qdtyPWAtoxA" width="12" height="10"> | 1394 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_JTstIKA4EeuqkpDnuik1sg" name="ClassDeclaration" tooltipText="" outgoingEdges="_jk6-PKA4EeuqkpDnuik1sg _plK3JqA9EeuqkpDnuik1sg _-XLKltawEeuymriYTNxK2g _m2GbcmTvEe2qdtyPWAtoxA _YWqZhmTzEe2qdtyPWAtoxA" width="12" height="10"> |
1341 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//ClassDeclaration"/> | 1395 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//ClassDeclaration"/> |
@@ -1728,12 +1782,12 @@ | |||
1728 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_m-6OTNXtEeuF_d0WEhR3Xw" sourceNode="_D05iIKA4EeuqkpDnuik1sg" targetNode="_RzK-YKA5EeuqkpDnuik1sg"> | 1782 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_m-6OTNXtEeuF_d0WEhR3Xw" sourceNode="_D05iIKA4EeuqkpDnuik1sg" targetNode="_RzK-YKA5EeuqkpDnuik1sg"> |
1729 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Problem"/> | 1783 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Problem"/> |
1730 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Problem"/> | 1784 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Problem"/> |
1731 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_m-61UNXtEeuF_d0WEhR3Xw" targetArrow="InputClosedArrow" routingStyle="tree"> | 1785 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_fPrYkL_JEe6Mo_-4--GvQg" targetArrow="InputClosedArrow" routingStyle="tree"> |
1732 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/> | 1786 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@style"/> |
1733 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_m-61UdXtEeuF_d0WEhR3Xw" showIcon="false"> | 1787 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_fPrYkb_JEe6Mo_-4--GvQg" showIcon="false"> |
1734 | <labelFormat>italic</labelFormat> | 1788 | <labelFormat>italic</labelFormat> |
1735 | </beginLabelStyle> | 1789 | </beginLabelStyle> |
1736 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_m-61UtXtEeuF_d0WEhR3Xw" showIcon="false"/> | 1790 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_fPrYkr_JEe6Mo_-4--GvQg" showIcon="false"/> |
1737 | </ownedStyle> | 1791 | </ownedStyle> |
1738 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> | 1792 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> |
1739 | </ownedDiagramElements> | 1793 | </ownedDiagramElements> |
@@ -1857,32 +1911,40 @@ | |||
1857 | </ownedStyle> | 1911 | </ownedStyle> |
1858 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> | 1912 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> |
1859 | </ownedDiagramElements> | 1913 | </ownedDiagramElements> |
1860 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_pcXBkAGyEey7cfH5K6RyCw" name="IndividualDeclaration" tooltipText="" outgoingEdges="_s68oXAGyEey7cfH5K6RyCw _zJpmRgGyEey7cfH5K6RyCw" width="12" height="10"> | 1914 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_pcXBkAGyEey7cfH5K6RyCw" name="NodeDeclaration" tooltipText="" outgoingEdges="_s68oXAGyEey7cfH5K6RyCw _zJpmRgGyEey7cfH5K6RyCw" width="12" height="10"> |
1861 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//IndividualDeclaration"/> | 1915 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//NodeDeclaration"/> |
1862 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//IndividualDeclaration"/> | 1916 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//NodeDeclaration"/> |
1863 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | 1917 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> |
1864 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | 1918 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> |
1865 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | 1919 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> |
1866 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_pcYPsAGyEey7cfH5K6RyCw" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> | 1920 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_vkEXpL_KEe6Mo_-4--GvQg" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> |
1867 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> | 1921 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/> |
1868 | </ownedStyle> | 1922 | </ownedStyle> |
1869 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> | 1923 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/> |
1924 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_u4PMYL_KEe6Mo_-4--GvQg" name="kind : NodeKind = NODE" tooltipText=""> | ||
1925 | <target xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//NodeDeclaration/kind"/> | ||
1926 | <semanticElements xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//NodeDeclaration/kind"/> | ||
1927 | <ownedStyle xmi:type="diagram:BundledImage" uid="_vkICAb_KEe6Mo_-4--GvQg" labelAlignment="LEFT"> | ||
1928 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/> | ||
1929 | </ownedStyle> | ||
1930 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/> | ||
1931 | </ownedElements> | ||
1870 | </ownedDiagramElements> | 1932 | </ownedDiagramElements> |
1871 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_s68oXAGyEey7cfH5K6RyCw" sourceNode="_pcXBkAGyEey7cfH5K6RyCw" targetNode="_e7ydoKA9EeuqkpDnuik1sg"> | 1933 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_s68oXAGyEey7cfH5K6RyCw" sourceNode="_pcXBkAGyEey7cfH5K6RyCw" targetNode="_e7ydoKA9EeuqkpDnuik1sg"> |
1872 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//IndividualDeclaration"/> | 1934 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//NodeDeclaration"/> |
1873 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//IndividualDeclaration"/> | 1935 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//NodeDeclaration"/> |
1874 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_s69PYAGyEey7cfH5K6RyCw" lineStyle="dash" targetArrow="InputClosedArrow" routingStyle="tree"> | 1936 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_vkQk5r_KEe6Mo_-4--GvQg" lineStyle="dash" targetArrow="InputClosedArrow" routingStyle="tree"> |
1875 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@conditionnalStyles.0/@style"/> | 1937 | <description xmi:type="style:EdgeStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']/@conditionnalStyles.0/@style"/> |
1876 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_s69PYQGyEey7cfH5K6RyCw" showIcon="false"> | 1938 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_vkQk57_KEe6Mo_-4--GvQg" showIcon="false"> |
1877 | <labelFormat>italic</labelFormat> | 1939 | <labelFormat>italic</labelFormat> |
1878 | </beginLabelStyle> | 1940 | </beginLabelStyle> |
1879 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_s69PYgGyEey7cfH5K6RyCw" showIcon="false"/> | 1941 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_vkQk6L_KEe6Mo_-4--GvQg" showIcon="false"/> |
1880 | </ownedStyle> | 1942 | </ownedStyle> |
1881 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> | 1943 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC%20ESupertypes']"/> |
1882 | </ownedDiagramElements> | 1944 | </ownedDiagramElements> |
1883 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_zJpmRgGyEey7cfH5K6RyCw" name="[0..*] nodes" sourceNode="_pcXBkAGyEey7cfH5K6RyCw" targetNode="_xsYrUKA8EeuqkpDnuik1sg"> | 1945 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_zJpmRgGyEey7cfH5K6RyCw" name="[0..*] nodes" sourceNode="_pcXBkAGyEey7cfH5K6RyCw" targetNode="_xsYrUKA8EeuqkpDnuik1sg"> |
1884 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//IndividualDeclaration/nodes"/> | 1946 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//NodeDeclaration/nodes"/> |
1885 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//IndividualDeclaration/nodes"/> | 1947 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//NodeDeclaration/nodes"/> |
1886 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_zJqNUAGyEey7cfH5K6RyCw" description="_L-JhMKA4EeuqkpDnuik1sg" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0"> | 1948 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_zJqNUAGyEey7cfH5K6RyCw" description="_L-JhMKA4EeuqkpDnuik1sg" sourceArrow="FillDiamond" routingStyle="manhattan" strokeColor="0,0,0"> |
1887 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_zJqNUgGyEey7cfH5K6RyCw" showIcon="false"> | 1949 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_zJqNUgGyEey7cfH5K6RyCw" showIcon="false"> |
1888 | <customFeatures>labelSize</customFeatures> | 1950 | <customFeatures>labelSize</customFeatures> |
@@ -2560,6 +2622,68 @@ | |||
2560 | </ownedStyle> | 2622 | </ownedStyle> |
2561 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> | 2623 | <actualMapping xmi:type="description_1:EdgeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@edgeMappings[name='EC_EReference']"/> |
2562 | </ownedDiagramElements> | 2624 | </ownedDiagramElements> |
2625 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_ZbwSIL_JEe6Mo_-4--GvQg" name="ModuleKind" tooltipText="" width="12" height="10"> | ||
2626 | <target xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//ModuleKind"/> | ||
2627 | <semanticElements xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//ModuleKind"/> | ||
2628 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
2629 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
2630 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
2631 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_Zbw5ML_JEe6Mo_-4--GvQg" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="221,236,202"> | ||
2632 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@style"/> | ||
2633 | </ownedStyle> | ||
2634 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']"/> | ||
2635 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_csN9UL_JEe6Mo_-4--GvQg" name="PROBLEM" tooltipText=""> | ||
2636 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ModuleKind/PROBLEM"/> | ||
2637 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ModuleKind/PROBLEM"/> | ||
2638 | <ownedStyle xmi:type="diagram:BundledImage" uid="_csN9Ub_JEe6Mo_-4--GvQg" labelAlignment="LEFT"> | ||
2639 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/> | ||
2640 | </ownedStyle> | ||
2641 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | ||
2642 | </ownedElements> | ||
2643 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_dVQTQL_JEe6Mo_-4--GvQg" name="MODULE" tooltipText=""> | ||
2644 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ModuleKind/MODULE"/> | ||
2645 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ModuleKind/MODULE"/> | ||
2646 | <ownedStyle xmi:type="diagram:BundledImage" uid="_dVQ6UL_JEe6Mo_-4--GvQg" labelAlignment="LEFT"> | ||
2647 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/> | ||
2648 | </ownedStyle> | ||
2649 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | ||
2650 | </ownedElements> | ||
2651 | </ownedDiagramElements> | ||
2652 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_aqfgsL_KEe6Mo_-4--GvQg" name="NodeKind" tooltipText="" width="12" height="10"> | ||
2653 | <target xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//NodeKind"/> | ||
2654 | <semanticElements xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//NodeKind"/> | ||
2655 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
2656 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
2657 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
2658 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_aqfgsb_KEe6Mo_-4--GvQg" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="221,236,202"> | ||
2659 | <description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@style"/> | ||
2660 | </ownedStyle> | ||
2661 | <actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']"/> | ||
2662 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_cV-yIL_KEe6Mo_-4--GvQg" name="NODE" tooltipText=""> | ||
2663 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//NodeKind/NODE"/> | ||
2664 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//NodeKind/NODE"/> | ||
2665 | <ownedStyle xmi:type="diagram:BundledImage" uid="_cV-yIb_KEe6Mo_-4--GvQg" labelAlignment="LEFT"> | ||
2666 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/> | ||
2667 | </ownedStyle> | ||
2668 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | ||
2669 | </ownedElements> | ||
2670 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_crhkUL_KEe6Mo_-4--GvQg" name="ATOM" tooltipText=""> | ||
2671 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//NodeKind/ATOM"/> | ||
2672 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//NodeKind/ATOM"/> | ||
2673 | <ownedStyle xmi:type="diagram:BundledImage" uid="_crhkUb_KEe6Mo_-4--GvQg" labelAlignment="LEFT"> | ||
2674 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/> | ||
2675 | </ownedStyle> | ||
2676 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | ||
2677 | </ownedElements> | ||
2678 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_c7jkYL_KEe6Mo_-4--GvQg" name="MULTI" tooltipText=""> | ||
2679 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//NodeKind/MULTI"/> | ||
2680 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//NodeKind/MULTI"/> | ||
2681 | <ownedStyle xmi:type="diagram:BundledImage" uid="_c7jkYb_KEe6Mo_-4--GvQg" labelAlignment="LEFT"> | ||
2682 | <description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']/@style"/> | ||
2683 | </ownedStyle> | ||
2684 | <actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EEnum']/@subNodeMappings[name='EC%20EEnumLiteral']"/> | ||
2685 | </ownedElements> | ||
2686 | </ownedDiagramElements> | ||
2563 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> | 2687 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> |
2564 | <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_CsWlsKA4EeuqkpDnuik1sg"/> | 2688 | <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_CsWlsKA4EeuqkpDnuik1sg"/> |
2565 | <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/> | 2689 | <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/> |
diff --git a/subprojects/language-model/src/main/resources/model/problem.ecore b/subprojects/language-model/src/main/resources/model/problem.ecore index 74229a89..aa05a2fe 100644 --- a/subprojects/language-model/src/main/resources/model/problem.ecore +++ b/subprojects/language-model/src/main/resources/model/problem.ecore | |||
@@ -6,6 +6,7 @@ | |||
6 | eType="#//Node" transient="true" containment="true"/> | 6 | eType="#//Node" transient="true" containment="true"/> |
7 | <eStructuralFeatures xsi:type="ecore:EReference" name="statements" upperBound="-1" | 7 | <eStructuralFeatures xsi:type="ecore:EReference" name="statements" upperBound="-1" |
8 | eType="#//Statement" containment="true"/> | 8 | eType="#//Statement" containment="true"/> |
9 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" eType="#//ModuleKind"/> | ||
9 | </eClassifiers> | 10 | </eClassifiers> |
10 | <eClassifiers xsi:type="ecore:EClass" name="ClassDeclaration" eSuperTypes="#//Statement #//Relation"> | 11 | <eClassifiers xsi:type="ecore:EClass" name="ClassDeclaration" eSuperTypes="#//Statement #//Relation"> |
11 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="abstract" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> | 12 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="abstract" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/> |
@@ -109,9 +110,10 @@ | |||
109 | <eStructuralFeatures xsi:type="ecore:EReference" name="node" eType="#//Node"/> | 110 | <eStructuralFeatures xsi:type="ecore:EReference" name="node" eType="#//Node"/> |
110 | </eClassifiers> | 111 | </eClassifiers> |
111 | <eClassifiers xsi:type="ecore:EClass" name="AssertionArgument" abstract="true"/> | 112 | <eClassifiers xsi:type="ecore:EClass" name="AssertionArgument" abstract="true"/> |
112 | <eClassifiers xsi:type="ecore:EClass" name="IndividualDeclaration" eSuperTypes="#//Statement"> | 113 | <eClassifiers xsi:type="ecore:EClass" name="NodeDeclaration" eSuperTypes="#//Statement"> |
113 | <eStructuralFeatures xsi:type="ecore:EReference" name="nodes" upperBound="-1" | 114 | <eStructuralFeatures xsi:type="ecore:EReference" name="nodes" upperBound="-1" |
114 | eType="#//Node" containment="true"/> | 115 | eType="#//Node" containment="true"/> |
116 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" eType="#//NodeKind"/> | ||
115 | </eClassifiers> | 117 | </eClassifiers> |
116 | <eClassifiers xsi:type="ecore:EClass" name="WildcardAssertionArgument" eSuperTypes="#//AssertionArgument"/> | 118 | <eClassifiers xsi:type="ecore:EClass" name="WildcardAssertionArgument" eSuperTypes="#//AssertionArgument"/> |
117 | <eClassifiers xsi:type="ecore:EClass" name="ParametricDefinition" abstract="true" | 119 | <eClassifiers xsi:type="ecore:EClass" name="ParametricDefinition" abstract="true" |
@@ -259,4 +261,13 @@ | |||
259 | <eClassifiers xsi:type="ecore:EClass" name="LogicConstant" eSuperTypes="#//Constant"> | 261 | <eClassifiers xsi:type="ecore:EClass" name="LogicConstant" eSuperTypes="#//Constant"> |
260 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="logicValue" eType="#//LogicValue"/> | 262 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="logicValue" eType="#//LogicValue"/> |
261 | </eClassifiers> | 263 | </eClassifiers> |
264 | <eClassifiers xsi:type="ecore:EEnum" name="ModuleKind"> | ||
265 | <eLiterals name="PROBLEM"/> | ||
266 | <eLiterals name="MODULE" value="1"/> | ||
267 | </eClassifiers> | ||
268 | <eClassifiers xsi:type="ecore:EEnum" name="NodeKind"> | ||
269 | <eLiterals name="NODE"/> | ||
270 | <eLiterals name="ATOM" value="1"/> | ||
271 | <eLiterals name="MULTI" value="2"/> | ||
272 | </eClassifiers> | ||
262 | </ecore:EPackage> | 273 | </ecore:EPackage> |
diff --git a/subprojects/language-model/src/main/resources/model/problem.genmodel b/subprojects/language-model/src/main/resources/model/problem.genmodel index b5aa81c4..be8b62eb 100644 --- a/subprojects/language-model/src/main/resources/model/problem.genmodel +++ b/subprojects/language-model/src/main/resources/model/problem.genmodel | |||
@@ -64,9 +64,19 @@ | |||
64 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//PrimitiveType/REAL"/> | 64 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//PrimitiveType/REAL"/> |
65 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//PrimitiveType/STRING"/> | 65 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//PrimitiveType/STRING"/> |
66 | </genEnums> | 66 | </genEnums> |
67 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//ModuleKind"> | ||
68 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ModuleKind/PROBLEM"/> | ||
69 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ModuleKind/MODULE"/> | ||
70 | </genEnums> | ||
71 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//NodeKind"> | ||
72 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//NodeKind/NODE"/> | ||
73 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//NodeKind/ATOM"/> | ||
74 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//NodeKind/MULTI"/> | ||
75 | </genEnums> | ||
67 | <genClasses ecoreClass="problem.ecore#//Problem"> | 76 | <genClasses ecoreClass="problem.ecore#//Problem"> |
68 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//Problem/nodes"/> | 77 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//Problem/nodes"/> |
69 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//Problem/statements"/> | 78 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//Problem/statements"/> |
79 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//Problem/kind"/> | ||
70 | </genClasses> | 80 | </genClasses> |
71 | <genClasses ecoreClass="problem.ecore#//ClassDeclaration"> | 81 | <genClasses ecoreClass="problem.ecore#//ClassDeclaration"> |
72 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//ClassDeclaration/abstract"/> | 82 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//ClassDeclaration/abstract"/> |
@@ -144,8 +154,9 @@ | |||
144 | <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//NodeAssertionArgument/node"/> | 154 | <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//NodeAssertionArgument/node"/> |
145 | </genClasses> | 155 | </genClasses> |
146 | <genClasses ecoreClass="problem.ecore#//AssertionArgument"/> | 156 | <genClasses ecoreClass="problem.ecore#//AssertionArgument"/> |
147 | <genClasses ecoreClass="problem.ecore#//IndividualDeclaration"> | 157 | <genClasses ecoreClass="problem.ecore#//NodeDeclaration"> |
148 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//IndividualDeclaration/nodes"/> | 158 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//NodeDeclaration/nodes"/> |
159 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//NodeDeclaration/kind"/> | ||
149 | </genClasses> | 160 | </genClasses> |
150 | <genClasses ecoreClass="problem.ecore#//WildcardAssertionArgument"/> | 161 | <genClasses ecoreClass="problem.ecore#//WildcardAssertionArgument"/> |
151 | <genClasses ecoreClass="problem.ecore#//ParametricDefinition"> | 162 | <genClasses ecoreClass="problem.ecore#//ParametricDefinition"> |
diff --git a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java index 38bf5a61..b462fd70 100644 --- a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java +++ b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java | |||
@@ -169,9 +169,9 @@ public class ModelInitializer { | |||
169 | 169 | ||
170 | private void collectNodes() { | 170 | private void collectNodes() { |
171 | for (var statement : problem.getStatements()) { | 171 | for (var statement : problem.getStatements()) { |
172 | if (statement instanceof IndividualDeclaration individualDeclaration) { | 172 | if (statement instanceof NodeDeclaration nodeDeclaration) { |
173 | for (var individual : individualDeclaration.getNodes()) { | 173 | for (var node : nodeDeclaration.getNodes()) { |
174 | collectNode(individual); | 174 | collectNode(node); |
175 | } | 175 | } |
176 | } else if (statement instanceof ClassDeclaration classDeclaration) { | 176 | } else if (statement instanceof ClassDeclaration classDeclaration) { |
177 | var newNode = classDeclaration.getNewNode(); | 177 | var newNode = classDeclaration.getNewNode(); |
@@ -355,10 +355,8 @@ public class ModelInitializer { | |||
355 | collectClassDeclarationAssertions(classDeclaration); | 355 | collectClassDeclarationAssertions(classDeclaration); |
356 | } else if (statement instanceof EnumDeclaration enumDeclaration) { | 356 | } else if (statement instanceof EnumDeclaration enumDeclaration) { |
357 | collectEnumAssertions(enumDeclaration); | 357 | collectEnumAssertions(enumDeclaration); |
358 | } else if (statement instanceof IndividualDeclaration individualDeclaration) { | 358 | } else if (statement instanceof NodeDeclaration nodeDeclaration) { |
359 | for (var individual : individualDeclaration.getNodes()) { | 359 | collectNodeDeclarationAssertions(nodeDeclaration); |
360 | collectIndividualAssertions(individual); | ||
361 | } | ||
362 | } else if (statement instanceof Assertion assertion) { | 360 | } else if (statement instanceof Assertion assertion) { |
363 | collectAssertion(assertion); | 361 | collectAssertion(assertion); |
364 | } | 362 | } |
@@ -379,7 +377,7 @@ public class ModelInitializer { | |||
379 | private void collectEnumAssertions(EnumDeclaration enumDeclaration) { | 377 | private void collectEnumAssertions(EnumDeclaration enumDeclaration) { |
380 | var overlay = MutableSeed.of(1, null); | 378 | var overlay = MutableSeed.of(1, null); |
381 | for (var literal : enumDeclaration.getLiterals()) { | 379 | for (var literal : enumDeclaration.getLiterals()) { |
382 | collectIndividualAssertions(literal); | 380 | collectCardinalityAssertions(literal, TruthValue.TRUE); |
383 | var nodeId = getNodeId(literal); | 381 | var nodeId = getNodeId(literal); |
384 | overlay.mergeValue(Tuple.of(nodeId), TruthValue.TRUE); | 382 | overlay.mergeValue(Tuple.of(nodeId), TruthValue.TRUE); |
385 | } | 383 | } |
@@ -387,9 +385,25 @@ public class ModelInitializer { | |||
387 | info.assertions().overwriteValues(overlay); | 385 | info.assertions().overwriteValues(overlay); |
388 | } | 386 | } |
389 | 387 | ||
390 | private void collectIndividualAssertions(Node node) { | 388 | private void collectNodeDeclarationAssertions(NodeDeclaration nodeDeclaration) { |
389 | var kind = nodeDeclaration.getKind(); | ||
390 | TruthValue value; | ||
391 | switch (kind) { | ||
392 | case ATOM -> value = TruthValue.TRUE; | ||
393 | case MULTI -> value = TruthValue.UNKNOWN; | ||
394 | case NODE -> { | ||
395 | return; | ||
396 | } | ||
397 | default -> throw new IllegalArgumentException("Unknown node kind: " + kind); | ||
398 | } | ||
399 | for (var node : nodeDeclaration.getNodes()) { | ||
400 | collectCardinalityAssertions(node, value); | ||
401 | } | ||
402 | } | ||
403 | |||
404 | private void collectCardinalityAssertions(Node node, TruthValue value) { | ||
391 | var nodeId = getNodeId(node); | 405 | var nodeId = getNodeId(node); |
392 | collectCardinalityAssertions(nodeId, TruthValue.TRUE); | 406 | collectCardinalityAssertions(nodeId, value); |
393 | } | 407 | } |
394 | 408 | ||
395 | private void collectCardinalityAssertions(int nodeId, TruthValue value) { | 409 | private void collectCardinalityAssertions(int nodeId, TruthValue value) { |
@@ -587,47 +601,51 @@ public class ModelInitializer { | |||
587 | 601 | ||
588 | private void toLiterals(Expr expr, Map<tools.refinery.language.model.problem.Variable, Variable> localScope, | 602 | private void toLiterals(Expr expr, Map<tools.refinery.language.model.problem.Variable, Variable> localScope, |
589 | List<Literal> literals) { | 603 | List<Literal> literals) { |
590 | if (expr instanceof LogicConstant logicConstant) { | 604 | switch (expr) { |
591 | switch (logicConstant.getLogicValue()) { | 605 | case LogicConstant logicConstant -> { |
592 | case TRUE -> literals.add(BooleanLiteral.TRUE); | 606 | switch (logicConstant.getLogicValue()) { |
593 | case FALSE -> literals.add(BooleanLiteral.FALSE); | 607 | case TRUE -> literals.add(BooleanLiteral.TRUE); |
594 | default -> throw new TracedException(logicConstant, "Unsupported literal"); | 608 | case FALSE -> literals.add(BooleanLiteral.FALSE); |
595 | } | 609 | default -> throw new TracedException(logicConstant, "Unsupported literal"); |
596 | } else if (expr instanceof Atom atom) { | 610 | } |
597 | var target = getPartialRelation(atom.getRelation()); | 611 | } |
598 | var polarity = atom.isTransitiveClosure() ? CallPolarity.TRANSITIVE : CallPolarity.POSITIVE; | 612 | case Atom atom -> { |
599 | var argumentList = toArgumentList(atom.getArguments(), localScope, literals); | 613 | var target = getPartialRelation(atom.getRelation()); |
600 | literals.add(target.call(polarity, argumentList)); | 614 | var polarity = atom.isTransitiveClosure() ? CallPolarity.TRANSITIVE : CallPolarity.POSITIVE; |
601 | } else if (expr instanceof NegationExpr negationExpr) { | 615 | var argumentList = toArgumentList(atom.getArguments(), localScope, literals); |
602 | var body = negationExpr.getBody(); | 616 | literals.add(target.call(polarity, argumentList)); |
603 | if (!(body instanceof Atom atom)) { | 617 | } |
604 | throw new TracedException(body, "Cannot negate literal"); | 618 | case NegationExpr negationExpr -> { |
605 | } | 619 | var body = negationExpr.getBody(); |
606 | var target = getPartialRelation(atom.getRelation()); | 620 | if (!(body instanceof Atom atom)) { |
607 | Constraint constraint; | 621 | throw new TracedException(body, "Cannot negate literal"); |
608 | if (atom.isTransitiveClosure()) { | 622 | } |
609 | constraint = Query.of(target.name() + "#transitive", (builder, p1, p2) -> builder.clause( | 623 | var target = getPartialRelation(atom.getRelation()); |
610 | target.callTransitive(p1, p2) | 624 | Constraint constraint; |
611 | )).getDnf(); | 625 | if (atom.isTransitiveClosure()) { |
612 | } else { | 626 | constraint = Query.of(target.name() + "#transitive", (builder, p1, p2) -> builder.clause( |
613 | constraint = target; | 627 | target.callTransitive(p1, p2) |
614 | } | 628 | )).getDnf(); |
615 | var negatedScope = extendScope(localScope, negationExpr.getImplicitVariables()); | 629 | } else { |
616 | var argumentList = toArgumentList(atom.getArguments(), negatedScope, literals); | 630 | constraint = target; |
617 | literals.add(constraint.call(CallPolarity.NEGATIVE, argumentList)); | 631 | } |
618 | } else if (expr instanceof ComparisonExpr comparisonExpr) { | 632 | var negatedScope = extendScope(localScope, negationExpr.getImplicitVariables()); |
619 | var argumentList = toArgumentList(List.of(comparisonExpr.getLeft(), comparisonExpr.getRight()), | 633 | var argumentList = toArgumentList(atom.getArguments(), negatedScope, literals); |
620 | localScope, literals); | 634 | literals.add(constraint.call(CallPolarity.NEGATIVE, argumentList)); |
621 | boolean positive = switch (comparisonExpr.getOp()) { | 635 | } |
622 | case EQ -> true; | 636 | case ComparisonExpr comparisonExpr -> { |
623 | case NOT_EQ -> false; | 637 | var argumentList = toArgumentList(List.of(comparisonExpr.getLeft(), comparisonExpr.getRight()), |
624 | default -> throw new TracedException( | 638 | localScope, literals); |
625 | comparisonExpr, "Unsupported operator"); | 639 | boolean positive = switch (comparisonExpr.getOp()) { |
626 | }; | 640 | case EQ -> true; |
627 | literals.add(new EquivalenceLiteral(positive, argumentList.get(0), argumentList.get(1))); | 641 | case NOT_EQ -> false; |
628 | } else { | 642 | default -> throw new TracedException( |
629 | throw new TracedException(expr, "Unsupported literal"); | 643 | comparisonExpr, "Unsupported operator"); |
630 | } | 644 | }; |
645 | literals.add(new EquivalenceLiteral(positive, argumentList.get(0), argumentList.get(1))); | ||
646 | } | ||
647 | default -> throw new TracedException(expr, "Unsupported literal"); | ||
648 | } | ||
631 | } | 649 | } |
632 | 650 | ||
633 | private List<Variable> toArgumentList( | 651 | private List<Variable> toArgumentList( |
diff --git a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SolutionSerializer.java b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SolutionSerializer.java index 09ba34fc..537d94ca 100644 --- a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SolutionSerializer.java +++ b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SolutionSerializer.java | |||
@@ -197,9 +197,10 @@ public class SolutionSerializer { | |||
197 | var originalNode = pair.getOne(); | 197 | var originalNode = pair.getOne(); |
198 | int nodeId = pair.getTwo(); | 198 | int nodeId = pair.getTwo(); |
199 | var newNode = findNode(originalNode); | 199 | var newNode = findNode(originalNode); |
200 | // Since all implicit nodes that do not exist has already been remove in serializeSolution, | 200 | // Since all implicit nodes that do not exist has already been removed in serializeSolution, |
201 | // we only need to add !exists assertions to ::new nodes (nodes marked as an individual must always exist). | 201 | // we only need to add !exists assertions to ::new nodes and explicitly declared nodes that do not exist. |
202 | if (ProblemUtil.isNewNode(originalNode)) { | 202 | if (ProblemUtil.isMultiNode(originalNode) || |
203 | (ProblemUtil.isDeclaredNode(originalNode) && !isExistingNode(nodeId))) { | ||
203 | sortedNewNodes.put(nodeId, newNode); | 204 | sortedNewNodes.put(nodeId, newNode); |
204 | } else { | 205 | } else { |
205 | nodes.put(nodeId, newNode); | 206 | nodes.put(nodeId, newNode); |
diff --git a/subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/SolutionSerializerTest.java b/subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/SolutionSerializerTest.java index 8ef449b0..b682a7d6 100644 --- a/subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/SolutionSerializerTest.java +++ b/subprojects/language-semantics/src/test/java/tools/refinery/language/semantics/SolutionSerializerTest.java | |||
@@ -183,6 +183,49 @@ class SolutionSerializerTest { | |||
183 | !exists(Foo::new). | 183 | !exists(Foo::new). |
184 | Foo(a). | 184 | Foo(a). |
185 | default !ref(*, *). | 185 | default !ref(*, *). |
186 | """), Arguments.of(""" | ||
187 | atom a. | ||
188 | class Foo. | ||
189 | """, """ | ||
190 | Foo(a). | ||
191 | scope Foo += 0. | ||
192 | """, """ | ||
193 | !exists(Foo::new). | ||
194 | Foo(a). | ||
195 | """), Arguments.of(""" | ||
196 | multi a. | ||
197 | class Foo. | ||
198 | """, """ | ||
199 | Foo(a). | ||
200 | !exists(Foo::new). | ||
201 | scope Foo = 2. | ||
202 | """, """ | ||
203 | !exists(a). | ||
204 | !exists(Foo::new). | ||
205 | Foo(foo1). | ||
206 | Foo(foo2). | ||
207 | """), Arguments.of(""" | ||
208 | node a. | ||
209 | class Foo. | ||
210 | """, """ | ||
211 | Foo(a). | ||
212 | ?exists(a). | ||
213 | scope Foo = 2, Foo += 1. | ||
214 | """, """ | ||
215 | !exists(Foo::new). | ||
216 | Foo(a). | ||
217 | Foo(foo1). | ||
218 | """), Arguments.of(""" | ||
219 | node a. | ||
220 | class Foo. | ||
221 | """, """ | ||
222 | Foo(a). | ||
223 | ?exists(a). | ||
224 | scope Foo = 1, Foo += 1. | ||
225 | """, """ | ||
226 | !exists(a). | ||
227 | !exists(Foo::new). | ||
228 | Foo(foo1). | ||
186 | """)); | 229 | """)); |
187 | } | 230 | } |
188 | } | 231 | } |
diff --git a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/metadata/MetadataCreator.java b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/metadata/MetadataCreator.java index f05abc45..1f49b0d0 100644 --- a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/metadata/MetadataCreator.java +++ b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/metadata/MetadataCreator.java | |||
@@ -87,14 +87,12 @@ public class MetadataCreator { | |||
87 | } | 87 | } |
88 | 88 | ||
89 | private NodeKind getNodeKind(Node node) { | 89 | private NodeKind getNodeKind(Node node) { |
90 | if (ProblemUtil.isImplicitNode(node)) { | 90 | if (ProblemUtil.isAtomNode(node)) { |
91 | return NodeKind.IMPLICIT; | ||
92 | } else if (ProblemUtil.isIndividualNode(node)) { | ||
93 | return NodeKind.INDIVIDUAL; | 91 | return NodeKind.INDIVIDUAL; |
94 | } else if (ProblemUtil.isNewNode(node)) { | 92 | } else if (ProblemUtil.isMultiNode(node)) { |
95 | return NodeKind.NEW; | 93 | return NodeKind.NEW; |
96 | } else { | 94 | } else { |
97 | throw new TracedException(node, "Unknown node type"); | 95 | return NodeKind.IMPLICIT; |
98 | } | 96 | } |
99 | } | 97 | } |
100 | 98 | ||
diff --git a/subprojects/language-web/src/test/java/tools/refinery/language/web/ProblemWebSocketServletIntegrationTest.java b/subprojects/language-web/src/test/java/tools/refinery/language/web/ProblemWebSocketServletIntegrationTest.java index 889a55cb..dd5d8a03 100644 --- a/subprojects/language-web/src/test/java/tools/refinery/language/web/ProblemWebSocketServletIntegrationTest.java +++ b/subprojects/language-web/src/test/java/tools/refinery/language/web/ProblemWebSocketServletIntegrationTest.java | |||
@@ -129,7 +129,7 @@ class ProblemWebSocketServletIntegrationTest { | |||
129 | case 4 -> //noinspection TextBlockMigration | 129 | case 4 -> //noinspection TextBlockMigration |
130 | session.sendText( | 130 | session.sendText( |
131 | "{\"id\":\"bar\",\"request\":{\"resource\":\"test.problem\",\"serviceType\":\"update\"," + | 131 | "{\"id\":\"bar\",\"request\":{\"resource\":\"test.problem\",\"serviceType\":\"update\"," + |
132 | "\"requiredStateId\":\"-80000000\",\"deltaText\":\"indiv q.\nnode(q).\n\"," + | 132 | "\"requiredStateId\":\"-80000000\",\"deltaText\":\"atom q.\nnode(q).\n\"," + |
133 | "\"deltaOffset\":\"0\",\"deltaReplaceLength\":\"0\"}}", | 133 | "\"deltaOffset\":\"0\",\"deltaReplaceLength\":\"0\"}}", |
134 | Callback.NOOP | 134 | Callback.NOOP |
135 | ); | 135 | ); |
diff --git a/subprojects/language-web/src/test/java/tools/refinery/language/web/xtext/servlet/TransactionExecutorTest.java b/subprojects/language-web/src/test/java/tools/refinery/language/web/xtext/servlet/TransactionExecutorTest.java index 22ce1b47..265723ff 100644 --- a/subprojects/language-web/src/test/java/tools/refinery/language/web/xtext/servlet/TransactionExecutorTest.java +++ b/subprojects/language-web/src/test/java/tools/refinery/language/web/xtext/servlet/TransactionExecutorTest.java | |||
@@ -97,7 +97,7 @@ class TransactionExecutorTest { | |||
97 | var stateId = updateFullText(); | 97 | var stateId = updateFullText(); |
98 | var responseHandler = sendRequestAndWaitForAllResponses( | 98 | var responseHandler = sendRequestAndWaitForAllResponses( |
99 | new XtextWebRequest("bar", Map.of("resource", RESOURCE_NAME, "serviceType", "update", "requiredStateId", | 99 | new XtextWebRequest("bar", Map.of("resource", RESOURCE_NAME, "serviceType", "update", "requiredStateId", |
100 | stateId, "deltaText", "indiv q.\nnode(q).\n", "deltaOffset", "0", "deltaReplaceLength", | 100 | stateId, "deltaText", "atom q.\nnode(q).\n", "deltaOffset", "0", "deltaReplaceLength", |
101 | "0"))); | 101 | "0"))); |
102 | 102 | ||
103 | var captor = newCaptor(); | 103 | var captor = newCaptor(); |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/GenerateProblem.mwe2 b/subprojects/language/src/main/java/tools/refinery/language/GenerateProblem.mwe2 index 59eba8f7..863e55d4 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/GenerateProblem.mwe2 +++ b/subprojects/language/src/main/java/tools/refinery/language/GenerateProblem.mwe2 | |||
@@ -51,7 +51,7 @@ Workflow { | |||
51 | 51 | ||
52 | language = StandardLanguage { | 52 | language = StandardLanguage { |
53 | name = 'tools.refinery.language.Problem' | 53 | name = 'tools.refinery.language.Problem' |
54 | fileExtensions = 'problem' | 54 | fileExtensions = 'refinery,problem' |
55 | referencedResource = 'platform:/resource/tools.refinery.refinery-language-model/model/problem.genmodel' | 55 | referencedResource = 'platform:/resource/tools.refinery.refinery-language-model/model/problem.genmodel' |
56 | serializer = { | 56 | serializer = { |
57 | generateStub = false | 57 | generateStub = false |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/Problem.xtext b/subprojects/language/src/main/java/tools/refinery/language/Problem.xtext index 0fb96954..c5c42ebe 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/Problem.xtext +++ b/subprojects/language/src/main/java/tools/refinery/language/Problem.xtext | |||
@@ -9,13 +9,16 @@ import "http://www.eclipse.org/emf/2002/Ecore" as ecore | |||
9 | import "https://refinery.tools/emf/2021/Problem" | 9 | import "https://refinery.tools/emf/2021/Problem" |
10 | 10 | ||
11 | Problem: | 11 | Problem: |
12 | ("problem" name=Identifier ".")? | 12 | (kind=ModuleKind name=QualifiedName? ".")? |
13 | statements+=Statement*; | 13 | statements+=Statement*; |
14 | 14 | ||
15 | enum ModuleKind: | ||
16 | PROBLEM="problem" | MODULE="module"; | ||
17 | |||
15 | Statement: | 18 | Statement: |
16 | Assertion | ClassDeclaration | EnumDeclaration | | 19 | Assertion | ClassDeclaration | EnumDeclaration | |
17 | PredicateDefinition | /* FunctionDefinition | RuleDefinition | */ | 20 | PredicateDefinition | /* FunctionDefinition | RuleDefinition | */ |
18 | ScopeDeclaration | IndividualDeclaration; | 21 | ScopeDeclaration | NodeDeclaration; |
19 | 22 | ||
20 | ClassDeclaration: | 23 | ClassDeclaration: |
21 | abstract?="abstract"? "class" | 24 | abstract?="abstract"? "class" |
@@ -252,8 +255,11 @@ RangeMultiplicity: | |||
252 | ExactMultiplicity: | 255 | ExactMultiplicity: |
253 | exactValue=INT; | 256 | exactValue=INT; |
254 | 257 | ||
255 | IndividualDeclaration: | 258 | NodeDeclaration: |
256 | "indiv" nodes+=EnumLiteral ("," nodes+=EnumLiteral)* "."; | 259 | kind=NodeKind nodes+=EnumLiteral ("," nodes+=EnumLiteral)* "."; |
260 | |||
261 | enum NodeKind: | ||
262 | NODE="node" | ATOM="atom" | MULTI="multi"; | ||
257 | 263 | ||
258 | UpperBound returns ecore::EInt: | 264 | UpperBound returns ecore::EInt: |
259 | INT | "*"; | 265 | INT | "*"; |
@@ -268,7 +274,8 @@ Identifier: | |||
268 | NonContainmentIdentifier | "contains" | "container"; | 274 | NonContainmentIdentifier | "contains" | "container"; |
269 | 275 | ||
270 | NonContainmentIdentifier: | 276 | NonContainmentIdentifier: |
271 | ID | "contained" | "sum" | "prod" | "min" | "max"; | 277 | ID | "node" | "atom" | "multi" | "contained" | |
278 | "sum" | "prod" | "min" | "max" | "problem" | "module"; | ||
272 | 279 | ||
273 | Real returns ecore::EDouble: | 280 | Real returns ecore::EDouble: |
274 | EXPONENTIAL | INT "." (INT | EXPONENTIAL); | 281 | EXPONENTIAL | INT "." (INT | EXPONENTIAL); |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java b/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java index 0f3bd3ee..0b87e8bb 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java +++ b/subprojects/language/src/main/java/tools/refinery/language/formatting2/ProblemFormatter.java | |||
@@ -23,7 +23,7 @@ public class ProblemFormatter extends AbstractJavaFormatter { | |||
23 | protected void format(Problem problem, IFormattableDocument doc) { | 23 | protected void format(Problem problem, IFormattableDocument doc) { |
24 | doc.prepend(problem, this::noSpace); | 24 | doc.prepend(problem, this::noSpace); |
25 | var region = regionFor(problem); | 25 | var region = regionFor(problem); |
26 | doc.append(region.keyword("problem"), this::oneSpace); | 26 | doc.append(region.feature(ProblemPackage.Literals.PROBLEM__KIND), this::oneSpace); |
27 | doc.prepend(region.keyword("."), this::noSpace); | 27 | doc.prepend(region.keyword("."), this::noSpace); |
28 | appendNewLines(doc, region.keyword("."), this::twoNewLines); | 28 | appendNewLines(doc, region.keyword("."), this::twoNewLines); |
29 | for (var statement : problem.getStatements()) { | 29 | for (var statement : problem.getStatements()) { |
@@ -132,10 +132,10 @@ public class ProblemFormatter extends AbstractJavaFormatter { | |||
132 | } | 132 | } |
133 | } | 133 | } |
134 | 134 | ||
135 | protected void format(IndividualDeclaration individualDeclaration, IFormattableDocument doc) { | 135 | protected void format(NodeDeclaration nodeDeclaration, IFormattableDocument doc) { |
136 | surroundNewLines(doc, individualDeclaration, this::singleNewLine); | 136 | surroundNewLines(doc, nodeDeclaration, this::singleNewLine); |
137 | var region = regionFor(individualDeclaration); | 137 | var region = regionFor(nodeDeclaration); |
138 | doc.append(region.keyword("indiv"), this::oneSpace); | 138 | doc.append(region.feature(ProblemPackage.Literals.NODE_DECLARATION__KIND), this::oneSpace); |
139 | formatList(region, ",", doc); | 139 | formatList(region, ",", doc); |
140 | doc.prepend(region.keyword("."), this::noSpace); | 140 | doc.prepend(region.keyword("."), this::noSpace); |
141 | } | 141 | } |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/resource/ProblemLocationInFileProvider.java b/subprojects/language/src/main/java/tools/refinery/language/resource/ProblemLocationInFileProvider.java index 29eaad84..c81431e5 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/resource/ProblemLocationInFileProvider.java +++ b/subprojects/language/src/main/java/tools/refinery/language/resource/ProblemLocationInFileProvider.java | |||
@@ -25,10 +25,10 @@ public class ProblemLocationInFileProvider extends DefaultLocationInFileProvider | |||
25 | } | 25 | } |
26 | 26 | ||
27 | protected ITextRegion getNodeTextRegion(Node node, RegionDescription query) { | 27 | protected ITextRegion getNodeTextRegion(Node node, RegionDescription query) { |
28 | if (ProblemUtil.isIndividualNode(node)) { | 28 | if (ProblemUtil.isDeclaredNode(node)) { |
29 | return super.doGetTextRegion(node, query); | 29 | return super.doGetTextRegion(node, query); |
30 | } | 30 | } |
31 | if (ProblemUtil.isNewNode(node)) { | 31 | if (ProblemUtil.isMultiNode(node)) { |
32 | EObject container = node.eContainer(); | 32 | EObject container = node.eContainer(); |
33 | return doGetTextRegion(container, query); | 33 | return doGetTextRegion(container, query); |
34 | } | 34 | } |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/resource/ProblemResourceDescriptionStrategy.java b/subprojects/language/src/main/java/tools/refinery/language/resource/ProblemResourceDescriptionStrategy.java index c04c7d09..79dad6e7 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/resource/ProblemResourceDescriptionStrategy.java +++ b/subprojects/language/src/main/java/tools/refinery/language/resource/ProblemResourceDescriptionStrategy.java | |||
@@ -91,8 +91,7 @@ public class ProblemResourceDescriptionStrategy extends DefaultResourceDescripti | |||
91 | return false; | 91 | return false; |
92 | } | 92 | } |
93 | if (eObject instanceof Node node) { | 93 | if (eObject instanceof Node node) { |
94 | // Only enum literals and new nodes are visible across problem files. | 94 | return !ProblemUtil.isImplicitNode(node); |
95 | return ProblemUtil.isIndividualNode(node) || ProblemUtil.isNewNode(node); | ||
96 | } | 95 | } |
97 | return true; | 96 | return true; |
98 | } | 97 | } |
@@ -111,7 +110,7 @@ public class ProblemResourceDescriptionStrategy extends DefaultResourceDescripti | |||
111 | 110 | ||
112 | protected boolean shouldExportSimpleName(EObject eObject) { | 111 | protected boolean shouldExportSimpleName(EObject eObject) { |
113 | if (eObject instanceof Node node) { | 112 | if (eObject instanceof Node node) { |
114 | return !ProblemUtil.isNewNode(node); | 113 | return !ProblemUtil.isMultiNode(node); |
115 | } | 114 | } |
116 | if (eObject instanceof PredicateDefinition predicateDefinition) { | 115 | if (eObject instanceof PredicateDefinition predicateDefinition) { |
117 | return !ProblemUtil.isInvalidMultiplicityConstraint(predicateDefinition); | 116 | return !ProblemUtil.isInvalidMultiplicityConstraint(predicateDefinition); |
@@ -146,6 +145,5 @@ public class ProblemResourceDescriptionStrategy extends DefaultResourceDescripti | |||
146 | return false; | 145 | return false; |
147 | } | 146 | } |
148 | return eObject instanceof ClassDeclaration || eObject instanceof EnumDeclaration; | 147 | return eObject instanceof ClassDeclaration || eObject instanceof EnumDeclaration; |
149 | |||
150 | } | 148 | } |
151 | } | 149 | } |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/utils/ProblemUtil.java b/subprojects/language/src/main/java/tools/refinery/language/utils/ProblemUtil.java index 7b6407e1..ee0e141d 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/utils/ProblemUtil.java +++ b/subprojects/language/src/main/java/tools/refinery/language/utils/ProblemUtil.java | |||
@@ -54,14 +54,24 @@ public final class ProblemUtil { | |||
54 | return eObject instanceof PredicateDefinition predicateDefinition && predicateDefinition.isError(); | 54 | return eObject instanceof PredicateDefinition predicateDefinition && predicateDefinition.isError(); |
55 | } | 55 | } |
56 | 56 | ||
57 | public static boolean isIndividualNode(Node node) { | 57 | public static boolean isAtomNode(Node node) { |
58 | var containingFeature = node.eContainingFeature(); | 58 | var containingFeature = node.eContainingFeature(); |
59 | return containingFeature == ProblemPackage.Literals.INDIVIDUAL_DECLARATION__NODES | 59 | if (containingFeature == ProblemPackage.Literals.NODE_DECLARATION__NODES) { |
60 | || containingFeature == ProblemPackage.Literals.ENUM_DECLARATION__LITERALS; | 60 | return ((NodeDeclaration) node.eContainer()).getKind() == NodeKind.ATOM; |
61 | } | ||
62 | return containingFeature == ProblemPackage.Literals.ENUM_DECLARATION__LITERALS; | ||
63 | } | ||
64 | |||
65 | public static boolean isMultiNode(Node node) { | ||
66 | var containingFeature = node.eContainingFeature(); | ||
67 | if (containingFeature == ProblemPackage.Literals.NODE_DECLARATION__NODES) { | ||
68 | return ((NodeDeclaration) node.eContainer()).getKind() == NodeKind.MULTI; | ||
69 | } | ||
70 | return containingFeature == ProblemPackage.Literals.CLASS_DECLARATION__NEW_NODE; | ||
61 | } | 71 | } |
62 | 72 | ||
63 | public static boolean isNewNode(Node node) { | 73 | public static boolean isDeclaredNode(Node node) { |
64 | return node.eContainingFeature() == ProblemPackage.Literals.CLASS_DECLARATION__NEW_NODE; | 74 | return node.eContainingFeature() == ProblemPackage.Literals.NODE_DECLARATION__NODES; |
65 | } | 75 | } |
66 | 76 | ||
67 | public static boolean isInvalidMultiplicityConstraint(PredicateDefinition predicateDefinition) { | 77 | public static boolean isInvalidMultiplicityConstraint(PredicateDefinition predicateDefinition) { |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/validation/ProblemValidator.java b/subprojects/language/src/main/java/tools/refinery/language/validation/ProblemValidator.java index 8bda4b95..a95e8b3c 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/validation/ProblemValidator.java +++ b/subprojects/language/src/main/java/tools/refinery/language/validation/ProblemValidator.java | |||
@@ -84,7 +84,7 @@ public class ProblemValidator extends AbstractProblemValidator { | |||
84 | @Check | 84 | @Check |
85 | public void checkNodeConstants(VariableOrNodeExpr expr) { | 85 | public void checkNodeConstants(VariableOrNodeExpr expr) { |
86 | var variableOrNode = expr.getVariableOrNode(); | 86 | var variableOrNode = expr.getVariableOrNode(); |
87 | if (variableOrNode instanceof Node node && !ProblemUtil.isIndividualNode(node)) { | 87 | if (variableOrNode instanceof Node node && !ProblemUtil.isAtomNode(node)) { |
88 | var name = node.getName(); | 88 | var name = node.getName(); |
89 | var message = ("Only individuals can be referenced in predicates. " + | 89 | var message = ("Only individuals can be referenced in predicates. " + |
90 | "Mark '%s' as individual with the declaration 'indiv %s.'").formatted(name, name); | 90 | "Mark '%s' as individual with the declaration 'indiv %s.'").formatted(name, name); |
@@ -96,16 +96,16 @@ public class ProblemValidator extends AbstractProblemValidator { | |||
96 | @Check | 96 | @Check |
97 | public void checkUniqueDeclarations(Problem problem) { | 97 | public void checkUniqueDeclarations(Problem problem) { |
98 | var relations = new ArrayList<Relation>(); | 98 | var relations = new ArrayList<Relation>(); |
99 | var individuals = new ArrayList<Node>(); | 99 | var nodes = new ArrayList<Node>(); |
100 | for (var statement : problem.getStatements()) { | 100 | for (var statement : problem.getStatements()) { |
101 | if (statement instanceof Relation relation) { | 101 | if (statement instanceof Relation relation) { |
102 | relations.add(relation); | 102 | relations.add(relation); |
103 | } else if (statement instanceof IndividualDeclaration individualDeclaration) { | 103 | } else if (statement instanceof NodeDeclaration nodeDeclaration) { |
104 | individuals.addAll(individualDeclaration.getNodes()); | 104 | nodes.addAll(nodeDeclaration.getNodes()); |
105 | } | 105 | } |
106 | } | 106 | } |
107 | checkUniqueSimpleNames(relations); | 107 | checkUniqueSimpleNames(relations); |
108 | checkUniqueSimpleNames(individuals); | 108 | checkUniqueSimpleNames(nodes); |
109 | } | 109 | } |
110 | 110 | ||
111 | @Check | 111 | @Check |
@@ -362,7 +362,7 @@ public class ProblemValidator extends AbstractProblemValidator { | |||
362 | return; | 362 | return; |
363 | } | 363 | } |
364 | var node = getNodeArgumentForMultiObjectAssertion(arguments.get(0)); | 364 | var node = getNodeArgumentForMultiObjectAssertion(arguments.get(0)); |
365 | if (node != null && !node.eIsProxy() && ProblemUtil.isIndividualNode(node)) { | 365 | if (node != null && !node.eIsProxy() && ProblemUtil.isAtomNode(node)) { |
366 | acceptError("Individual nodes must exist.", assertion, null, 0, UNSUPPORTED_ASSERTION_ISSUE); | 366 | acceptError("Individual nodes must exist.", assertion, null, 0, UNSUPPORTED_ASSERTION_ISSUE); |
367 | } | 367 | } |
368 | } | 368 | } |
diff --git a/subprojects/language/src/test/java/tools/refinery/language/tests/ProblemParsingTest.java b/subprojects/language/src/test/java/tools/refinery/language/tests/ProblemParsingTest.java index 72d57f54..17ae5fbb 100644 --- a/subprojects/language/src/test/java/tools/refinery/language/tests/ProblemParsingTest.java +++ b/subprojects/language/src/test/java/tools/refinery/language/tests/ProblemParsingTest.java | |||
@@ -42,7 +42,7 @@ class ProblemParsingTest { | |||
42 | error invalidTaxStatus(Person p) <-> | 42 | error invalidTaxStatus(Person p) <-> |
43 | taxStatus(p, CHILD), children(p, _q). | 43 | taxStatus(p, CHILD), children(p, _q). |
44 | 44 | ||
45 | indiv family. | 45 | atom family. |
46 | Family(family). | 46 | Family(family). |
47 | members(family, anne): true. | 47 | members(family, anne): true. |
48 | members(family, bob). | 48 | members(family, bob). |
diff --git a/subprojects/language/src/test/java/tools/refinery/language/tests/formatting2/ProblemFormatterTest.java b/subprojects/language/src/test/java/tools/refinery/language/tests/formatting2/ProblemFormatterTest.java index f688d970..4a15f9de 100644 --- a/subprojects/language/src/test/java/tools/refinery/language/tests/formatting2/ProblemFormatterTest.java +++ b/subprojects/language/src/test/java/tools/refinery/language/tests/formatting2/ProblemFormatterTest.java | |||
@@ -183,8 +183,8 @@ class ProblemFormatterTest { | |||
183 | } | 183 | } |
184 | 184 | ||
185 | @Test | 185 | @Test |
186 | void individualDeclarationTest() { | 186 | void atomDeclarationTest() { |
187 | testFormatter(" indiv a , b . ", "indiv a, b.\n"); | 187 | testFormatter(" atom a , b . ", "atom a, b.\n"); |
188 | } | 188 | } |
189 | 189 | ||
190 | @Test | 190 | @Test |
@@ -194,7 +194,7 @@ class ProblemFormatterTest { | |||
194 | pred foo(node a). | 194 | pred foo(node a). |
195 | class Foo. | 195 | class Foo. |
196 | foo(n1, n2). | 196 | foo(n1, n2). |
197 | indiv i1. | 197 | atom i1. |
198 | !foo(i1, n1). | 198 | !foo(i1, n1). |
199 | pred bar(node a, node b). | 199 | pred bar(node a, node b). |
200 | pred quux(). | 200 | pred quux(). |
@@ -207,7 +207,7 @@ class ProblemFormatterTest { | |||
207 | class Foo. | 207 | class Foo. |
208 | 208 | ||
209 | foo(n1, n2). | 209 | foo(n1, n2). |
210 | indiv i1. | 210 | atom i1. |
211 | !foo(i1, n1). | 211 | !foo(i1, n1). |
212 | 212 | ||
213 | pred bar(node a, node b). | 213 | pred bar(node a, node b). |
diff --git a/subprojects/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.java b/subprojects/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.java index e76d2993..bc0320a6 100644 --- a/subprojects/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.java +++ b/subprojects/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.java | |||
@@ -69,35 +69,35 @@ class NodeScopingTest { | |||
69 | } | 69 | } |
70 | 70 | ||
71 | @ParameterizedTest | 71 | @ParameterizedTest |
72 | @MethodSource("individualNodeReferenceSource") | 72 | @MethodSource("atomNodeReferenceSource") |
73 | void individualNodeInAssertionTest(String qualifiedNamePrefix, boolean namedProblem) { | 73 | void atomNodeInAssertionTest(String qualifiedNamePrefix, boolean namedProblem) { |
74 | var problem = parse(""" | 74 | var problem = parse(""" |
75 | indiv a, b. | 75 | atom a, b. |
76 | pred predicate(node x, node y) <-> node(x). | 76 | pred predicate(node x, node y) <-> node(x). |
77 | predicate({PARAM}a, {PARAM}a). | 77 | predicate({PARAM}a, {PARAM}a). |
78 | ?predicate({PARAM}a, {PARAM}b). | 78 | ?predicate({PARAM}a, {PARAM}b). |
79 | """, qualifiedNamePrefix, namedProblem); | 79 | """, qualifiedNamePrefix, namedProblem); |
80 | assertThat(problem.getResourceErrors(), empty()); | 80 | assertThat(problem.getResourceErrors(), empty()); |
81 | assertThat(problem.nodeNames(), empty()); | 81 | assertThat(problem.nodeNames(), empty()); |
82 | assertThat(problem.assertion(0).arg(0).node(), equalTo(problem.individualNode("a"))); | 82 | assertThat(problem.assertion(0).arg(0).node(), equalTo(problem.atomNode("a"))); |
83 | assertThat(problem.assertion(0).arg(1).node(), equalTo(problem.individualNode("a"))); | 83 | assertThat(problem.assertion(0).arg(1).node(), equalTo(problem.atomNode("a"))); |
84 | assertThat(problem.assertion(1).arg(0).node(), equalTo(problem.individualNode("a"))); | 84 | assertThat(problem.assertion(1).arg(0).node(), equalTo(problem.atomNode("a"))); |
85 | assertThat(problem.assertion(1).arg(1).node(), equalTo(problem.individualNode("b"))); | 85 | assertThat(problem.assertion(1).arg(1).node(), equalTo(problem.atomNode("b"))); |
86 | } | 86 | } |
87 | 87 | ||
88 | @ParameterizedTest | 88 | @ParameterizedTest |
89 | @MethodSource("individualNodeReferenceSource") | 89 | @MethodSource("atomNodeReferenceSource") |
90 | void individualNodeInPredicateTest(String qualifiedNamePrefix, boolean namedProblem) { | 90 | void atomNodeInPredicateTest(String qualifiedNamePrefix, boolean namedProblem) { |
91 | var problem = parse(""" | 91 | var problem = parse(""" |
92 | indiv b. | 92 | atom b. |
93 | pred predicate(node a) <-> node({PARAM}b). | 93 | pred predicate(node a) <-> node({PARAM}b). |
94 | """); | 94 | """, qualifiedNamePrefix, namedProblem); |
95 | assertThat(problem.getResourceErrors(), empty()); | 95 | assertThat(problem.getResourceErrors(), empty()); |
96 | assertThat(problem.nodeNames(), empty()); | 96 | assertThat(problem.nodeNames(), empty()); |
97 | assertThat(problem.pred("predicate").conj(0).lit(0).arg(0).node(), equalTo(problem.individualNode("b"))); | 97 | assertThat(problem.pred("predicate").conj(0).lit(0).arg(0).node(), equalTo(problem.atomNode("b"))); |
98 | } | 98 | } |
99 | 99 | ||
100 | static Stream<Arguments> individualNodeReferenceSource() { | 100 | static Stream<Arguments> atomNodeReferenceSource() { |
101 | return Stream.of(Arguments.of("", false), Arguments.of("", true), Arguments.of("test::", true)); | 101 | return Stream.of(Arguments.of("", false), Arguments.of("", true), Arguments.of("test::", true)); |
102 | } | 102 | } |
103 | 103 | ||
diff --git a/subprojects/language/src/test/java/tools/refinery/language/tests/serializer/ProblemSerializerTest.java b/subprojects/language/src/test/java/tools/refinery/language/tests/serializer/ProblemSerializerTest.java index 65675b6b..ad583f8e 100644 --- a/subprojects/language/src/test/java/tools/refinery/language/tests/serializer/ProblemSerializerTest.java +++ b/subprojects/language/src/test/java/tools/refinery/language/tests/serializer/ProblemSerializerTest.java | |||
@@ -56,15 +56,16 @@ class ProblemSerializerTest { | |||
56 | var pred = createPred(); | 56 | var pred = createPred(); |
57 | var node = ProblemFactory.eINSTANCE.createNode(); | 57 | var node = ProblemFactory.eINSTANCE.createNode(); |
58 | node.setName("a"); | 58 | node.setName("a"); |
59 | var individualDeclaration = ProblemFactory.eINSTANCE.createIndividualDeclaration(); | 59 | var atomDeclaration = ProblemFactory.eINSTANCE.createNodeDeclaration(); |
60 | individualDeclaration.getNodes().add(node); | 60 | atomDeclaration.setKind(NodeKind.ATOM); |
61 | problem.getStatements().add(individualDeclaration); | 61 | atomDeclaration.getNodes().add(node); |
62 | problem.getStatements().add(atomDeclaration); | ||
62 | createAssertion(pred, node, value); | 63 | createAssertion(pred, node, value); |
63 | 64 | ||
64 | assertSerializedResult(""" | 65 | assertSerializedResult(""" |
65 | pred foo(node p). | 66 | pred foo(node p). |
66 | 67 | ||
67 | indiv a. | 68 | atom a. |
68 | """ + serializedAssertion + "\n"); | 69 | """ + serializedAssertion + "\n"); |
69 | } | 70 | } |
70 | 71 | ||
@@ -79,15 +80,16 @@ class ProblemSerializerTest { | |||
79 | var pred = createPred(); | 80 | var pred = createPred(); |
80 | var node = ProblemFactory.eINSTANCE.createNode(); | 81 | var node = ProblemFactory.eINSTANCE.createNode(); |
81 | node.setName("a"); | 82 | node.setName("a"); |
82 | var individualDeclaration = ProblemFactory.eINSTANCE.createIndividualDeclaration(); | 83 | var atomDeclaration = ProblemFactory.eINSTANCE.createNodeDeclaration(); |
83 | individualDeclaration.getNodes().add(node); | 84 | atomDeclaration.setKind(NodeKind.ATOM); |
84 | problem.getStatements().add(individualDeclaration); | 85 | atomDeclaration.getNodes().add(node); |
86 | problem.getStatements().add(atomDeclaration); | ||
85 | createAssertion(pred, node, value, true); | 87 | createAssertion(pred, node, value, true); |
86 | 88 | ||
87 | assertSerializedResult(""" | 89 | assertSerializedResult(""" |
88 | pred foo(node p). | 90 | pred foo(node p). |
89 | 91 | ||
90 | indiv a. | 92 | atom a. |
91 | default\040""" + serializedAssertion + "\n"); | 93 | default\040""" + serializedAssertion + "\n"); |
92 | } | 94 | } |
93 | 95 | ||
diff --git a/subprojects/language/src/testFixtures/java/tools/refinery/language/model/tests/utils/WrappedProblem.java b/subprojects/language/src/testFixtures/java/tools/refinery/language/model/tests/utils/WrappedProblem.java index fc51ff57..58bfce44 100644 --- a/subprojects/language/src/testFixtures/java/tools/refinery/language/model/tests/utils/WrappedProblem.java +++ b/subprojects/language/src/testFixtures/java/tools/refinery/language/model/tests/utils/WrappedProblem.java | |||
@@ -67,8 +67,9 @@ public record WrappedProblem(Problem problem) { | |||
67 | return ProblemNavigationUtil.named(problem.getNodes(), name); | 67 | return ProblemNavigationUtil.named(problem.getNodes(), name); |
68 | } | 68 | } |
69 | 69 | ||
70 | public Node individualNode(String name) { | 70 | public Node atomNode(String name) { |
71 | var uniqueNodes = statementsOfType(IndividualDeclaration.class) | 71 | var uniqueNodes = statementsOfType(NodeDeclaration.class) |
72 | .filter(declaration -> declaration.getKind() == NodeKind.ATOM) | ||
72 | .flatMap(declaration -> declaration.getNodes().stream()); | 73 | .flatMap(declaration -> declaration.getNodes().stream()); |
73 | return ProblemNavigationUtil.named(uniqueNodes, name); | 74 | return ProblemNavigationUtil.named(uniqueNodes, name); |
74 | } | 75 | } |