diff options
author | Kristóf Marussy <kristof@marussy.com> | 2024-03-05 22:01:10 +0100 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2024-04-07 14:55:46 +0200 |
commit | c14d8efd509f834b80573bc0339bb990698b265c (patch) | |
tree | dc3ca21785ea17bc75a861f373ee69ec64d6e97f | |
parent | feat(language): validate assignment expressions (diff) | |
download | refinery-c14d8efd509f834b80573bc0339bb990698b265c.tar.gz refinery-c14d8efd509f834b80573bc0339bb990698b265c.tar.zst refinery-c14d8efd509f834b80573bc0339bb990698b265c.zip |
feat(language): type inference
* Customizable operator overloads.
* Customizable aggregation operators.
* Simplify ProblemQualifiedNameProvider.
48 files changed, 1889 insertions, 774 deletions
diff --git a/subprojects/frontend/src/editor/EditorTheme.ts b/subprojects/frontend/src/editor/EditorTheme.ts index b211f2a7..1f8152d3 100644 --- a/subprojects/frontend/src/editor/EditorTheme.ts +++ b/subprojects/frontend/src/editor/EditorTheme.ts | |||
@@ -166,7 +166,7 @@ export default styled('div', { | |||
166 | '.tok-problem-abstract': { | 166 | '.tok-problem-abstract': { |
167 | fontStyle: 'italic', | 167 | fontStyle: 'italic', |
168 | }, | 168 | }, |
169 | '.tok-problem-datatype': { | 169 | '.tok-problem-datatype, .tok-problem-aggregator': { |
170 | '&, & .tok-typeName': { | 170 | '&, & .tok-typeName': { |
171 | color: theme.palette.primary.main, | 171 | color: theme.palette.primary.main, |
172 | }, | 172 | }, |
diff --git a/subprojects/frontend/src/language/problem.grammar b/subprojects/frontend/src/language/problem.grammar index 0f6ea3e1..829dc138 100644 --- a/subprojects/frontend/src/language/problem.grammar +++ b/subprojects/frontend/src/language/problem.grammar | |||
@@ -11,12 +11,13 @@ | |||
11 | @precedence { | 11 | @precedence { |
12 | cast, | 12 | cast, |
13 | prefix, | 13 | prefix, |
14 | range @left, | ||
14 | exponential @right, | 15 | exponential @right, |
15 | multiplicative @left, | 16 | multiplicative @left, |
16 | additive @left, | 17 | additive @left, |
17 | range @left, | ||
18 | lattice @left, | 18 | lattice @left, |
19 | comparison @left, | 19 | comparison @left, |
20 | boolean @left, | ||
20 | assignment, | 21 | assignment, |
21 | feature @cut | 22 | feature @cut |
22 | } | 23 | } |
@@ -45,7 +46,10 @@ statement { | |||
45 | (EnumBody { "{" sep<",", AtomNodeName> "}" } | ".") | 46 | (EnumBody { "{" sep<",", AtomNodeName> "}" } | ".") |
46 | } | | 47 | } | |
47 | DatatypeDeclaration { | 48 | DatatypeDeclaration { |
48 | kw<"extern"> kw<"datatype"> DatatypeName "." | 49 | kw<"extern"> ckw<"datatype"> DatatypeName "." |
50 | } | | ||
51 | AggregatorDeclaration { | ||
52 | kw<"extern"> ckw<"aggregator"> AggregatorName "." | ||
49 | } | | 53 | } | |
50 | PredicateDefinition { | 54 | PredicateDefinition { |
51 | ( | 55 | ( |
@@ -92,7 +96,7 @@ FeatureDeclaration { | |||
92 | ";"? | 96 | ";"? |
93 | } | 97 | } |
94 | 98 | ||
95 | Parameter { Modality? RelationName? VariableName } | 99 | Parameter { RelationName? VariableName } |
96 | 100 | ||
97 | // Use @dynamicPrecedence to prevent a(b) from being parsed as Expr { a } Expr { b } | 101 | // Use @dynamicPrecedence to prevent a(b) from being parsed as Expr { a } Expr { b } |
98 | // instead of Atom { a(b) } | 102 | // instead of Atom { a(b) } |
@@ -111,22 +115,23 @@ Expr { | |||
111 | AssignmentExpr { !assignment VariableName kw<"is"> Expr } | 115 | AssignmentExpr { !assignment VariableName kw<"is"> Expr } |
112 | 116 | ||
113 | BinaryExpr { | 117 | BinaryExpr { |
118 | Expr !boolean ("&&" | "||" | "^^") Expr | | ||
114 | Expr !comparison ComparisonOp Expr | | 119 | Expr !comparison ComparisonOp Expr | |
115 | Expr !lattice (LatticeMeet | "\\/") Expr | | 120 | Expr !lattice (LatticeMeet | "\\/") Expr | |
116 | Expr !range ".." Expr | | ||
117 | Expr !additive ("+" | "-") Expr | | 121 | Expr !additive ("+" | "-") Expr | |
118 | Expr !multiplicative (StarMult | Divide) Expr | | 122 | Expr !multiplicative (StarMult | Divide) Expr | |
119 | Expr !exponential "**" Expr | 123 | Expr !exponential "**" Expr | |
124 | Expr !range ".." Expr | ||
120 | } | 125 | } |
121 | 126 | ||
122 | UnaryExpr { | 127 | UnaryExpr { |
123 | !prefix ("+" | "-" | "!" | kw<"count"> | Modality) Expr | 128 | !prefix ("+" | "-" | "!" | kw<"count">) Expr |
124 | } | 129 | } |
125 | 130 | ||
126 | CastExpr { !cast Expr kw<"as"> DatatypeName } | 131 | CastExpr { !cast Expr kw<"as"> DatatypeName } |
127 | 132 | ||
128 | Aggregation { | 133 | Aggregation { |
129 | AggregationOp "{" Expr "|" Expr "}" | 134 | AggregatorName "{" Expr "|" Expr "}" |
130 | } | 135 | } |
131 | 136 | ||
132 | Atom { RelationName "+"? ParameterList<Expr> } | 137 | Atom { RelationName "+"? ParameterList<Expr> } |
@@ -151,14 +156,6 @@ LogicValue { | |||
151 | kw<"true"> | kw<"false"> | kw<"unknown"> | kw<"error"> | 156 | kw<"true"> | kw<"false"> | kw<"unknown"> | kw<"error"> |
152 | } | 157 | } |
153 | 158 | ||
154 | Modality { | ||
155 | kw<"must"> | kw<"may"> | kw<"current"> | ||
156 | } | ||
157 | |||
158 | AggregationOp { | ||
159 | ckw<"sum"> | ckw<"prod"> | ckw<"min"> | ckw<"max"> | ||
160 | } | ||
161 | |||
162 | ComparisonOp { SymbolicComparisonOp | kw<"in"> } | 159 | ComparisonOp { SymbolicComparisonOp | kw<"in"> } |
163 | 160 | ||
164 | ScopeElement { RelationName ("=" | "+=") Multiplicity } | 161 | ScopeElement { RelationName ("=" | "+=") Multiplicity } |
@@ -183,6 +180,8 @@ NodeName { QualifiedName } | |||
183 | 180 | ||
184 | ModuleName { QualifiedName } | 181 | ModuleName { QualifiedName } |
185 | 182 | ||
183 | AggregatorName { QualifiedName } | ||
184 | |||
186 | QualifiedName[implicitCompletion=true] { "::"? identifier (QualifiedNameSeparator "::" identifier)* } | 185 | QualifiedName[implicitCompletion=true] { "::"? identifier (QualifiedNameSeparator "::" identifier)* } |
187 | 186 | ||
188 | kw<term> { @specialize[@name={term},implicitCompletion=true]<identifier, term> } | 187 | kw<term> { @specialize[@name={term},implicitCompletion=true]<identifier, term> } |
@@ -237,7 +236,7 @@ sep1<separator, content> { content (separator content)* } | |||
237 | 236 | ||
238 | SymbolicComparisonOp { | 237 | SymbolicComparisonOp { |
239 | ">" | ">=" | "<" | "<=" | "==" | "!=" | | 238 | ">" | ">=" | "<" | "<=" | "==" | "!=" | |
240 | "<:" | ":>" | "===" | "!==" | 239 | "===" | "!==" |
241 | } | 240 | } |
242 | 241 | ||
243 | NotOp { "!" } | 242 | NotOp { "!" } |
diff --git a/subprojects/frontend/src/language/problemLanguageSupport.ts b/subprojects/frontend/src/language/problemLanguageSupport.ts index 3d25d699..594351d6 100644 --- a/subprojects/frontend/src/language/problemLanguageSupport.ts +++ b/subprojects/frontend/src/language/problemLanguageSupport.ts | |||
@@ -28,12 +28,12 @@ const parserWithMetadata = parser.configure({ | |||
28 | LineComment: t.lineComment, | 28 | LineComment: t.lineComment, |
29 | BlockComment: t.blockComment, | 29 | BlockComment: t.blockComment, |
30 | 'module problem class enum pred fn scope': t.definitionKeyword, | 30 | 'module problem class enum pred fn scope': t.definitionKeyword, |
31 | 'import as declare atom multi extern datatype': t.definitionKeyword, | 31 | 'import as declare atom multi': t.definitionKeyword, |
32 | 'extern datatype aggregator': t.definitionKeyword, | ||
32 | 'abstract extends refers contains container opposite': t.modifier, | 33 | 'abstract extends refers contains container opposite': t.modifier, |
33 | 'default error contained containment': t.modifier, | 34 | default: t.modifier, |
34 | 'true false unknown error': t.keyword, | 35 | 'true false unknown error': t.keyword, |
35 | 'may must current count': t.operatorKeyword, | 36 | 'count in is': t.operatorKeyword, |
36 | 'sum prod min max in is': t.operatorKeyword, | ||
37 | // 'new delete': t.keyword, | 37 | // 'new delete': t.keyword, |
38 | NotOp: t.operator, | 38 | NotOp: t.operator, |
39 | UnknownOp: t.operator, | 39 | UnknownOp: t.operator, |
@@ -44,6 +44,7 @@ const parserWithMetadata = parser.configure({ | |||
44 | String: t.string, | 44 | String: t.string, |
45 | 'RelationName/QualifiedName': t.typeName, | 45 | 'RelationName/QualifiedName': t.typeName, |
46 | 'DatatypeName/QualifiedName': t.keyword, | 46 | 'DatatypeName/QualifiedName': t.keyword, |
47 | 'AggregatorName/QualifiedName': t.operatorKeyword, | ||
47 | // 'RuleName/QualifiedName': t.typeName, | 48 | // 'RuleName/QualifiedName': t.typeName, |
48 | 'AtomNodeName/QualifiedName': t.atom, | 49 | 'AtomNodeName/QualifiedName': t.atom, |
49 | 'VariableName/QualifiedName': t.variableName, | 50 | 'VariableName/QualifiedName': t.variableName, |
diff --git a/subprojects/generator/src/main/java/tools/refinery/generator/ProblemLoader.java b/subprojects/generator/src/main/java/tools/refinery/generator/ProblemLoader.java index 580a87b6..c76fb7aa 100644 --- a/subprojects/generator/src/main/java/tools/refinery/generator/ProblemLoader.java +++ b/subprojects/generator/src/main/java/tools/refinery/generator/ProblemLoader.java | |||
@@ -12,7 +12,10 @@ import org.eclipse.emf.ecore.resource.Resource; | |||
12 | import org.eclipse.emf.ecore.util.EcoreUtil; | 12 | import org.eclipse.emf.ecore.util.EcoreUtil; |
13 | import org.eclipse.xtext.diagnostics.Severity; | 13 | import org.eclipse.xtext.diagnostics.Severity; |
14 | import org.eclipse.xtext.naming.IQualifiedNameConverter; | 14 | import org.eclipse.xtext.naming.IQualifiedNameConverter; |
15 | import org.eclipse.xtext.resource.*; | 15 | import org.eclipse.xtext.resource.FileExtensionProvider; |
16 | import org.eclipse.xtext.resource.IEObjectDescription; | ||
17 | import org.eclipse.xtext.resource.IResourceFactory; | ||
18 | import org.eclipse.xtext.resource.XtextResourceSet; | ||
16 | import org.eclipse.xtext.scoping.impl.GlobalResourceDescriptionProvider; | 19 | import org.eclipse.xtext.scoping.impl.GlobalResourceDescriptionProvider; |
17 | import org.eclipse.xtext.util.CancelIndicator; | 20 | import org.eclipse.xtext.util.CancelIndicator; |
18 | import org.eclipse.xtext.util.LazyStringInputStream; | 21 | import org.eclipse.xtext.util.LazyStringInputStream; |
@@ -25,7 +28,7 @@ import tools.refinery.language.model.problem.ScopeDeclaration; | |||
25 | import tools.refinery.language.naming.NamingUtil; | 28 | import tools.refinery.language.naming.NamingUtil; |
26 | import tools.refinery.language.resource.ProblemResourceDescriptionStrategy; | 29 | import tools.refinery.language.resource.ProblemResourceDescriptionStrategy; |
27 | import tools.refinery.language.resource.ProblemResourceDescriptionStrategy.ShadowingKey; | 30 | import tools.refinery.language.resource.ProblemResourceDescriptionStrategy.ShadowingKey; |
28 | import tools.refinery.language.scoping.imports.ImportAdapter; | 31 | import tools.refinery.language.scoping.imports.ImportAdapterProvider; |
29 | import tools.refinery.language.scoping.imports.ImportCollector; | 32 | import tools.refinery.language.scoping.imports.ImportCollector; |
30 | import tools.refinery.store.util.CancellationToken; | 33 | import tools.refinery.store.util.CancellationToken; |
31 | 34 | ||
@@ -61,6 +64,9 @@ public class ProblemLoader { | |||
61 | @Inject | 64 | @Inject |
62 | private IQualifiedNameConverter qualifiedNameConverter; | 65 | private IQualifiedNameConverter qualifiedNameConverter; |
63 | 66 | ||
67 | @Inject | ||
68 | private ImportAdapterProvider importAdapterProvider; | ||
69 | |||
64 | private CancellationToken cancellationToken = CancellationToken.NONE; | 70 | private CancellationToken cancellationToken = CancellationToken.NONE; |
65 | 71 | ||
66 | private final List<Path> extraPaths = new ArrayList<>(); | 72 | private final List<Path> extraPaths = new ArrayList<>(); |
@@ -125,7 +131,7 @@ public class ProblemLoader { | |||
125 | 131 | ||
126 | private XtextResourceSet createResourceSet() { | 132 | private XtextResourceSet createResourceSet() { |
127 | var resourceSet = resourceSetProvider.get(); | 133 | var resourceSet = resourceSetProvider.get(); |
128 | var adapter = ImportAdapter.getOrInstall(resourceSet); | 134 | var adapter = importAdapterProvider.getOrInstall(resourceSet); |
129 | adapter.getLibraryPaths().addAll(0, extraPaths); | 135 | adapter.getLibraryPaths().addAll(0, extraPaths); |
130 | return resourceSet; | 136 | return resourceSet; |
131 | } | 137 | } |
diff --git a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/ProblemCrossrefProposalProvider.java b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/ProblemCrossrefProposalProvider.java index 8b2542f3..8dad8f8a 100644 --- a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/ProblemCrossrefProposalProvider.java +++ b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/ProblemCrossrefProposalProvider.java | |||
@@ -24,9 +24,9 @@ import tools.refinery.language.model.problem.*; | |||
24 | import tools.refinery.language.naming.NamingUtil; | 24 | import tools.refinery.language.naming.NamingUtil; |
25 | import tools.refinery.language.naming.ProblemQualifiedNameConverter; | 25 | import tools.refinery.language.naming.ProblemQualifiedNameConverter; |
26 | import tools.refinery.language.resource.ProblemResourceDescriptionStrategy; | 26 | import tools.refinery.language.resource.ProblemResourceDescriptionStrategy; |
27 | import tools.refinery.language.scoping.imports.ImportAdapterProvider; | ||
27 | import tools.refinery.language.scoping.imports.ImportCollector; | 28 | import tools.refinery.language.scoping.imports.ImportCollector; |
28 | import tools.refinery.language.utils.BuiltinSymbols; | 29 | import tools.refinery.language.utils.BuiltinSymbols; |
29 | import tools.refinery.language.utils.ProblemDesugarer; | ||
30 | import tools.refinery.language.utils.ProblemUtil; | 30 | import tools.refinery.language.utils.ProblemUtil; |
31 | import tools.refinery.language.validation.ReferenceCounter; | 31 | import tools.refinery.language.validation.ReferenceCounter; |
32 | 32 | ||
@@ -43,10 +43,10 @@ public class ProblemCrossrefProposalProvider extends IdeCrossrefProposalProvider | |||
43 | private ReferenceCounter referenceCounter; | 43 | private ReferenceCounter referenceCounter; |
44 | 44 | ||
45 | @Inject | 45 | @Inject |
46 | private ProblemDesugarer desugarer; | 46 | private ImportCollector importCollector; |
47 | 47 | ||
48 | @Inject | 48 | @Inject |
49 | private ImportCollector importCollector; | 49 | private ImportAdapterProvider importAdapterProvider; |
50 | 50 | ||
51 | @Override | 51 | @Override |
52 | protected Iterable<IEObjectDescription> queryScope(IScope scope, CrossReference crossReference, | 52 | protected Iterable<IEObjectDescription> queryScope(IScope scope, CrossReference crossReference, |
@@ -132,11 +132,7 @@ public class ProblemCrossrefProposalProvider extends IdeCrossrefProposalProvider | |||
132 | } | 132 | } |
133 | } | 133 | } |
134 | 134 | ||
135 | var builtinSymbolsOption = desugarer.getBuiltinSymbols(context.getRootModel()); | 135 | var builtinSymbols = importAdapterProvider.getBuiltinSymbols(context.getResource()); |
136 | if (builtinSymbolsOption.isEmpty()) { | ||
137 | return true; | ||
138 | } | ||
139 | var builtinSymbols = builtinSymbolsOption.get(); | ||
140 | 136 | ||
141 | return builtinSymbolAwareShouldBeVisible(candidate, context, eReference, builtinSymbols, | 137 | return builtinSymbolAwareShouldBeVisible(candidate, context, eReference, builtinSymbols, |
142 | candidateEObjectOrProxy); | 138 | candidateEObjectOrProxy); |
@@ -144,7 +140,7 @@ public class ProblemCrossrefProposalProvider extends IdeCrossrefProposalProvider | |||
144 | 140 | ||
145 | private VariableOrNode getAssignedVariable(EObject context) { | 141 | private VariableOrNode getAssignedVariable(EObject context) { |
146 | var assignmentExpr = EcoreUtil2.getContainerOfType(context, AssignmentExpr.class); | 142 | var assignmentExpr = EcoreUtil2.getContainerOfType(context, AssignmentExpr.class); |
147 | if (assignmentExpr.getLeft() instanceof VariableOrNodeExpr variableOrNodeExpr) { | 143 | if (assignmentExpr != null && assignmentExpr.getLeft() instanceof VariableOrNodeExpr variableOrNodeExpr) { |
148 | return variableOrNodeExpr.getVariableOrNode(); | 144 | return variableOrNodeExpr.getVariableOrNode(); |
149 | } | 145 | } |
150 | return null; | 146 | return null; |
@@ -202,8 +198,8 @@ public class ProblemCrossrefProposalProvider extends IdeCrossrefProposalProvider | |||
202 | if (builtinSymbols.exists().equals(candidateEObjectOrProxy)) { | 198 | if (builtinSymbols.exists().equals(candidateEObjectOrProxy)) { |
203 | return false; | 199 | return false; |
204 | } | 200 | } |
205 | var arity = candidate.getUserData(ProblemResourceDescriptionStrategy.ARITY); | 201 | return ProblemResourceDescriptionStrategy.TYPE_LIKE_TRUE.equals( |
206 | return arity == null || arity.equals("1"); | 202 | candidate.getUserData(ProblemResourceDescriptionStrategy.TYPE_LIKE)); |
207 | } | 203 | } |
208 | 204 | ||
209 | if (eReference.equals(ProblemPackage.Literals.CLASS_DECLARATION__SUPER_TYPES)) { | 205 | if (eReference.equals(ProblemPackage.Literals.CLASS_DECLARATION__SUPER_TYPES)) { |
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 a8849b7c..06f0e758 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 | |||
@@ -18,7 +18,6 @@ import org.eclipse.xtext.service.OperationCanceledManager; | |||
18 | import org.eclipse.xtext.util.CancelIndicator; | 18 | import org.eclipse.xtext.util.CancelIndicator; |
19 | import org.jetbrains.annotations.NotNull; | 19 | import org.jetbrains.annotations.NotNull; |
20 | import tools.refinery.language.model.problem.*; | 20 | import tools.refinery.language.model.problem.*; |
21 | import tools.refinery.language.utils.ProblemDesugarer; | ||
22 | import tools.refinery.language.utils.ProblemUtil; | 21 | import tools.refinery.language.utils.ProblemUtil; |
23 | 22 | ||
24 | import java.util.List; | 23 | import java.util.List; |
@@ -27,6 +26,7 @@ public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighli | |||
27 | private static final String BUILTIN_CLASS = "builtin"; | 26 | private static final String BUILTIN_CLASS = "builtin"; |
28 | private static final String ABSTRACT_CLASS = "abstract"; | 27 | private static final String ABSTRACT_CLASS = "abstract"; |
29 | private static final String DATATYPE_CLASS = "datatype"; | 28 | private static final String DATATYPE_CLASS = "datatype"; |
29 | private static final String AGGREGATOR_CLASS = "aggregator"; | ||
30 | private static final String CONTAINMENT_CLASS = "containment"; | 30 | private static final String CONTAINMENT_CLASS = "containment"; |
31 | private static final String ERROR_CLASS = "error"; | 31 | private static final String ERROR_CLASS = "error"; |
32 | private static final String NODE_CLASS = "node"; | 32 | private static final String NODE_CLASS = "node"; |
@@ -37,9 +37,6 @@ public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighli | |||
37 | private OperationCanceledManager operationCanceledManager; | 37 | private OperationCanceledManager operationCanceledManager; |
38 | 38 | ||
39 | @Inject | 39 | @Inject |
40 | private ProblemDesugarer desugarer; | ||
41 | |||
42 | @Inject | ||
43 | private TypeHashProvider typeHashProvider; | 40 | private TypeHashProvider typeHashProvider; |
44 | 41 | ||
45 | @Override | 42 | @Override |
@@ -116,8 +113,11 @@ public class ProblemSemanticHighlightingCalculator extends DefaultSemanticHighli | |||
116 | if (eObject instanceof DatatypeDeclaration) { | 113 | if (eObject instanceof DatatypeDeclaration) { |
117 | classesBuilder.add(DATATYPE_CLASS); | 114 | classesBuilder.add(DATATYPE_CLASS); |
118 | } | 115 | } |
116 | if (eObject instanceof AggregatorDeclaration) { | ||
117 | classesBuilder.add(AGGREGATOR_CLASS); | ||
118 | } | ||
119 | if (eObject instanceof ReferenceDeclaration referenceDeclaration | 119 | if (eObject instanceof ReferenceDeclaration referenceDeclaration |
120 | && desugarer.isContainmentReference(referenceDeclaration)) { | 120 | && ProblemUtil.isContainmentReference(referenceDeclaration)) { |
121 | classesBuilder.add(CONTAINMENT_CLASS); | 121 | classesBuilder.add(CONTAINMENT_CLASS); |
122 | } | 122 | } |
123 | if (isError && reference != null) { | 123 | if (isError && reference != null) { |
diff --git a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/TypeHashProvider.java b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/TypeHashProvider.java index 82a6af06..2821e1b6 100644 --- a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/TypeHashProvider.java +++ b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/TypeHashProvider.java | |||
@@ -17,6 +17,7 @@ import org.eclipse.xtext.scoping.impl.GlobalResourceDescriptionProvider; | |||
17 | import org.eclipse.xtext.util.IResourceScopeCache; | 17 | import org.eclipse.xtext.util.IResourceScopeCache; |
18 | import tools.refinery.language.documentation.DocumentationCommentParser; | 18 | import tools.refinery.language.documentation.DocumentationCommentParser; |
19 | import tools.refinery.language.model.problem.*; | 19 | import tools.refinery.language.model.problem.*; |
20 | import tools.refinery.language.naming.NamingUtil; | ||
20 | import tools.refinery.language.resource.ProblemResourceDescriptionStrategy; | 21 | import tools.refinery.language.resource.ProblemResourceDescriptionStrategy; |
21 | import tools.refinery.language.scoping.imports.ImportCollector; | 22 | import tools.refinery.language.scoping.imports.ImportCollector; |
22 | import tools.refinery.language.utils.ProblemUtil; | 23 | import tools.refinery.language.utils.ProblemUtil; |
@@ -55,7 +56,7 @@ public class TypeHashProvider { | |||
55 | if (qualifiedName == null) { | 56 | if (qualifiedName == null) { |
56 | return null; | 57 | return null; |
57 | } | 58 | } |
58 | var qualifiedNameString = qualifiedNameConverter.toString(qualifiedName); | 59 | var qualifiedNameString = qualifiedNameConverter.toString(NamingUtil.addRootPrefix(qualifiedName)); |
59 | var problem = EcoreUtil2.getContainerOfType(relation, Problem.class); | 60 | var problem = EcoreUtil2.getContainerOfType(relation, Problem.class); |
60 | if (problem == null) { | 61 | if (problem == null) { |
61 | return null; | 62 | return null; |
diff --git a/subprojects/language-model/problem.aird b/subprojects/language-model/problem.aird index c253facb..f8a50a76 100644 --- a/subprojects/language-model/problem.aird +++ b/subprojects/language-model/problem.aird | |||
@@ -7,11 +7,11 @@ | |||
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="1708374464734"> | 10 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_CsYa4KA4EeuqkpDnuik1sg" name="declarations" repPath="#_CsUwgKA4EeuqkpDnuik1sg" changeId="1709659837733"> |
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="1709214207759"> | 14 | <ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_z1bOYF3lEe2LuOZzJ_LhLg" name="expressions" repPath="#_z1YyIF3lEe2LuOZzJ_LhLg" changeId="1709659698980"> |
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> |
@@ -95,7 +95,7 @@ | |||
95 | <styles xmi:type="notation:FilteringStyle" xmi:id="_fit3lqA5EeuqkpDnuik1sg"/> | 95 | <styles xmi:type="notation:FilteringStyle" xmi:id="_fit3lqA5EeuqkpDnuik1sg"/> |
96 | </children> | 96 | </children> |
97 | <styles xmi:type="notation:ShapeStyle" xmi:id="_fit3kaA5EeuqkpDnuik1sg" fontName="Noto Sans" fontHeight="8"/> | 97 | <styles xmi:type="notation:ShapeStyle" xmi:id="_fit3kaA5EeuqkpDnuik1sg" fontName="Noto Sans" fontHeight="8"/> |
98 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fit3kqA5EeuqkpDnuik1sg" x="1524" y="716" width="150" height="100"/> | 98 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fit3kqA5EeuqkpDnuik1sg" x="1680" y="716" width="150" height="100"/> |
99 | </children> | 99 | </children> |
100 | <children xmi:type="notation:Node" xmi:id="_QKLK0KA6EeuqkpDnuik1sg" type="2003" element="_QKD2EKA6EeuqkpDnuik1sg"> | 100 | <children xmi:type="notation:Node" xmi:id="_QKLK0KA6EeuqkpDnuik1sg" type="2003" element="_QKD2EKA6EeuqkpDnuik1sg"> |
101 | <children xmi:type="notation:Node" xmi:id="_QKLK06A6EeuqkpDnuik1sg" type="5007"/> | 101 | <children xmi:type="notation:Node" xmi:id="_QKLK06A6EeuqkpDnuik1sg" type="5007"/> |
@@ -104,7 +104,7 @@ | |||
104 | <styles xmi:type="notation:FilteringStyle" xmi:id="_QKLK1qA6EeuqkpDnuik1sg"/> | 104 | <styles xmi:type="notation:FilteringStyle" xmi:id="_QKLK1qA6EeuqkpDnuik1sg"/> |
105 | </children> | 105 | </children> |
106 | <styles xmi:type="notation:ShapeStyle" xmi:id="_QKLK0aA6EeuqkpDnuik1sg" fontName="Noto Sans" fontHeight="8"/> | 106 | <styles xmi:type="notation:ShapeStyle" xmi:id="_QKLK0aA6EeuqkpDnuik1sg" fontName="Noto Sans" fontHeight="8"/> |
107 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QKLK0qA6EeuqkpDnuik1sg" x="1531" y="530" width="120" height="100"/> | 107 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QKLK0qA6EeuqkpDnuik1sg" x="1687" y="530" width="120" height="100"/> |
108 | </children> | 108 | </children> |
109 | <children xmi:type="notation:Node" xmi:id="_jP6FkKA6EeuqkpDnuik1sg" type="2003" element="_jPpm4KA6EeuqkpDnuik1sg"> | 109 | <children xmi:type="notation:Node" xmi:id="_jP6FkKA6EeuqkpDnuik1sg" type="2003" element="_jPpm4KA6EeuqkpDnuik1sg"> |
110 | <children xmi:type="notation:Node" xmi:id="_jP6soKA6EeuqkpDnuik1sg" type="5007"/> | 110 | <children xmi:type="notation:Node" xmi:id="_jP6soKA6EeuqkpDnuik1sg" type="5007"/> |
@@ -113,7 +113,7 @@ | |||
113 | <styles xmi:type="notation:FilteringStyle" xmi:id="_jP6so6A6EeuqkpDnuik1sg"/> | 113 | <styles xmi:type="notation:FilteringStyle" xmi:id="_jP6so6A6EeuqkpDnuik1sg"/> |
114 | </children> | 114 | </children> |
115 | <styles xmi:type="notation:ShapeStyle" xmi:id="_jP6FkaA6EeuqkpDnuik1sg" fontName="Noto Sans" fontHeight="8"/> | 115 | <styles xmi:type="notation:ShapeStyle" xmi:id="_jP6FkaA6EeuqkpDnuik1sg" fontName="Noto Sans" fontHeight="8"/> |
116 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jP6FkqA6EeuqkpDnuik1sg" x="1356" y="332" width="120" height="100"/> | 116 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jP6FkqA6EeuqkpDnuik1sg" x="1512" y="332" width="120" height="100"/> |
117 | </children> | 117 | </children> |
118 | <children xmi:type="notation:Node" xmi:id="_xsq_MKA8EeuqkpDnuik1sg" type="2003" element="_xsYrUKA8EeuqkpDnuik1sg"> | 118 | <children xmi:type="notation:Node" xmi:id="_xsq_MKA8EeuqkpDnuik1sg" type="2003" element="_xsYrUKA8EeuqkpDnuik1sg"> |
119 | <children xmi:type="notation:Node" xmi:id="_xsrmQKA8EeuqkpDnuik1sg" type="5007"/> | 119 | <children xmi:type="notation:Node" xmi:id="_xsrmQKA8EeuqkpDnuik1sg" type="5007"/> |
@@ -219,7 +219,7 @@ | |||
219 | <styles xmi:type="notation:FilteringStyle" xmi:id="_Kw_WM9bNEeuymriYTNxK2g"/> | 219 | <styles xmi:type="notation:FilteringStyle" xmi:id="_Kw_WM9bNEeuymriYTNxK2g"/> |
220 | </children> | 220 | </children> |
221 | <styles xmi:type="notation:ShapeStyle" xmi:id="_Kw-vIdbNEeuymriYTNxK2g" fontName="Noto Sans" fontHeight="8"/> | 221 | <styles xmi:type="notation:ShapeStyle" xmi:id="_Kw-vIdbNEeuymriYTNxK2g" fontName="Noto Sans" fontHeight="8"/> |
222 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Kw-vItbNEeuymriYTNxK2g" x="1109" y="176" width="120" height="100"/> | 222 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Kw-vItbNEeuymriYTNxK2g" x="1260" y="176" width="120" height="100"/> |
223 | </children> | 223 | </children> |
224 | <children xmi:type="notation:Node" xmi:id="_pdJrwAGyEey7cfH5K6RyCw" type="2003" element="_pcXBkAGyEey7cfH5K6RyCw"> | 224 | <children xmi:type="notation:Node" xmi:id="_pdJrwAGyEey7cfH5K6RyCw" type="2003" element="_pcXBkAGyEey7cfH5K6RyCw"> |
225 | <children xmi:type="notation:Node" xmi:id="_pdOkQAGyEey7cfH5K6RyCw" type="5007"/> | 225 | <children xmi:type="notation:Node" xmi:id="_pdOkQAGyEey7cfH5K6RyCw" type="5007"/> |
@@ -241,7 +241,7 @@ | |||
241 | <styles xmi:type="notation:FilteringStyle" xmi:id="_A9eK0irZEeyyC-O0_LlY9w"/> | 241 | <styles xmi:type="notation:FilteringStyle" xmi:id="_A9eK0irZEeyyC-O0_LlY9w"/> |
242 | </children> | 242 | </children> |
243 | <styles xmi:type="notation:ShapeStyle" xmi:id="_A9YrQSrZEeyyC-O0_LlY9w" fontName="Segoe UI" fontHeight="8"/> | 243 | <styles xmi:type="notation:ShapeStyle" xmi:id="_A9YrQSrZEeyyC-O0_LlY9w" fontName="Segoe UI" fontHeight="8"/> |
244 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_A9YrQirZEeyyC-O0_LlY9w" x="1869" y="530" width="148" height="100"/> | 244 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_A9YrQirZEeyyC-O0_LlY9w" x="2025" y="530" width="148" height="100"/> |
245 | </children> | 245 | </children> |
246 | <children xmi:type="notation:Node" xmi:id="_N0FQ4CrZEeyyC-O0_LlY9w" type="2003" element="_NzpMACrZEeyyC-O0_LlY9w"> | 246 | <children xmi:type="notation:Node" xmi:id="_N0FQ4CrZEeyyC-O0_LlY9w" type="2003" element="_NzpMACrZEeyyC-O0_LlY9w"> |
247 | <children xmi:type="notation:Node" xmi:id="_N0F38CrZEeyyC-O0_LlY9w" type="5007"/> | 247 | <children xmi:type="notation:Node" xmi:id="_N0F38CrZEeyyC-O0_LlY9w" type="5007"/> |
@@ -250,7 +250,7 @@ | |||
250 | <styles xmi:type="notation:FilteringStyle" xmi:id="_N0F38yrZEeyyC-O0_LlY9w"/> | 250 | <styles xmi:type="notation:FilteringStyle" xmi:id="_N0F38yrZEeyyC-O0_LlY9w"/> |
251 | </children> | 251 | </children> |
252 | <styles xmi:type="notation:ShapeStyle" xmi:id="_N0FQ4SrZEeyyC-O0_LlY9w" fontName="Segoe UI" fontHeight="8"/> | 252 | <styles xmi:type="notation:ShapeStyle" xmi:id="_N0FQ4SrZEeyyC-O0_LlY9w" fontName="Segoe UI" fontHeight="8"/> |
253 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_N0FQ4irZEeyyC-O0_LlY9w" x="2136" y="716" width="132" height="100"/> | 253 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_N0FQ4irZEeyyC-O0_LlY9w" x="2292" y="716" width="132" height="100"/> |
254 | </children> | 254 | </children> |
255 | <children xmi:type="notation:Node" xmi:id="_jzknACrZEeyyC-O0_LlY9w" type="2003" element="_jzRFACrZEeyyC-O0_LlY9w"> | 255 | <children xmi:type="notation:Node" xmi:id="_jzknACrZEeyyC-O0_LlY9w" type="2003" element="_jzRFACrZEeyyC-O0_LlY9w"> |
256 | <children xmi:type="notation:Node" xmi:id="_jzknAyrZEeyyC-O0_LlY9w" type="5007"/> | 256 | <children xmi:type="notation:Node" xmi:id="_jzknAyrZEeyyC-O0_LlY9w" type="5007"/> |
@@ -259,7 +259,7 @@ | |||
259 | <styles xmi:type="notation:FilteringStyle" xmi:id="_jzknBirZEeyyC-O0_LlY9w"/> | 259 | <styles xmi:type="notation:FilteringStyle" xmi:id="_jzknBirZEeyyC-O0_LlY9w"/> |
260 | </children> | 260 | </children> |
261 | <styles xmi:type="notation:ShapeStyle" xmi:id="_jzknASrZEeyyC-O0_LlY9w" fontName="Segoe UI" fontHeight="8"/> | 261 | <styles xmi:type="notation:ShapeStyle" xmi:id="_jzknASrZEeyyC-O0_LlY9w" fontName="Segoe UI" fontHeight="8"/> |
262 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jzknAirZEeyyC-O0_LlY9w" x="2136" y="956" width="120" height="100"/> | 262 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jzknAirZEeyyC-O0_LlY9w" x="2292" y="956" width="120" height="100"/> |
263 | </children> | 263 | </children> |
264 | <children xmi:type="notation:Node" xmi:id="_re7JICrZEeyyC-O0_LlY9w" type="2003" element="_remZACrZEeyyC-O0_LlY9w"> | 264 | <children xmi:type="notation:Node" xmi:id="_re7JICrZEeyyC-O0_LlY9w" type="2003" element="_remZACrZEeyyC-O0_LlY9w"> |
265 | <children xmi:type="notation:Node" xmi:id="_re7JIyrZEeyyC-O0_LlY9w" type="5007"/> | 265 | <children xmi:type="notation:Node" xmi:id="_re7JIyrZEeyyC-O0_LlY9w" type="5007"/> |
@@ -268,32 +268,7 @@ | |||
268 | <styles xmi:type="notation:FilteringStyle" xmi:id="_re7JJirZEeyyC-O0_LlY9w"/> | 268 | <styles xmi:type="notation:FilteringStyle" xmi:id="_re7JJirZEeyyC-O0_LlY9w"/> |
269 | </children> | 269 | </children> |
270 | <styles xmi:type="notation:ShapeStyle" xmi:id="_re7JISrZEeyyC-O0_LlY9w" fontName="Segoe UI" fontHeight="8"/> | 270 | <styles xmi:type="notation:ShapeStyle" xmi:id="_re7JISrZEeyyC-O0_LlY9w" fontName="Segoe UI" fontHeight="8"/> |
271 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_re7JIirZEeyyC-O0_LlY9w" x="2142" y="1124" width="120" height="100"/> | 271 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_re7JIirZEeyyC-O0_LlY9w" x="2298" y="1124" width="120" height="100"/> |
272 | </children> | ||
273 | <children xmi:type="notation:Node" xmi:id="_eKvl8BEKEe2AArBmfNpEZA" visible="false" type="2003" element="_eKVWQBEKEe2AArBmfNpEZA"> | ||
274 | <children xmi:type="notation:Node" xmi:id="_eKwNABEKEe2AArBmfNpEZA" type="5007"/> | ||
275 | <children xmi:type="notation:Node" xmi:id="_eKwNAREKEe2AArBmfNpEZA" type="7004"> | ||
276 | <children xmi:type="notation:Node" xmi:id="_ftnt8BEKEe2AArBmfNpEZA" visible="false" type="3010" element="_fs9moBEKEe2AArBmfNpEZA"> | ||
277 | <styles xmi:type="notation:FontStyle" xmi:id="_ftnt8REKEe2AArBmfNpEZA" fontName="Noto Sans" fontHeight="8"/> | ||
278 | <layoutConstraint xmi:type="notation:Location" xmi:id="_ftnt8hEKEe2AArBmfNpEZA"/> | ||
279 | </children> | ||
280 | <children xmi:type="notation:Node" xmi:id="_gPRpgBEKEe2AArBmfNpEZA" visible="false" type="3010" element="_gO3Z0BEKEe2AArBmfNpEZA"> | ||
281 | <styles xmi:type="notation:FontStyle" xmi:id="_gPRpgREKEe2AArBmfNpEZA" fontName="Noto Sans" fontHeight="8"/> | ||
282 | <layoutConstraint xmi:type="notation:Location" xmi:id="_gPRpghEKEe2AArBmfNpEZA"/> | ||
283 | </children> | ||
284 | <children xmi:type="notation:Node" xmi:id="_gppRUBEKEe2AArBmfNpEZA" visible="false" type="3010" element="_gpdEEBEKEe2AArBmfNpEZA"> | ||
285 | <styles xmi:type="notation:FontStyle" xmi:id="_gppRUREKEe2AArBmfNpEZA" fontName="Noto Sans" fontHeight="8"/> | ||
286 | <layoutConstraint xmi:type="notation:Location" xmi:id="_gppRUhEKEe2AArBmfNpEZA"/> | ||
287 | </children> | ||
288 | <children xmi:type="notation:Node" xmi:id="_uvSwUF4MEe2m7IaHDkh2Xg" visible="false" type="3010" element="_uumz0F4MEe2m7IaHDkh2Xg"> | ||
289 | <styles xmi:type="notation:FontStyle" xmi:id="_uvSwUV4MEe2m7IaHDkh2Xg" fontName="Noto Sans" fontHeight="8"/> | ||
290 | <layoutConstraint xmi:type="notation:Location" xmi:id="_uvSwUl4MEe2m7IaHDkh2Xg"/> | ||
291 | </children> | ||
292 | <styles xmi:type="notation:SortingStyle" xmi:id="_eKwNAhEKEe2AArBmfNpEZA"/> | ||
293 | <styles xmi:type="notation:FilteringStyle" xmi:id="_eKwNAxEKEe2AArBmfNpEZA"/> | ||
294 | </children> | ||
295 | <styles xmi:type="notation:ShapeStyle" xmi:id="_eKvl8REKEe2AArBmfNpEZA" fontName="Noto Sans" fontHeight="8"/> | ||
296 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_eKvl8hEKEe2AArBmfNpEZA" x="1308" y="1280" width="120" height="100"/> | ||
297 | </children> | 272 | </children> |
298 | <children xmi:type="notation:Node" xmi:id="_xp1icDNlEe2fD4dIhR_vzA" type="2003" element="_xpDfUDNlEe2fD4dIhR_vzA"> | 273 | <children xmi:type="notation:Node" xmi:id="_xp1icDNlEe2fD4dIhR_vzA" type="2003" element="_xpDfUDNlEe2fD4dIhR_vzA"> |
299 | <children xmi:type="notation:Node" xmi:id="_xp2JgDNlEe2fD4dIhR_vzA" type="5007"/> | 274 | <children xmi:type="notation:Node" xmi:id="_xp2JgDNlEe2fD4dIhR_vzA" type="5007"/> |
@@ -327,7 +302,7 @@ | |||
327 | <styles xmi:type="notation:FilteringStyle" xmi:id="_783To19mEe2rXNsIDUvqhw"/> | 302 | <styles xmi:type="notation:FilteringStyle" xmi:id="_783To19mEe2rXNsIDUvqhw"/> |
328 | </children> | 303 | </children> |
329 | <styles xmi:type="notation:ShapeStyle" xmi:id="_782skV9mEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | 304 | <styles xmi:type="notation:ShapeStyle" xmi:id="_782skV9mEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> |
330 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_782skl9mEe2rXNsIDUvqhw" x="1734" y="716" width="132" height="100"/> | 305 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_782skl9mEe2rXNsIDUvqhw" x="1890" y="716" width="132" height="100"/> |
331 | </children> | 306 | </children> |
332 | <children xmi:type="notation:Node" xmi:id="_rsftYF9vEe2rXNsIDUvqhw" type="2003" element="_rsVVUF9vEe2rXNsIDUvqhw"> | 307 | <children xmi:type="notation:Node" xmi:id="_rsftYF9vEe2rXNsIDUvqhw" type="2003" element="_rsVVUF9vEe2rXNsIDUvqhw"> |
333 | <children xmi:type="notation:Node" xmi:id="_rsgUcF9vEe2rXNsIDUvqhw" type="5007"/> | 308 | <children xmi:type="notation:Node" xmi:id="_rsgUcF9vEe2rXNsIDUvqhw" type="5007"/> |
@@ -336,7 +311,7 @@ | |||
336 | <styles xmi:type="notation:FilteringStyle" xmi:id="_rsgUc19vEe2rXNsIDUvqhw"/> | 311 | <styles xmi:type="notation:FilteringStyle" xmi:id="_rsgUc19vEe2rXNsIDUvqhw"/> |
337 | </children> | 312 | </children> |
338 | <styles xmi:type="notation:ShapeStyle" xmi:id="_rsftYV9vEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | 313 | <styles xmi:type="notation:ShapeStyle" xmi:id="_rsftYV9vEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> |
339 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rsftYl9vEe2rXNsIDUvqhw" x="1968" y="956" width="120" height="100"/> | 314 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rsftYl9vEe2rXNsIDUvqhw" x="2124" y="956" width="120" height="100"/> |
340 | </children> | 315 | </children> |
341 | <children xmi:type="notation:Node" xmi:id="_thrGUF9vEe2rXNsIDUvqhw" type="2003" element="_thaAkF9vEe2rXNsIDUvqhw"> | 316 | <children xmi:type="notation:Node" xmi:id="_thrGUF9vEe2rXNsIDUvqhw" type="2003" element="_thaAkF9vEe2rXNsIDUvqhw"> |
342 | <children xmi:type="notation:Node" xmi:id="_thrGU19vEe2rXNsIDUvqhw" type="5007"/> | 317 | <children xmi:type="notation:Node" xmi:id="_thrGU19vEe2rXNsIDUvqhw" type="5007"/> |
@@ -345,7 +320,7 @@ | |||
345 | <styles xmi:type="notation:FilteringStyle" xmi:id="_thrGVl9vEe2rXNsIDUvqhw"/> | 320 | <styles xmi:type="notation:FilteringStyle" xmi:id="_thrGVl9vEe2rXNsIDUvqhw"/> |
346 | </children> | 321 | </children> |
347 | <styles xmi:type="notation:ShapeStyle" xmi:id="_thrGUV9vEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | 322 | <styles xmi:type="notation:ShapeStyle" xmi:id="_thrGUV9vEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> |
348 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_thrGUl9vEe2rXNsIDUvqhw" x="1746" y="1124" width="120" height="100"/> | 323 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_thrGUl9vEe2rXNsIDUvqhw" x="1902" y="1124" width="120" height="100"/> |
349 | </children> | 324 | </children> |
350 | <children xmi:type="notation:Node" xmi:id="_uqERwF9vEe2rXNsIDUvqhw" type="2003" element="_up7H0F9vEe2rXNsIDUvqhw"> | 325 | <children xmi:type="notation:Node" xmi:id="_uqERwF9vEe2rXNsIDUvqhw" type="2003" element="_up7H0F9vEe2rXNsIDUvqhw"> |
351 | <children xmi:type="notation:Node" xmi:id="_uqERw19vEe2rXNsIDUvqhw" type="5007"/> | 326 | <children xmi:type="notation:Node" xmi:id="_uqERw19vEe2rXNsIDUvqhw" type="5007"/> |
@@ -354,7 +329,7 @@ | |||
354 | <styles xmi:type="notation:FilteringStyle" xmi:id="_uqE40l9vEe2rXNsIDUvqhw"/> | 329 | <styles xmi:type="notation:FilteringStyle" xmi:id="_uqE40l9vEe2rXNsIDUvqhw"/> |
355 | </children> | 330 | </children> |
356 | <styles xmi:type="notation:ShapeStyle" xmi:id="_uqERwV9vEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | 331 | <styles xmi:type="notation:ShapeStyle" xmi:id="_uqERwV9vEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> |
357 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uqERwl9vEe2rXNsIDUvqhw" x="1968" y="1124" width="120" height="100"/> | 332 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uqERwl9vEe2rXNsIDUvqhw" x="2124" y="1124" width="120" height="100"/> |
358 | </children> | 333 | </children> |
359 | <children xmi:type="notation:Node" xmi:id="_1HBuIF9vEe2rXNsIDUvqhw" type="2003" element="_1G5LQF9vEe2rXNsIDUvqhw"> | 334 | <children xmi:type="notation:Node" xmi:id="_1HBuIF9vEe2rXNsIDUvqhw" type="2003" element="_1G5LQF9vEe2rXNsIDUvqhw"> |
360 | <children xmi:type="notation:Node" xmi:id="_1HBuI19vEe2rXNsIDUvqhw" type="5007"/> | 335 | <children xmi:type="notation:Node" xmi:id="_1HBuI19vEe2rXNsIDUvqhw" type="5007"/> |
@@ -363,7 +338,7 @@ | |||
363 | <styles xmi:type="notation:FilteringStyle" xmi:id="_1HBuJl9vEe2rXNsIDUvqhw"/> | 338 | <styles xmi:type="notation:FilteringStyle" xmi:id="_1HBuJl9vEe2rXNsIDUvqhw"/> |
364 | </children> | 339 | </children> |
365 | <styles xmi:type="notation:ShapeStyle" xmi:id="_1HBuIV9vEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8" italic="true"/> | 340 | <styles xmi:type="notation:ShapeStyle" xmi:id="_1HBuIV9vEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8" italic="true"/> |
366 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1HBuIl9vEe2rXNsIDUvqhw" x="1531" y="956" width="135"/> | 341 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1HBuIl9vEe2rXNsIDUvqhw" x="1687" y="956" width="135"/> |
367 | </children> | 342 | </children> |
368 | <children xmi:type="notation:Node" xmi:id="_286RsF9vEe2rXNsIDUvqhw" type="2003" element="_28xu0F9vEe2rXNsIDUvqhw"> | 343 | <children xmi:type="notation:Node" xmi:id="_286RsF9vEe2rXNsIDUvqhw" type="2003" element="_28xu0F9vEe2rXNsIDUvqhw"> |
369 | <children xmi:type="notation:Node" xmi:id="_2864wF9vEe2rXNsIDUvqhw" type="5007"/> | 344 | <children xmi:type="notation:Node" xmi:id="_2864wF9vEe2rXNsIDUvqhw" type="5007"/> |
@@ -372,7 +347,7 @@ | |||
372 | <styles xmi:type="notation:FilteringStyle" xmi:id="_2864w19vEe2rXNsIDUvqhw"/> | 347 | <styles xmi:type="notation:FilteringStyle" xmi:id="_2864w19vEe2rXNsIDUvqhw"/> |
373 | </children> | 348 | </children> |
374 | <styles xmi:type="notation:ShapeStyle" xmi:id="_286RsV9vEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | 349 | <styles xmi:type="notation:ShapeStyle" xmi:id="_286RsV9vEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> |
375 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_286Rsl9vEe2rXNsIDUvqhw" x="1308" y="956"/> | 350 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_286Rsl9vEe2rXNsIDUvqhw" x="1464" y="956"/> |
376 | </children> | 351 | </children> |
377 | <children xmi:type="notation:Node" xmi:id="_HyypsF9wEe2rXNsIDUvqhw" type="2003" element="_HynqkF9wEe2rXNsIDUvqhw"> | 352 | <children xmi:type="notation:Node" xmi:id="_HyypsF9wEe2rXNsIDUvqhw" type="2003" element="_HynqkF9wEe2rXNsIDUvqhw"> |
378 | <children xmi:type="notation:Node" xmi:id="_Hyyps19wEe2rXNsIDUvqhw" type="5007"/> | 353 | <children xmi:type="notation:Node" xmi:id="_Hyyps19wEe2rXNsIDUvqhw" type="5007"/> |
@@ -381,7 +356,7 @@ | |||
381 | <styles xmi:type="notation:FilteringStyle" xmi:id="_Hyyptl9wEe2rXNsIDUvqhw"/> | 356 | <styles xmi:type="notation:FilteringStyle" xmi:id="_Hyyptl9wEe2rXNsIDUvqhw"/> |
382 | </children> | 357 | </children> |
383 | <styles xmi:type="notation:ShapeStyle" xmi:id="_HyypsV9wEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8" italic="true"/> | 358 | <styles xmi:type="notation:ShapeStyle" xmi:id="_HyypsV9wEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8" italic="true"/> |
384 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Hyypsl9wEe2rXNsIDUvqhw" x="1863" y="1280"/> | 359 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Hyypsl9wEe2rXNsIDUvqhw" x="2019" y="1280"/> |
385 | </children> | 360 | </children> |
386 | <children xmi:type="notation:Node" xmi:id="_dzfLYGTvEe2qdtyPWAtoxA" type="2003" element="_dzVaYGTvEe2qdtyPWAtoxA"> | 361 | <children xmi:type="notation:Node" xmi:id="_dzfLYGTvEe2qdtyPWAtoxA" type="2003" element="_dzVaYGTvEe2qdtyPWAtoxA"> |
387 | <children xmi:type="notation:Node" xmi:id="_dzfLY2TvEe2qdtyPWAtoxA" type="5007"/> | 362 | <children xmi:type="notation:Node" xmi:id="_dzfLY2TvEe2qdtyPWAtoxA" type="5007"/> |
@@ -450,7 +425,16 @@ | |||
450 | <styles xmi:type="notation:FilteringStyle" xmi:id="_uudkc89kEe6T2u19X9cqmQ"/> | 425 | <styles xmi:type="notation:FilteringStyle" xmi:id="_uudkc89kEe6T2u19X9cqmQ"/> |
451 | </children> | 426 | </children> |
452 | <styles xmi:type="notation:ShapeStyle" xmi:id="_uuYr8c9kEe6T2u19X9cqmQ" fontName="Noto Sans" fontHeight="8"/> | 427 | <styles xmi:type="notation:ShapeStyle" xmi:id="_uuYr8c9kEe6T2u19X9cqmQ" fontName="Noto Sans" fontHeight="8"/> |
453 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uuYr8s9kEe6T2u19X9cqmQ" x="1174" y="716" width="137" height="100"/> | 428 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uuYr8s9kEe6T2u19X9cqmQ" x="1330" y="716" width="137" height="100"/> |
429 | </children> | ||
430 | <children xmi:type="notation:Node" xmi:id="_jlSckNsVEe6c9ehqpe3s7A" type="2003" element="_jjj-QNsVEe6c9ehqpe3s7A"> | ||
431 | <children xmi:type="notation:Node" xmi:id="_jlWuANsVEe6c9ehqpe3s7A" type="5007"/> | ||
432 | <children xmi:type="notation:Node" xmi:id="_jlXVENsVEe6c9ehqpe3s7A" type="7004"> | ||
433 | <styles xmi:type="notation:SortingStyle" xmi:id="_jlXVEdsVEe6c9ehqpe3s7A"/> | ||
434 | <styles xmi:type="notation:FilteringStyle" xmi:id="_jlXVEtsVEe6c9ehqpe3s7A"/> | ||
435 | </children> | ||
436 | <styles xmi:type="notation:ShapeStyle" xmi:id="_jlSckdsVEe6c9ehqpe3s7A" fontName="Noto Sans" fontHeight="8"/> | ||
437 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_jlScktsVEe6c9ehqpe3s7A" x="1128" y="716" width="147" height="100"/> | ||
454 | </children> | 438 | </children> |
455 | <styles xmi:type="notation:DiagramStyle" xmi:id="_CsZB8qA4EeuqkpDnuik1sg"/> | 439 | <styles xmi:type="notation:DiagramStyle" xmi:id="_CsZB8qA4EeuqkpDnuik1sg"/> |
456 | <edges xmi:type="notation:Edge" xmi:id="_4eaYwKA8EeuqkpDnuik1sg" type="4001" element="_4eU5TqA8EeuqkpDnuik1sg" source="_D1D6MKA4EeuqkpDnuik1sg" target="_xsq_MKA8EeuqkpDnuik1sg"> | 440 | <edges xmi:type="notation:Edge" xmi:id="_4eaYwKA8EeuqkpDnuik1sg" type="4001" element="_4eU5TqA8EeuqkpDnuik1sg" source="_D1D6MKA4EeuqkpDnuik1sg" target="_xsq_MKA8EeuqkpDnuik1sg"> |
@@ -695,17 +679,17 @@ | |||
695 | </edges> | 679 | </edges> |
696 | <edges xmi:type="notation:Edge" xmi:id="_zKMY0AGyEey7cfH5K6RyCw" type="4001" element="_zJpmRgGyEey7cfH5K6RyCw" source="_pdJrwAGyEey7cfH5K6RyCw" target="_xsq_MKA8EeuqkpDnuik1sg"> | 680 | <edges xmi:type="notation:Edge" xmi:id="_zKMY0AGyEey7cfH5K6RyCw" type="4001" element="_zJpmRgGyEey7cfH5K6RyCw" source="_pdJrwAGyEey7cfH5K6RyCw" target="_xsq_MKA8EeuqkpDnuik1sg"> |
697 | <children xmi:type="notation:Node" xmi:id="_zKM_4AGyEey7cfH5K6RyCw" type="6001"> | 681 | <children xmi:type="notation:Node" xmi:id="_zKM_4AGyEey7cfH5K6RyCw" type="6001"> |
698 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zKM_4QGyEey7cfH5K6RyCw" x="-397" y="-12"/> | 682 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zKM_4QGyEey7cfH5K6RyCw" x="-425" y="-12"/> |
699 | </children> | 683 | </children> |
700 | <children xmi:type="notation:Node" xmi:id="_zKM_4gGyEey7cfH5K6RyCw" type="6002"> | 684 | <children xmi:type="notation:Node" xmi:id="_zKM_4gGyEey7cfH5K6RyCw" type="6002"> |
701 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zKM_4wGyEey7cfH5K6RyCw" x="-43"/> | 685 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zKM_4wGyEey7cfH5K6RyCw" x="-71"/> |
702 | </children> | 686 | </children> |
703 | <children xmi:type="notation:Node" xmi:id="_zKM_5AGyEey7cfH5K6RyCw" type="6003"> | 687 | <children xmi:type="notation:Node" xmi:id="_zKM_5AGyEey7cfH5K6RyCw" type="6003"> |
704 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zKM_5QGyEey7cfH5K6RyCw" x="-88" y="10"/> | 688 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zKM_5QGyEey7cfH5K6RyCw" x="-116" y="10"/> |
705 | </children> | 689 | </children> |
706 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_zKMY0QGyEey7cfH5K6RyCw" routing="Rectilinear"/> | 690 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_zKMY0QGyEey7cfH5K6RyCw" routing="Rectilinear"/> |
707 | <styles xmi:type="notation:FontStyle" xmi:id="_zKMY0gGyEey7cfH5K6RyCw" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> | 691 | <styles xmi:type="notation:FontStyle" xmi:id="_zKMY0gGyEey7cfH5K6RyCw" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> |
708 | <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]"/> | 692 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_zKMY0wGyEey7cfH5K6RyCw" points="[-21, -3, -828, 120]$[-21, -23, -828, 100]$[843, -23, 36, 100]$[843, -97, 36, 26]"/> |
709 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_zKNm8AGyEey7cfH5K6RyCw" id="(0.4576271186440678,0.030612244897959183)"/> | 693 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_zKNm8AGyEey7cfH5K6RyCw" id="(0.4576271186440678,0.030612244897959183)"/> |
710 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_zKNm8QGyEey7cfH5K6RyCw" id="(0.0,0.7346938775510204)"/> | 694 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_zKNm8QGyEey7cfH5K6RyCw" id="(0.0,0.7346938775510204)"/> |
711 | </edges> | 695 | </edges> |
@@ -1207,17 +1191,17 @@ | |||
1207 | </edges> | 1191 | </edges> |
1208 | <edges xmi:type="notation:Edge" xmi:id="_iXIY4GTzEe2qdtyPWAtoxA" type="4001" element="_iWzpAmTzEe2qdtyPWAtoxA" source="_QKLK0KA6EeuqkpDnuik1sg" target="_dzfLYGTvEe2qdtyPWAtoxA"> | 1192 | <edges xmi:type="notation:Edge" xmi:id="_iXIY4GTzEe2qdtyPWAtoxA" type="4001" element="_iWzpAmTzEe2qdtyPWAtoxA" source="_QKLK0KA6EeuqkpDnuik1sg" target="_dzfLYGTvEe2qdtyPWAtoxA"> |
1209 | <children xmi:type="notation:Node" xmi:id="_iXIY5GTzEe2qdtyPWAtoxA" type="6001"> | 1193 | <children xmi:type="notation:Node" xmi:id="_iXIY5GTzEe2qdtyPWAtoxA" type="6001"> |
1210 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iXIY5WTzEe2qdtyPWAtoxA" x="-396" y="18"/> | 1194 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iXIY5WTzEe2qdtyPWAtoxA" x="-318" y="18"/> |
1211 | </children> | 1195 | </children> |
1212 | <children xmi:type="notation:Node" xmi:id="_iXIY5mTzEe2qdtyPWAtoxA" type="6002"> | 1196 | <children xmi:type="notation:Node" xmi:id="_iXIY5mTzEe2qdtyPWAtoxA" type="6002"> |
1213 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iXIY52TzEe2qdtyPWAtoxA" x="235" y="-10"/> | 1197 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iXIY52TzEe2qdtyPWAtoxA" x="368" y="-10"/> |
1214 | </children> | 1198 | </children> |
1215 | <children xmi:type="notation:Node" xmi:id="_iXIY6GTzEe2qdtyPWAtoxA" type="6003"> | 1199 | <children xmi:type="notation:Node" xmi:id="_iXIY6GTzEe2qdtyPWAtoxA" type="6003"> |
1216 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iXIY6WTzEe2qdtyPWAtoxA" x="-14" y="10"/> | 1200 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_iXIY6WTzEe2qdtyPWAtoxA" x="9" y="10"/> |
1217 | </children> | 1201 | </children> |
1218 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_iXIY4WTzEe2qdtyPWAtoxA" routing="Rectilinear"/> | 1202 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_iXIY4WTzEe2qdtyPWAtoxA" routing="Rectilinear"/> |
1219 | <styles xmi:type="notation:FontStyle" xmi:id="_iXIY4mTzEe2qdtyPWAtoxA" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> | 1203 | <styles xmi:type="notation:FontStyle" xmi:id="_iXIY4mTzEe2qdtyPWAtoxA" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> |
1220 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_iXIY42TzEe2qdtyPWAtoxA" points="[-72, 48, 975, 5]$[-988, 48, 59, 5]"/> | 1204 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_iXIY42TzEe2qdtyPWAtoxA" points="[-72, 48, 1131, 5]$[-1144, 48, 59, 5]"/> |
1221 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iXIY6mTzEe2qdtyPWAtoxA" id="(0.6101694915254238,0.0)"/> | 1205 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_iXIY6mTzEe2qdtyPWAtoxA" id="(0.6101694915254238,0.0)"/> |
1222 | </edges> | 1206 | </edges> |
1223 | <edges xmi:type="notation:Edge" xmi:id="_q7DhwGTzEe2qdtyPWAtoxA" type="4001" element="_q604amTzEe2qdtyPWAtoxA" source="_zaq8oKA9EeuqkpDnuik1sg" target="_dzfLYGTvEe2qdtyPWAtoxA"> | 1207 | <edges xmi:type="notation:Edge" xmi:id="_q7DhwGTzEe2qdtyPWAtoxA" type="4001" element="_q604amTzEe2qdtyPWAtoxA" source="_zaq8oKA9EeuqkpDnuik1sg" target="_dzfLYGTvEe2qdtyPWAtoxA"> |
@@ -1254,17 +1238,17 @@ | |||
1254 | </edges> | 1238 | </edges> |
1255 | <edges xmi:type="notation:Edge" xmi:id="_UVB0MMBeEe6Mo_-4--GvQg" type="4001" element="_UU0Y5cBeEe6Mo_-4--GvQg" source="_GTtOgMBeEe6Mo_-4--GvQg" target="_e73WIKA9EeuqkpDnuik1sg"> | 1239 | <edges xmi:type="notation:Edge" xmi:id="_UVB0MMBeEe6Mo_-4--GvQg" type="4001" element="_UU0Y5cBeEe6Mo_-4--GvQg" source="_GTtOgMBeEe6Mo_-4--GvQg" target="_e73WIKA9EeuqkpDnuik1sg"> |
1256 | <children xmi:type="notation:Node" xmi:id="_UVB0NMBeEe6Mo_-4--GvQg" type="6001"> | 1240 | <children xmi:type="notation:Node" xmi:id="_UVB0NMBeEe6Mo_-4--GvQg" type="6001"> |
1257 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UVB0NcBeEe6Mo_-4--GvQg" y="-10"/> | 1241 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UVB0NcBeEe6Mo_-4--GvQg" x="12" y="-10"/> |
1258 | </children> | 1242 | </children> |
1259 | <children xmi:type="notation:Node" xmi:id="_UVB0NsBeEe6Mo_-4--GvQg" type="6002"> | 1243 | <children xmi:type="notation:Node" xmi:id="_UVB0NsBeEe6Mo_-4--GvQg" type="6002"> |
1260 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UVB0N8BeEe6Mo_-4--GvQg" y="10"/> | 1244 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UVB0N8BeEe6Mo_-4--GvQg" x="12" y="10"/> |
1261 | </children> | 1245 | </children> |
1262 | <children xmi:type="notation:Node" xmi:id="_UVB0OMBeEe6Mo_-4--GvQg" type="6003"> | 1246 | <children xmi:type="notation:Node" xmi:id="_UVB0OMBeEe6Mo_-4--GvQg" type="6003"> |
1263 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UVB0OcBeEe6Mo_-4--GvQg" y="10"/> | 1247 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UVB0OcBeEe6Mo_-4--GvQg" x="12" y="10"/> |
1264 | </children> | 1248 | </children> |
1265 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_UVB0McBeEe6Mo_-4--GvQg" routing="Tree"/> | 1249 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_UVB0McBeEe6Mo_-4--GvQg" routing="Tree"/> |
1266 | <styles xmi:type="notation:FontStyle" xmi:id="_UVB0MsBeEe6Mo_-4--GvQg" fontName="Noto Sans" fontHeight="8"/> | 1250 | <styles xmi:type="notation:FontStyle" xmi:id="_UVB0MsBeEe6Mo_-4--GvQg" fontName="Noto Sans" fontHeight="8"/> |
1267 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_UVB0M8BeEe6Mo_-4--GvQg" points="[0, 0, -706, 180]$[706, -180, 0, 0]"/> | 1251 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_UVB0M8BeEe6Mo_-4--GvQg" points="[0, -3, -808, 192]$[0, -47, -808, 148]$[809, -47, 1, 148]$[809, -97, 1, 98]"/> |
1268 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_UVCbQMBeEe6Mo_-4--GvQg" id="(0.635593220338983,0.030612244897959183)"/> | 1252 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_UVCbQMBeEe6Mo_-4--GvQg" id="(0.635593220338983,0.030612244897959183)"/> |
1269 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_UVCbQcBeEe6Mo_-4--GvQg" id="(0.5,0.0)"/> | 1253 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_UVCbQcBeEe6Mo_-4--GvQg" id="(0.5,0.0)"/> |
1270 | </edges> | 1254 | </edges> |
@@ -1364,6 +1348,38 @@ | |||
1364 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_RjiF5s9lEe6T2u19X9cqmQ" id="(0.0,0.5)"/> | 1348 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_RjiF5s9lEe6T2u19X9cqmQ" id="(0.0,0.5)"/> |
1365 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_RjiF589lEe6T2u19X9cqmQ" id="(1.0,0.5)"/> | 1349 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_RjiF589lEe6T2u19X9cqmQ" id="(1.0,0.5)"/> |
1366 | </edges> | 1350 | </edges> |
1351 | <edges xmi:type="notation:Edge" xmi:id="_qBfrANsVEe6c9ehqpe3s7A" type="4001" element="_qAygeNsVEe6c9ehqpe3s7A" source="_jlSckNsVEe6c9ehqpe3s7A" target="_e73WIKA9EeuqkpDnuik1sg"> | ||
1352 | <children xmi:type="notation:Node" xmi:id="_qBgSENsVEe6c9ehqpe3s7A" type="6001"> | ||
1353 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qBgSEdsVEe6c9ehqpe3s7A" y="-10"/> | ||
1354 | </children> | ||
1355 | <children xmi:type="notation:Node" xmi:id="_qBgSEtsVEe6c9ehqpe3s7A" type="6002"> | ||
1356 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qBgSE9sVEe6c9ehqpe3s7A" y="10"/> | ||
1357 | </children> | ||
1358 | <children xmi:type="notation:Node" xmi:id="_qBgSFNsVEe6c9ehqpe3s7A" type="6003"> | ||
1359 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qBgSFdsVEe6c9ehqpe3s7A" y="10"/> | ||
1360 | </children> | ||
1361 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_qBfrAdsVEe6c9ehqpe3s7A" routing="Tree"/> | ||
1362 | <styles xmi:type="notation:FontStyle" xmi:id="_qBfrAtsVEe6c9ehqpe3s7A" fontName="Noto Sans" fontHeight="8"/> | ||
1363 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_qBfrA9sVEe6c9ehqpe3s7A" points="[0, 0, 294, 356]$[-294, -356, 0, 0]"/> | ||
1364 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_qBgSFtsVEe6c9ehqpe3s7A" id="(0.31724137931034485,0.01020408163265306)"/> | ||
1365 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_qBgSF9sVEe6c9ehqpe3s7A" id="(0.5,0.0)"/> | ||
1366 | </edges> | ||
1367 | <edges xmi:type="notation:Edge" xmi:id="_EJdSYNsWEe6c9ehqpe3s7A" type="4001" element="_EI0ZOdsWEe6c9ehqpe3s7A" source="_jlSckNsVEe6c9ehqpe3s7A" target="_RzZA0KA5EeuqkpDnuik1sg"> | ||
1368 | <children xmi:type="notation:Node" xmi:id="_EJd5cNsWEe6c9ehqpe3s7A" type="6001"> | ||
1369 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EJd5cdsWEe6c9ehqpe3s7A" y="-10"/> | ||
1370 | </children> | ||
1371 | <children xmi:type="notation:Node" xmi:id="_EJd5ctsWEe6c9ehqpe3s7A" type="6002"> | ||
1372 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EJd5c9sWEe6c9ehqpe3s7A" y="10"/> | ||
1373 | </children> | ||
1374 | <children xmi:type="notation:Node" xmi:id="_EJd5dNsWEe6c9ehqpe3s7A" type="6003"> | ||
1375 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_EJd5ddsWEe6c9ehqpe3s7A" y="10"/> | ||
1376 | </children> | ||
1377 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_EJdSYdsWEe6c9ehqpe3s7A" routing="Tree"/> | ||
1378 | <styles xmi:type="notation:FontStyle" xmi:id="_EJdSYtsWEe6c9ehqpe3s7A" fontName="Noto Sans" fontHeight="8"/> | ||
1379 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_EJdSY9sWEe6c9ehqpe3s7A" points="[0, 0, 115, 598]$[-115, -598, 0, 0]"/> | ||
1380 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EJd5dtsWEe6c9ehqpe3s7A" id="(0.6068965517241379,0.030612244897959183)"/> | ||
1381 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_EJd5d9sWEe6c9ehqpe3s7A" id="(0.5,0.5)"/> | ||
1382 | </edges> | ||
1367 | </data> | 1383 | </data> |
1368 | </ownedAnnotationEntries> | 1384 | </ownedAnnotationEntries> |
1369 | <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_Csiy8KA4EeuqkpDnuik1sg" source="DANNOTATION_CUSTOMIZATION_KEY"> | 1385 | <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_Csiy8KA4EeuqkpDnuik1sg" source="DANNOTATION_CUSTOMIZATION_KEY"> |
@@ -1471,7 +1487,7 @@ | |||
1471 | </ownedStyle> | 1487 | </ownedStyle> |
1472 | <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']"/> | 1488 | <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']"/> |
1473 | </ownedDiagramElements> | 1489 | </ownedDiagramElements> |
1474 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_RzK-YKA5EeuqkpDnuik1sg" name="NamedElement" tooltipText="" incomingEdges="_m-6OTNXtEeuF_d0WEhR3Xw _Smi9eNbNEeuymriYTNxK2g _WUsgHCrcEeyyC-O0_LlY9w _-OYJtGTvEe2qdtyPWAtoxA" width="12" height="10"> | 1490 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_RzK-YKA5EeuqkpDnuik1sg" name="NamedElement" tooltipText="" incomingEdges="_m-6OTNXtEeuF_d0WEhR3Xw _Smi9eNbNEeuymriYTNxK2g _WUsgHCrcEeyyC-O0_LlY9w _-OYJtGTvEe2qdtyPWAtoxA _EI0ZOdsWEe6c9ehqpe3s7A" width="12" height="10"> |
1475 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//NamedElement"/> | 1491 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//NamedElement"/> |
1476 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//NamedElement"/> | 1492 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//NamedElement"/> |
1477 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | 1493 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> |
@@ -1593,7 +1609,7 @@ | |||
1593 | </ownedStyle> | 1609 | </ownedStyle> |
1594 | <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']"/> | 1610 | <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']"/> |
1595 | </ownedDiagramElements> | 1611 | </ownedDiagramElements> |
1596 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_e7ydoKA9EeuqkpDnuik1sg" name="Statement" tooltipText="" incomingEdges="_hU64ZqA9EeuqkpDnuik1sg _mzziwKA9EeuqkpDnuik1sg _plK3JqA9EeuqkpDnuik1sg _vdptgqA9EeuqkpDnuik1sg _WX_5w9bGEeuymriYTNxK2g _s68oXAGyEey7cfH5K6RyCw _UU0Y5cBeEe6Mo_-4--GvQg _8EJzMM9kEe6T2u19X9cqmQ" width="12" height="10"> | 1612 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_e7ydoKA9EeuqkpDnuik1sg" name="Statement" tooltipText="" incomingEdges="_hU64ZqA9EeuqkpDnuik1sg _mzziwKA9EeuqkpDnuik1sg _plK3JqA9EeuqkpDnuik1sg _vdptgqA9EeuqkpDnuik1sg _WX_5w9bGEeuymriYTNxK2g _s68oXAGyEey7cfH5K6RyCw _UU0Y5cBeEe6Mo_-4--GvQg _8EJzMM9kEe6T2u19X9cqmQ _qAygeNsVEe6c9ehqpe3s7A" width="12" height="10"> |
1597 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Statement"/> | 1613 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Statement"/> |
1598 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Statement"/> | 1614 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Statement"/> |
1599 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | 1615 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> |
@@ -2078,50 +2094,6 @@ | |||
2078 | </ownedStyle> | 2094 | </ownedStyle> |
2079 | <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']"/> | 2095 | <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']"/> |
2080 | </ownedDiagramElements> | 2096 | </ownedDiagramElements> |
2081 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_eKVWQBEKEe2AArBmfNpEZA" name="Modality" visible="false" tooltipText="" width="12" height="10"> | ||
2082 | <target xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//Modality"/> | ||
2083 | <semanticElements xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//Modality"/> | ||
2084 | <graphicalFilters xmi:type="diagram:HideFilter" uid="_VqQDoM9lEe6T2u19X9cqmQ"/> | ||
2085 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
2086 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
2087 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
2088 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_eKXLcBEKEe2AArBmfNpEZA" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="221,236,202"> | ||
2089 | <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"/> | ||
2090 | </ownedStyle> | ||
2091 | <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']"/> | ||
2092 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_fs9moBEKEe2AArBmfNpEZA" name="DEFAULT" visible="false" tooltipText=""> | ||
2093 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/DEFAULT"/> | ||
2094 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/DEFAULT"/> | ||
2095 | <ownedStyle xmi:type="diagram:BundledImage" uid="_fs-NsBEKEe2AArBmfNpEZA" labelAlignment="LEFT"> | ||
2096 | <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"/> | ||
2097 | </ownedStyle> | ||
2098 | <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']"/> | ||
2099 | </ownedElements> | ||
2100 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_gO3Z0BEKEe2AArBmfNpEZA" name="MAY" visible="false" tooltipText=""> | ||
2101 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/MAY"/> | ||
2102 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/MAY"/> | ||
2103 | <ownedStyle xmi:type="diagram:BundledImage" uid="_gO4A4BEKEe2AArBmfNpEZA" labelAlignment="LEFT"> | ||
2104 | <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"/> | ||
2105 | </ownedStyle> | ||
2106 | <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']"/> | ||
2107 | </ownedElements> | ||
2108 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_gpdEEBEKEe2AArBmfNpEZA" name="MUST" visible="false" tooltipText=""> | ||
2109 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/MUST"/> | ||
2110 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/MUST"/> | ||
2111 | <ownedStyle xmi:type="diagram:BundledImage" uid="_gpdEEREKEe2AArBmfNpEZA" labelAlignment="LEFT"> | ||
2112 | <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"/> | ||
2113 | </ownedStyle> | ||
2114 | <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']"/> | ||
2115 | </ownedElements> | ||
2116 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_uumz0F4MEe2m7IaHDkh2Xg" name="CURRENT" visible="false" tooltipText=""> | ||
2117 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/CURRENT"/> | ||
2118 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/CURRENT"/> | ||
2119 | <ownedStyle xmi:type="diagram:BundledImage" uid="_uuna4F4MEe2m7IaHDkh2Xg" labelAlignment="LEFT"> | ||
2120 | <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"/> | ||
2121 | </ownedStyle> | ||
2122 | <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']"/> | ||
2123 | </ownedElements> | ||
2124 | </ownedDiagramElements> | ||
2125 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_xpDfUDNlEe2fD4dIhR_vzA" name="ReferenceKind" tooltipText="" width="12" height="10"> | 2097 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_xpDfUDNlEe2fD4dIhR_vzA" name="ReferenceKind" tooltipText="" width="12" height="10"> |
2126 | <target xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//ReferenceKind"/> | 2098 | <target xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//ReferenceKind"/> |
2127 | <semanticElements xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//ReferenceKind"/> | 2099 | <semanticElements xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//ReferenceKind"/> |
@@ -2673,6 +2645,41 @@ | |||
2673 | </ownedStyle> | 2645 | </ownedStyle> |
2674 | <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']"/> | 2646 | <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']"/> |
2675 | </ownedDiagramElements> | 2647 | </ownedDiagramElements> |
2648 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_jjj-QNsVEe6c9ehqpe3s7A" name="AggregatorDeclaration" tooltipText="" outgoingEdges="_qAygeNsVEe6c9ehqpe3s7A _EI0ZOdsWEe6c9ehqpe3s7A" width="12" height="10"> | ||
2649 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregatorDeclaration"/> | ||
2650 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregatorDeclaration"/> | ||
2651 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
2652 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
2653 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
2654 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_jjlMYNsVEe6c9ehqpe3s7A" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> | ||
2655 | <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"/> | ||
2656 | </ownedStyle> | ||
2657 | <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']"/> | ||
2658 | </ownedDiagramElements> | ||
2659 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_qAygeNsVEe6c9ehqpe3s7A" sourceNode="_jjj-QNsVEe6c9ehqpe3s7A" targetNode="_e7ydoKA9EeuqkpDnuik1sg"> | ||
2660 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregatorDeclaration"/> | ||
2661 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregatorDeclaration"/> | ||
2662 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_qAygedsVEe6c9ehqpe3s7A" lineStyle="dash" targetArrow="InputClosedArrow" routingStyle="tree"> | ||
2663 | <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"/> | ||
2664 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_qAygetsVEe6c9ehqpe3s7A" showIcon="false"> | ||
2665 | <labelFormat>italic</labelFormat> | ||
2666 | </beginLabelStyle> | ||
2667 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_qAyge9sVEe6c9ehqpe3s7A" showIcon="false"/> | ||
2668 | </ownedStyle> | ||
2669 | <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']"/> | ||
2670 | </ownedDiagramElements> | ||
2671 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_EI0ZOdsWEe6c9ehqpe3s7A" sourceNode="_jjj-QNsVEe6c9ehqpe3s7A" targetNode="_RzK-YKA5EeuqkpDnuik1sg"> | ||
2672 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregatorDeclaration"/> | ||
2673 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregatorDeclaration"/> | ||
2674 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_EI0ZOtsWEe6c9ehqpe3s7A" targetArrow="InputClosedArrow" routingStyle="tree"> | ||
2675 | <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"/> | ||
2676 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_EI0ZO9sWEe6c9ehqpe3s7A" showIcon="false"> | ||
2677 | <labelFormat>italic</labelFormat> | ||
2678 | </beginLabelStyle> | ||
2679 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_EI0ZPNsWEe6c9ehqpe3s7A" showIcon="false"/> | ||
2680 | </ownedStyle> | ||
2681 | <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']"/> | ||
2682 | </ownedDiagramElements> | ||
2676 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> | 2683 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> |
2677 | <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_CsWlsKA4EeuqkpDnuik1sg"/> | 2684 | <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_CsWlsKA4EeuqkpDnuik1sg"/> |
2678 | <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/> | 2685 | <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/> |
@@ -2717,7 +2724,7 @@ | |||
2717 | <styles xmi:type="notation:FilteringStyle" xmi:id="_bTgeLF3tEe2LuOZzJ_LhLg"/> | 2724 | <styles xmi:type="notation:FilteringStyle" xmi:id="_bTgeLF3tEe2LuOZzJ_LhLg"/> |
2718 | </children> | 2725 | </children> |
2719 | <styles xmi:type="notation:ShapeStyle" xmi:id="_bTgeJ13tEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> | 2726 | <styles xmi:type="notation:ShapeStyle" xmi:id="_bTgeJ13tEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> |
2720 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bTgeKF3tEe2LuOZzJ_LhLg" x="2127" y="168" width="120" height="100"/> | 2727 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_bTgeKF3tEe2LuOZzJ_LhLg" x="1955" y="168" width="120" height="100"/> |
2721 | </children> | 2728 | </children> |
2722 | <children xmi:type="notation:Node" xmi:id="_meWJcF3uEe2LuOZzJ_LhLg" type="2003" element="_mdrbEF3uEe2LuOZzJ_LhLg"> | 2729 | <children xmi:type="notation:Node" xmi:id="_meWJcF3uEe2LuOZzJ_LhLg" type="2003" element="_mdrbEF3uEe2LuOZzJ_LhLg"> |
2723 | <children xmi:type="notation:Node" xmi:id="_meWwgF3uEe2LuOZzJ_LhLg" type="5007"/> | 2730 | <children xmi:type="notation:Node" xmi:id="_meWwgF3uEe2LuOZzJ_LhLg" type="5007"/> |
@@ -2768,11 +2775,23 @@ | |||
2768 | <styles xmi:type="notation:FontStyle" xmi:id="_n5Y5MV3wEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> | 2775 | <styles xmi:type="notation:FontStyle" xmi:id="_n5Y5MV3wEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> |
2769 | <layoutConstraint xmi:type="notation:Location" xmi:id="_n5Y5Ml3wEe2LuOZzJ_LhLg"/> | 2776 | <layoutConstraint xmi:type="notation:Location" xmi:id="_n5Y5Ml3wEe2LuOZzJ_LhLg"/> |
2770 | </children> | 2777 | </children> |
2778 | <children xmi:type="notation:Node" xmi:id="_BjWXkNf8Ee66mJJuF_pPGg" type="3010" element="_BiDXENf8Ee66mJJuF_pPGg"> | ||
2779 | <styles xmi:type="notation:FontStyle" xmi:id="_BjWXkdf8Ee66mJJuF_pPGg" fontName="Noto Sans" fontHeight="8"/> | ||
2780 | <layoutConstraint xmi:type="notation:Location" xmi:id="_BjWXktf8Ee66mJJuF_pPGg"/> | ||
2781 | </children> | ||
2782 | <children xmi:type="notation:Node" xmi:id="_CG2GMNf8Ee66mJJuF_pPGg" type="3010" element="_CGRecNf8Ee66mJJuF_pPGg"> | ||
2783 | <styles xmi:type="notation:FontStyle" xmi:id="_CG2GMdf8Ee66mJJuF_pPGg" fontName="Noto Sans" fontHeight="8"/> | ||
2784 | <layoutConstraint xmi:type="notation:Location" xmi:id="_CG2GMtf8Ee66mJJuF_pPGg"/> | ||
2785 | </children> | ||
2786 | <children xmi:type="notation:Node" xmi:id="_CpQPsNf8Ee66mJJuF_pPGg" type="3010" element="_CopLsNf8Ee66mJJuF_pPGg"> | ||
2787 | <styles xmi:type="notation:FontStyle" xmi:id="_CpQPsdf8Ee66mJJuF_pPGg" fontName="Noto Sans" fontHeight="8"/> | ||
2788 | <layoutConstraint xmi:type="notation:Location" xmi:id="_CpQPstf8Ee66mJJuF_pPGg"/> | ||
2789 | </children> | ||
2771 | <styles xmi:type="notation:SortingStyle" xmi:id="_ccRVpV3wEe2LuOZzJ_LhLg"/> | 2790 | <styles xmi:type="notation:SortingStyle" xmi:id="_ccRVpV3wEe2LuOZzJ_LhLg"/> |
2772 | <styles xmi:type="notation:FilteringStyle" xmi:id="_ccRVpl3wEe2LuOZzJ_LhLg"/> | 2791 | <styles xmi:type="notation:FilteringStyle" xmi:id="_ccRVpl3wEe2LuOZzJ_LhLg"/> |
2773 | </children> | 2792 | </children> |
2774 | <styles xmi:type="notation:ShapeStyle" xmi:id="_ccRVoV3wEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> | 2793 | <styles xmi:type="notation:ShapeStyle" xmi:id="_ccRVoV3wEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> |
2775 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ccRVol3wEe2LuOZzJ_LhLg" x="1788" y="450" width="120" height="117"/> | 2794 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ccRVol3wEe2LuOZzJ_LhLg" x="1616" y="450" width="120" height="165"/> |
2776 | </children> | 2795 | </children> |
2777 | <children xmi:type="notation:Node" xmi:id="_R7b9sF38Ee2LuOZzJ_LhLg" type="2003" element="_R7XFMF38Ee2LuOZzJ_LhLg"> | 2796 | <children xmi:type="notation:Node" xmi:id="_R7b9sF38Ee2LuOZzJ_LhLg" type="2003" element="_R7XFMF38Ee2LuOZzJ_LhLg"> |
2778 | <children xmi:type="notation:Node" xmi:id="_R7b9s138Ee2LuOZzJ_LhLg" type="5007"/> | 2797 | <children xmi:type="notation:Node" xmi:id="_R7b9s138Ee2LuOZzJ_LhLg" type="5007"/> |
@@ -2808,41 +2827,12 @@ | |||
2808 | <children xmi:type="notation:Node" xmi:id="_3BISYF4GEe2LuOZzJ_LhLg" type="2003" element="_3A1XcF4GEe2LuOZzJ_LhLg"> | 2827 | <children xmi:type="notation:Node" xmi:id="_3BISYF4GEe2LuOZzJ_LhLg" type="2003" element="_3A1XcF4GEe2LuOZzJ_LhLg"> |
2809 | <children xmi:type="notation:Node" xmi:id="_3BISY14GEe2LuOZzJ_LhLg" type="5007"/> | 2828 | <children xmi:type="notation:Node" xmi:id="_3BISY14GEe2LuOZzJ_LhLg" type="5007"/> |
2810 | <children xmi:type="notation:Node" xmi:id="_3BISZF4GEe2LuOZzJ_LhLg" type="7004"> | 2829 | <children xmi:type="notation:Node" xmi:id="_3BISZF4GEe2LuOZzJ_LhLg" type="7004"> |
2811 | <children xmi:type="notation:Node" xmi:id="_naQcIF9vEe2rXNsIDUvqhw" type="3010" element="_nZoxHl9vEe2rXNsIDUvqhw"> | ||
2812 | <styles xmi:type="notation:FontStyle" xmi:id="_naQcIV9vEe2rXNsIDUvqhw" fontName="Noto Sans" fontHeight="8"/> | ||
2813 | <layoutConstraint xmi:type="notation:Location" xmi:id="_naQcIl9vEe2rXNsIDUvqhw"/> | ||
2814 | </children> | ||
2815 | <styles xmi:type="notation:SortingStyle" xmi:id="_3BISZV4GEe2LuOZzJ_LhLg"/> | 2830 | <styles xmi:type="notation:SortingStyle" xmi:id="_3BISZV4GEe2LuOZzJ_LhLg"/> |
2816 | <styles xmi:type="notation:FilteringStyle" xmi:id="_3BISZl4GEe2LuOZzJ_LhLg"/> | 2831 | <styles xmi:type="notation:FilteringStyle" xmi:id="_3BISZl4GEe2LuOZzJ_LhLg"/> |
2817 | </children> | 2832 | </children> |
2818 | <styles xmi:type="notation:ShapeStyle" xmi:id="_3BISYV4GEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> | 2833 | <styles xmi:type="notation:ShapeStyle" xmi:id="_3BISYV4GEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> |
2819 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3BISYl4GEe2LuOZzJ_LhLg" x="919" y="312" width="147" height="100"/> | 2834 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3BISYl4GEe2LuOZzJ_LhLg" x="919" y="312" width="147" height="100"/> |
2820 | </children> | 2835 | </children> |
2821 | <children xmi:type="notation:Node" xmi:id="_Yrrhdl4HEe2LuOZzJ_LhLg" type="2003" element="_YrdfAF4HEe2LuOZzJ_LhLg"> | ||
2822 | <children xmi:type="notation:Node" xmi:id="_YrsIgF4HEe2LuOZzJ_LhLg" type="5007"/> | ||
2823 | <children xmi:type="notation:Node" xmi:id="_YrsIgV4HEe2LuOZzJ_LhLg" type="7004"> | ||
2824 | <children xmi:type="notation:Node" xmi:id="_ZYoHAF4HEe2LuOZzJ_LhLg" type="3010" element="_ZYVzIF4HEe2LuOZzJ_LhLg"> | ||
2825 | <styles xmi:type="notation:FontStyle" xmi:id="_ZYoHAV4HEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> | ||
2826 | <layoutConstraint xmi:type="notation:Location" xmi:id="_ZYoHAl4HEe2LuOZzJ_LhLg"/> | ||
2827 | </children> | ||
2828 | <children xmi:type="notation:Node" xmi:id="_Zy7dYF4HEe2LuOZzJ_LhLg" type="3010" element="_Zyjp8F4HEe2LuOZzJ_LhLg"> | ||
2829 | <styles xmi:type="notation:FontStyle" xmi:id="_Zy7dYV4HEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> | ||
2830 | <layoutConstraint xmi:type="notation:Location" xmi:id="_Zy7dYl4HEe2LuOZzJ_LhLg"/> | ||
2831 | </children> | ||
2832 | <children xmi:type="notation:Node" xmi:id="_aD__QF4HEe2LuOZzJ_LhLg" type="3010" element="_aDuScF4HEe2LuOZzJ_LhLg"> | ||
2833 | <styles xmi:type="notation:FontStyle" xmi:id="_aD__QV4HEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> | ||
2834 | <layoutConstraint xmi:type="notation:Location" xmi:id="_aD__Ql4HEe2LuOZzJ_LhLg"/> | ||
2835 | </children> | ||
2836 | <children xmi:type="notation:Node" xmi:id="_aVHkcF4HEe2LuOZzJ_LhLg" type="3010" element="_aU4T4F4HEe2LuOZzJ_LhLg"> | ||
2837 | <styles xmi:type="notation:FontStyle" xmi:id="_aVHkcV4HEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> | ||
2838 | <layoutConstraint xmi:type="notation:Location" xmi:id="_aVHkcl4HEe2LuOZzJ_LhLg"/> | ||
2839 | </children> | ||
2840 | <styles xmi:type="notation:SortingStyle" xmi:id="_YrsIgl4HEe2LuOZzJ_LhLg"/> | ||
2841 | <styles xmi:type="notation:FilteringStyle" xmi:id="_YrsIg14HEe2LuOZzJ_LhLg"/> | ||
2842 | </children> | ||
2843 | <styles xmi:type="notation:ShapeStyle" xmi:id="_Yrrhd14HEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> | ||
2844 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_YrrheF4HEe2LuOZzJ_LhLg" x="933" y="446" width="120" height="106"/> | ||
2845 | </children> | ||
2846 | <children xmi:type="notation:Node" xmi:id="_87Ju4F4IEe2LuOZzJ_LhLg" type="2003" element="_86zJkF4IEe2LuOZzJ_LhLg"> | 2836 | <children xmi:type="notation:Node" xmi:id="_87Ju4F4IEe2LuOZzJ_LhLg" type="2003" element="_86zJkF4IEe2LuOZzJ_LhLg"> |
2847 | <children xmi:type="notation:Node" xmi:id="_87Ju414IEe2LuOZzJ_LhLg" type="5007"/> | 2837 | <children xmi:type="notation:Node" xmi:id="_87Ju414IEe2LuOZzJ_LhLg" type="5007"/> |
2848 | <children xmi:type="notation:Node" xmi:id="_87Ju5F4IEe2LuOZzJ_LhLg" type="7004"> | 2838 | <children xmi:type="notation:Node" xmi:id="_87Ju5F4IEe2LuOZzJ_LhLg" type="7004"> |
@@ -2850,7 +2840,7 @@ | |||
2850 | <styles xmi:type="notation:FilteringStyle" xmi:id="_87Ju5l4IEe2LuOZzJ_LhLg"/> | 2840 | <styles xmi:type="notation:FilteringStyle" xmi:id="_87Ju5l4IEe2LuOZzJ_LhLg"/> |
2851 | </children> | 2841 | </children> |
2852 | <styles xmi:type="notation:ShapeStyle" xmi:id="_87Ju4V4IEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8" italic="true"/> | 2842 | <styles xmi:type="notation:ShapeStyle" xmi:id="_87Ju4V4IEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8" italic="true"/> |
2853 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_87Ju4l4IEe2LuOZzJ_LhLg" x="2880" y="168"/> | 2843 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_87Ju4l4IEe2LuOZzJ_LhLg" x="2820" y="168"/> |
2854 | </children> | 2844 | </children> |
2855 | <children xmi:type="notation:Node" xmi:id="_JYXdgF4JEe2LuOZzJ_LhLg" type="2003" element="_JYQIwF4JEe2LuOZzJ_LhLg"> | 2845 | <children xmi:type="notation:Node" xmi:id="_JYXdgF4JEe2LuOZzJ_LhLg" type="2003" element="_JYQIwF4JEe2LuOZzJ_LhLg"> |
2856 | <children xmi:type="notation:Node" xmi:id="_JYXdg14JEe2LuOZzJ_LhLg" type="5007"/> | 2846 | <children xmi:type="notation:Node" xmi:id="_JYXdg14JEe2LuOZzJ_LhLg" type="5007"/> |
@@ -2863,7 +2853,7 @@ | |||
2863 | <styles xmi:type="notation:FilteringStyle" xmi:id="_JYXdhl4JEe2LuOZzJ_LhLg"/> | 2853 | <styles xmi:type="notation:FilteringStyle" xmi:id="_JYXdhl4JEe2LuOZzJ_LhLg"/> |
2864 | </children> | 2854 | </children> |
2865 | <styles xmi:type="notation:ShapeStyle" xmi:id="_JYXdgV4JEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> | 2855 | <styles xmi:type="notation:ShapeStyle" xmi:id="_JYXdgV4JEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> |
2866 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JYXdgl4JEe2LuOZzJ_LhLg" x="2628" y="312"/> | 2856 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JYXdgl4JEe2LuOZzJ_LhLg" x="2456" y="312"/> |
2867 | </children> | 2857 | </children> |
2868 | <children xmi:type="notation:Node" xmi:id="_JYYEkF4JEe2LuOZzJ_LhLg" type="2003" element="_JYQIw14JEe2LuOZzJ_LhLg"> | 2858 | <children xmi:type="notation:Node" xmi:id="_JYYEkF4JEe2LuOZzJ_LhLg" type="2003" element="_JYQIw14JEe2LuOZzJ_LhLg"> |
2869 | <children xmi:type="notation:Node" xmi:id="_JYYEk14JEe2LuOZzJ_LhLg" type="5007"/> | 2859 | <children xmi:type="notation:Node" xmi:id="_JYYEk14JEe2LuOZzJ_LhLg" type="5007"/> |
@@ -2876,7 +2866,7 @@ | |||
2876 | <styles xmi:type="notation:FilteringStyle" xmi:id="_JYYEll4JEe2LuOZzJ_LhLg"/> | 2866 | <styles xmi:type="notation:FilteringStyle" xmi:id="_JYYEll4JEe2LuOZzJ_LhLg"/> |
2877 | </children> | 2867 | </children> |
2878 | <styles xmi:type="notation:ShapeStyle" xmi:id="_JYYEkV4JEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> | 2868 | <styles xmi:type="notation:ShapeStyle" xmi:id="_JYYEkV4JEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> |
2879 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JYYEkl4JEe2LuOZzJ_LhLg" x="2777" y="312"/> | 2869 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JYYEkl4JEe2LuOZzJ_LhLg" x="2605" y="312"/> |
2880 | </children> | 2870 | </children> |
2881 | <children xmi:type="notation:Node" xmi:id="_JYYEl14JEe2LuOZzJ_LhLg" type="2003" element="_JYQv0l4JEe2LuOZzJ_LhLg"> | 2871 | <children xmi:type="notation:Node" xmi:id="_JYYEl14JEe2LuOZzJ_LhLg" type="2003" element="_JYQv0l4JEe2LuOZzJ_LhLg"> |
2882 | <children xmi:type="notation:Node" xmi:id="_JYYEml4JEe2LuOZzJ_LhLg" type="5007"/> | 2872 | <children xmi:type="notation:Node" xmi:id="_JYYEml4JEe2LuOZzJ_LhLg" type="5007"/> |
@@ -2889,7 +2879,7 @@ | |||
2889 | <styles xmi:type="notation:FilteringStyle" xmi:id="_JYYEnV4JEe2LuOZzJ_LhLg"/> | 2879 | <styles xmi:type="notation:FilteringStyle" xmi:id="_JYYEnV4JEe2LuOZzJ_LhLg"/> |
2890 | </children> | 2880 | </children> |
2891 | <styles xmi:type="notation:ShapeStyle" xmi:id="_JYYEmF4JEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> | 2881 | <styles xmi:type="notation:ShapeStyle" xmi:id="_JYYEmF4JEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> |
2892 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JYYEmV4JEe2LuOZzJ_LhLg" x="2964" y="312"/> | 2882 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JYYEmV4JEe2LuOZzJ_LhLg" x="2792" y="312"/> |
2893 | </children> | 2883 | </children> |
2894 | <children xmi:type="notation:Node" xmi:id="_9AqPEF4KEe2m7IaHDkh2Xg" type="2003" element="_9AeB0F4KEe2m7IaHDkh2Xg"> | 2884 | <children xmi:type="notation:Node" xmi:id="_9AqPEF4KEe2m7IaHDkh2Xg" type="2003" element="_9AeB0F4KEe2m7IaHDkh2Xg"> |
2895 | <children xmi:type="notation:Node" xmi:id="_9ArdMF4KEe2m7IaHDkh2Xg" type="5007"/> | 2885 | <children xmi:type="notation:Node" xmi:id="_9ArdMF4KEe2m7IaHDkh2Xg" type="5007"/> |
@@ -2920,7 +2910,7 @@ | |||
2920 | <styles xmi:type="notation:FilteringStyle" xmi:id="_GNwrhmTUEe2qdtyPWAtoxA"/> | 2910 | <styles xmi:type="notation:FilteringStyle" xmi:id="_GNwrhmTUEe2qdtyPWAtoxA"/> |
2921 | </children> | 2911 | </children> |
2922 | <styles xmi:type="notation:ShapeStyle" xmi:id="_GNwrgWTUEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> | 2912 | <styles xmi:type="notation:ShapeStyle" xmi:id="_GNwrgWTUEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> |
2923 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GNwrgmTUEe2qdtyPWAtoxA" x="2124" y="312" width="123"/> | 2913 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GNwrgmTUEe2qdtyPWAtoxA" x="1952" y="312" width="123"/> |
2924 | </children> | 2914 | </children> |
2925 | <children xmi:type="notation:Node" xmi:id="_M-upAGTUEe2qdtyPWAtoxA" type="2003" element="_M-ZR0GTUEe2qdtyPWAtoxA"> | 2915 | <children xmi:type="notation:Node" xmi:id="_M-upAGTUEe2qdtyPWAtoxA" type="2003" element="_M-ZR0GTUEe2qdtyPWAtoxA"> |
2926 | <children xmi:type="notation:Node" xmi:id="_M-upA2TUEe2qdtyPWAtoxA" type="5007"/> | 2916 | <children xmi:type="notation:Node" xmi:id="_M-upA2TUEe2qdtyPWAtoxA" type="5007"/> |
@@ -2933,7 +2923,7 @@ | |||
2933 | <styles xmi:type="notation:FilteringStyle" xmi:id="_M-upBmTUEe2qdtyPWAtoxA"/> | 2923 | <styles xmi:type="notation:FilteringStyle" xmi:id="_M-upBmTUEe2qdtyPWAtoxA"/> |
2934 | </children> | 2924 | </children> |
2935 | <styles xmi:type="notation:ShapeStyle" xmi:id="_M-upAWTUEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> | 2925 | <styles xmi:type="notation:ShapeStyle" xmi:id="_M-upAWTUEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> |
2936 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_M-upAmTUEe2qdtyPWAtoxA" x="1780" y="312" width="135" height="100"/> | 2926 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_M-upAmTUEe2qdtyPWAtoxA" x="1608" y="312" width="135" height="100"/> |
2937 | </children> | 2927 | </children> |
2938 | <children xmi:type="notation:Node" xmi:id="_QkXS8GTUEe2qdtyPWAtoxA" type="2003" element="_QkP-MGTUEe2qdtyPWAtoxA"> | 2928 | <children xmi:type="notation:Node" xmi:id="_QkXS8GTUEe2qdtyPWAtoxA" type="2003" element="_QkP-MGTUEe2qdtyPWAtoxA"> |
2939 | <children xmi:type="notation:Node" xmi:id="_QkXS82TUEe2qdtyPWAtoxA" type="5007"/> | 2929 | <children xmi:type="notation:Node" xmi:id="_QkXS82TUEe2qdtyPWAtoxA" type="5007"/> |
@@ -2966,14 +2956,6 @@ | |||
2966 | <styles xmi:type="notation:FontStyle" xmi:id="_pZfy4WgpEe24RpwpWgpkFQ" fontName="Noto Sans" fontHeight="8"/> | 2956 | <styles xmi:type="notation:FontStyle" xmi:id="_pZfy4WgpEe24RpwpWgpkFQ" fontName="Noto Sans" fontHeight="8"/> |
2967 | <layoutConstraint xmi:type="notation:Location" xmi:id="_pZfy4mgpEe24RpwpWgpkFQ"/> | 2957 | <layoutConstraint xmi:type="notation:Location" xmi:id="_pZfy4mgpEe24RpwpWgpkFQ"/> |
2968 | </children> | 2958 | </children> |
2969 | <children xmi:type="notation:Node" xmi:id="_BuRG0GkFEe24rIYSlCjKHA" type="3010" element="_BtK6oGkFEe24rIYSlCjKHA"> | ||
2970 | <styles xmi:type="notation:FontStyle" xmi:id="_BuRG0WkFEe24rIYSlCjKHA" fontName="Noto Sans" fontHeight="8"/> | ||
2971 | <layoutConstraint xmi:type="notation:Location" xmi:id="_BuRG0mkFEe24rIYSlCjKHA"/> | ||
2972 | </children> | ||
2973 | <children xmi:type="notation:Node" xmi:id="_dTWMcGkFEe24rIYSlCjKHA" type="3010" element="_dSepwGkFEe24rIYSlCjKHA"> | ||
2974 | <styles xmi:type="notation:FontStyle" xmi:id="_dTWMcWkFEe24rIYSlCjKHA" fontName="Noto Sans" fontHeight="8"/> | ||
2975 | <layoutConstraint xmi:type="notation:Location" xmi:id="_dTWMcmkFEe24rIYSlCjKHA"/> | ||
2976 | </children> | ||
2977 | <children xmi:type="notation:Node" xmi:id="_eqflkGkFEe24rIYSlCjKHA" type="3010" element="_eqCSkGkFEe24rIYSlCjKHA"> | 2959 | <children xmi:type="notation:Node" xmi:id="_eqflkGkFEe24rIYSlCjKHA" type="3010" element="_eqCSkGkFEe24rIYSlCjKHA"> |
2978 | <styles xmi:type="notation:FontStyle" xmi:id="_eqflkWkFEe24rIYSlCjKHA" fontName="Noto Sans" fontHeight="8"/> | 2960 | <styles xmi:type="notation:FontStyle" xmi:id="_eqflkWkFEe24rIYSlCjKHA" fontName="Noto Sans" fontHeight="8"/> |
2979 | <layoutConstraint xmi:type="notation:Location" xmi:id="_eqflkmkFEe24rIYSlCjKHA"/> | 2961 | <layoutConstraint xmi:type="notation:Location" xmi:id="_eqflkmkFEe24rIYSlCjKHA"/> |
@@ -2986,7 +2968,7 @@ | |||
2986 | <styles xmi:type="notation:FilteringStyle" xmi:id="_QkXS9mTUEe2qdtyPWAtoxA"/> | 2968 | <styles xmi:type="notation:FilteringStyle" xmi:id="_QkXS9mTUEe2qdtyPWAtoxA"/> |
2987 | </children> | 2969 | </children> |
2988 | <styles xmi:type="notation:ShapeStyle" xmi:id="_QkXS8WTUEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> | 2970 | <styles xmi:type="notation:ShapeStyle" xmi:id="_QkXS8WTUEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> |
2989 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QkXS8mTUEe2qdtyPWAtoxA" x="2126" y="448" height="215"/> | 2971 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QkXS8mTUEe2qdtyPWAtoxA" x="1954" y="448" height="179"/> |
2990 | </children> | 2972 | </children> |
2991 | <children xmi:type="notation:Node" xmi:id="_36XqIGTuEe2qdtyPWAtoxA" type="2003" element="_36CS8GTuEe2qdtyPWAtoxA"> | 2973 | <children xmi:type="notation:Node" xmi:id="_36XqIGTuEe2qdtyPWAtoxA" type="2003" element="_36CS8GTuEe2qdtyPWAtoxA"> |
2992 | <children xmi:type="notation:Node" xmi:id="_36YRMGTuEe2qdtyPWAtoxA" type="5007"/> | 2974 | <children xmi:type="notation:Node" xmi:id="_36YRMGTuEe2qdtyPWAtoxA" type="5007"/> |
@@ -3028,44 +3010,6 @@ | |||
3028 | <styles xmi:type="notation:ShapeStyle" xmi:id="_Z0bU0WTvEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> | 3010 | <styles xmi:type="notation:ShapeStyle" xmi:id="_Z0bU0WTvEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> |
3029 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Z0bU0mTvEe2qdtyPWAtoxA" x="182" y="312" width="120" height="100"/> | 3011 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Z0bU0mTvEe2qdtyPWAtoxA" x="182" y="312" width="120" height="100"/> |
3030 | </children> | 3012 | </children> |
3031 | <children xmi:type="notation:Node" xmi:id="_DNRsUGTwEe2qdtyPWAtoxA" type="2003" element="_DM_YcGTwEe2qdtyPWAtoxA"> | ||
3032 | <children xmi:type="notation:Node" xmi:id="_DNRsU2TwEe2qdtyPWAtoxA" type="5007"/> | ||
3033 | <children xmi:type="notation:Node" xmi:id="_DNRsVGTwEe2qdtyPWAtoxA" type="7004"> | ||
3034 | <children xmi:type="notation:Node" xmi:id="_GEP5cGTwEe2qdtyPWAtoxA" type="3010" element="_GD-MoGTwEe2qdtyPWAtoxA"> | ||
3035 | <styles xmi:type="notation:FontStyle" xmi:id="_GEP5cWTwEe2qdtyPWAtoxA" fontColor="2697711" fontName="Noto Sans" fontHeight="8"/> | ||
3036 | <layoutConstraint xmi:type="notation:Location" xmi:id="_GEP5cmTwEe2qdtyPWAtoxA"/> | ||
3037 | </children> | ||
3038 | <styles xmi:type="notation:SortingStyle" xmi:id="_DNRsVWTwEe2qdtyPWAtoxA"/> | ||
3039 | <styles xmi:type="notation:FilteringStyle" xmi:id="_DNRsVmTwEe2qdtyPWAtoxA"/> | ||
3040 | </children> | ||
3041 | <styles xmi:type="notation:ShapeStyle" xmi:id="_DNRsUWTwEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> | ||
3042 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DNRsUmTwEe2qdtyPWAtoxA" x="1608" y="312" width="120" height="100"/> | ||
3043 | </children> | ||
3044 | <children xmi:type="notation:Node" xmi:id="_FOjAgGTwEe2qdtyPWAtoxA" type="2003" element="_FOadoGTwEe2qdtyPWAtoxA"> | ||
3045 | <children xmi:type="notation:Node" xmi:id="_FOjnkGTwEe2qdtyPWAtoxA" type="5007"/> | ||
3046 | <children xmi:type="notation:Node" xmi:id="_FOjnkWTwEe2qdtyPWAtoxA" type="7004"> | ||
3047 | <children xmi:type="notation:Node" xmi:id="_FOjnlGTwEe2qdtyPWAtoxA" type="3010" element="_FOevIGTwEe2qdtyPWAtoxA"> | ||
3048 | <styles xmi:type="notation:FontStyle" xmi:id="_FOjnlWTwEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> | ||
3049 | <layoutConstraint xmi:type="notation:Location" xmi:id="_FOjnlmTwEe2qdtyPWAtoxA"/> | ||
3050 | </children> | ||
3051 | <children xmi:type="notation:Node" xmi:id="_FOjnl2TwEe2qdtyPWAtoxA" type="3010" element="_FOevImTwEe2qdtyPWAtoxA"> | ||
3052 | <styles xmi:type="notation:FontStyle" xmi:id="_FOjnmGTwEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> | ||
3053 | <layoutConstraint xmi:type="notation:Location" xmi:id="_FOjnmWTwEe2qdtyPWAtoxA"/> | ||
3054 | </children> | ||
3055 | <children xmi:type="notation:Node" xmi:id="_FOkOoGTwEe2qdtyPWAtoxA" type="3010" element="_FOevJGTwEe2qdtyPWAtoxA"> | ||
3056 | <styles xmi:type="notation:FontStyle" xmi:id="_FOkOoWTwEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> | ||
3057 | <layoutConstraint xmi:type="notation:Location" xmi:id="_FOkOomTwEe2qdtyPWAtoxA"/> | ||
3058 | </children> | ||
3059 | <children xmi:type="notation:Node" xmi:id="_FOkOo2TwEe2qdtyPWAtoxA" type="3010" element="_FOevJmTwEe2qdtyPWAtoxA"> | ||
3060 | <styles xmi:type="notation:FontStyle" xmi:id="_FOkOpGTwEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> | ||
3061 | <layoutConstraint xmi:type="notation:Location" xmi:id="_FOkOpWTwEe2qdtyPWAtoxA"/> | ||
3062 | </children> | ||
3063 | <styles xmi:type="notation:SortingStyle" xmi:id="_FOjnkmTwEe2qdtyPWAtoxA"/> | ||
3064 | <styles xmi:type="notation:FilteringStyle" xmi:id="_FOjnk2TwEe2qdtyPWAtoxA"/> | ||
3065 | </children> | ||
3066 | <styles xmi:type="notation:ShapeStyle" xmi:id="_FOjAgWTwEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> | ||
3067 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FOjAgmTwEe2qdtyPWAtoxA" x="1608" y="446"/> | ||
3068 | </children> | ||
3069 | <children xmi:type="notation:Node" xmi:id="_3ahdoGgpEe24RpwpWgpkFQ" type="2003" element="_3aQ-8GgpEe24RpwpWgpkFQ"> | 3013 | <children xmi:type="notation:Node" xmi:id="_3ahdoGgpEe24RpwpWgpkFQ" type="2003" element="_3aQ-8GgpEe24RpwpWgpkFQ"> |
3070 | <children xmi:type="notation:Node" xmi:id="_3ahdo2gpEe24RpwpWgpkFQ" type="5007"/> | 3014 | <children xmi:type="notation:Node" xmi:id="_3ahdo2gpEe24RpwpWgpkFQ" type="5007"/> |
3071 | <children xmi:type="notation:Node" xmi:id="_3ahdpGgpEe24RpwpWgpkFQ" type="7004"> | 3015 | <children xmi:type="notation:Node" xmi:id="_3ahdpGgpEe24RpwpWgpkFQ" type="7004"> |
@@ -3073,7 +3017,7 @@ | |||
3073 | <styles xmi:type="notation:FilteringStyle" xmi:id="_3ahdpmgpEe24RpwpWgpkFQ"/> | 3017 | <styles xmi:type="notation:FilteringStyle" xmi:id="_3ahdpmgpEe24RpwpWgpkFQ"/> |
3074 | </children> | 3018 | </children> |
3075 | <styles xmi:type="notation:ShapeStyle" xmi:id="_3ahdoWgpEe24RpwpWgpkFQ" fontName="Noto Sans" fontHeight="8"/> | 3019 | <styles xmi:type="notation:ShapeStyle" xmi:id="_3ahdoWgpEe24RpwpWgpkFQ" fontName="Noto Sans" fontHeight="8"/> |
3076 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3ahdomgpEe24RpwpWgpkFQ" x="2292" y="312" width="120" height="100"/> | 3020 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3ahdomgpEe24RpwpWgpkFQ" x="2120" y="312" width="120" height="100"/> |
3077 | </children> | 3021 | </children> |
3078 | <children xmi:type="notation:Node" xmi:id="_ZjfaEGkGEe24rIYSlCjKHA" type="2003" element="_Zi8AcGkGEe24rIYSlCjKHA"> | 3022 | <children xmi:type="notation:Node" xmi:id="_ZjfaEGkGEe24rIYSlCjKHA" type="2003" element="_Zi8AcGkGEe24rIYSlCjKHA"> |
3079 | <children xmi:type="notation:Node" xmi:id="_ZjkSkGkGEe24rIYSlCjKHA" type="5007"/> | 3023 | <children xmi:type="notation:Node" xmi:id="_ZjkSkGkGEe24rIYSlCjKHA" type="5007"/> |
@@ -3086,7 +3030,7 @@ | |||
3086 | <styles xmi:type="notation:FilteringStyle" xmi:id="_ZjkSk2kGEe24rIYSlCjKHA"/> | 3030 | <styles xmi:type="notation:FilteringStyle" xmi:id="_ZjkSk2kGEe24rIYSlCjKHA"/> |
3087 | </children> | 3031 | </children> |
3088 | <styles xmi:type="notation:ShapeStyle" xmi:id="_ZjfaEWkGEe24rIYSlCjKHA" fontName="Noto Sans" fontHeight="8"/> | 3032 | <styles xmi:type="notation:ShapeStyle" xmi:id="_ZjfaEWkGEe24rIYSlCjKHA" fontName="Noto Sans" fontHeight="8"/> |
3089 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZjfaEmkGEe24rIYSlCjKHA" x="3132" y="312" width="120" height="100"/> | 3033 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZjfaEmkGEe24rIYSlCjKHA" x="3120" y="312" width="120" height="100"/> |
3090 | </children> | 3034 | </children> |
3091 | <children xmi:type="notation:Node" xmi:id="_fdU7QGkGEe24rIYSlCjKHA" type="2003" element="_fdLKQGkGEe24rIYSlCjKHA"> | 3035 | <children xmi:type="notation:Node" xmi:id="_fdU7QGkGEe24rIYSlCjKHA" type="2003" element="_fdLKQGkGEe24rIYSlCjKHA"> |
3092 | <children xmi:type="notation:Node" xmi:id="_fdViUGkGEe24rIYSlCjKHA" type="5007"/> | 3036 | <children xmi:type="notation:Node" xmi:id="_fdViUGkGEe24rIYSlCjKHA" type="5007"/> |
@@ -3111,7 +3055,7 @@ | |||
3111 | <styles xmi:type="notation:FilteringStyle" xmi:id="_fdViU2kGEe24rIYSlCjKHA"/> | 3055 | <styles xmi:type="notation:FilteringStyle" xmi:id="_fdViU2kGEe24rIYSlCjKHA"/> |
3112 | </children> | 3056 | </children> |
3113 | <styles xmi:type="notation:ShapeStyle" xmi:id="_fdU7QWkGEe24rIYSlCjKHA" fontName="Noto Sans" fontHeight="8"/> | 3057 | <styles xmi:type="notation:ShapeStyle" xmi:id="_fdU7QWkGEe24rIYSlCjKHA" fontName="Noto Sans" fontHeight="8"/> |
3114 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fdU7QmkGEe24rIYSlCjKHA" x="3132" y="449"/> | 3058 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fdU7QmkGEe24rIYSlCjKHA" x="3120" y="449"/> |
3115 | </children> | 3059 | </children> |
3116 | <children xmi:type="notation:Node" xmi:id="_IYGPgNZUEe69IbObpvsypA" type="2003" element="_IXrYwNZUEe69IbObpvsypA"> | 3060 | <children xmi:type="notation:Node" xmi:id="_IYGPgNZUEe69IbObpvsypA" type="2003" element="_IXrYwNZUEe69IbObpvsypA"> |
3117 | <children xmi:type="notation:Node" xmi:id="_IYGPg9ZUEe69IbObpvsypA" type="5007"/> | 3061 | <children xmi:type="notation:Node" xmi:id="_IYGPg9ZUEe69IbObpvsypA" type="5007"/> |
@@ -3124,7 +3068,7 @@ | |||
3124 | <styles xmi:type="notation:FilteringStyle" xmi:id="_IYGPhtZUEe69IbObpvsypA"/> | 3068 | <styles xmi:type="notation:FilteringStyle" xmi:id="_IYGPhtZUEe69IbObpvsypA"/> |
3125 | </children> | 3069 | </children> |
3126 | <styles xmi:type="notation:ShapeStyle" xmi:id="_IYGPgdZUEe69IbObpvsypA" fontName="Noto Sans" fontHeight="8"/> | 3070 | <styles xmi:type="notation:ShapeStyle" xmi:id="_IYGPgdZUEe69IbObpvsypA" fontName="Noto Sans" fontHeight="8"/> |
3127 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IYGPgtZUEe69IbObpvsypA" x="1956" y="312" width="120" height="100"/> | 3071 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_IYGPgtZUEe69IbObpvsypA" x="1784" y="312" width="120" height="100"/> |
3128 | </children> | 3072 | </children> |
3129 | <children xmi:type="notation:Node" xmi:id="_Nm2zYNZUEe69IbObpvsypA" type="2003" element="_Nmg1INZUEe69IbObpvsypA"> | 3073 | <children xmi:type="notation:Node" xmi:id="_Nm2zYNZUEe69IbObpvsypA" type="2003" element="_Nmg1INZUEe69IbObpvsypA"> |
3130 | <children xmi:type="notation:Node" xmi:id="_Nm2zY9ZUEe69IbObpvsypA" type="5007"/> | 3074 | <children xmi:type="notation:Node" xmi:id="_Nm2zY9ZUEe69IbObpvsypA" type="5007"/> |
@@ -3141,7 +3085,7 @@ | |||
3141 | <styles xmi:type="notation:FilteringStyle" xmi:id="_Nm3actZUEe69IbObpvsypA"/> | 3085 | <styles xmi:type="notation:FilteringStyle" xmi:id="_Nm3actZUEe69IbObpvsypA"/> |
3142 | </children> | 3086 | </children> |
3143 | <styles xmi:type="notation:ShapeStyle" xmi:id="_Nm2zYdZUEe69IbObpvsypA" fontName="Noto Sans" fontHeight="8"/> | 3087 | <styles xmi:type="notation:ShapeStyle" xmi:id="_Nm2zYdZUEe69IbObpvsypA" fontName="Noto Sans" fontHeight="8"/> |
3144 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Nm2zYtZUEe69IbObpvsypA" x="1956" y="449" width="120" height="100"/> | 3088 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Nm2zYtZUEe69IbObpvsypA" x="1784" y="449" width="120" height="100"/> |
3145 | </children> | 3089 | </children> |
3146 | <children xmi:type="notation:Node" xmi:id="_FTa2MNZXEe69IbObpvsypA" type="2003" element="_FTH7QNZXEe69IbObpvsypA"> | 3090 | <children xmi:type="notation:Node" xmi:id="_FTa2MNZXEe69IbObpvsypA" type="2003" element="_FTH7QNZXEe69IbObpvsypA"> |
3147 | <children xmi:type="notation:Node" xmi:id="_FTbdQNZXEe69IbObpvsypA" type="5007"/> | 3091 | <children xmi:type="notation:Node" xmi:id="_FTbdQNZXEe69IbObpvsypA" type="5007"/> |
@@ -3159,7 +3103,25 @@ | |||
3159 | <styles xmi:type="notation:FilteringStyle" xmi:id="_c0zXctcIEe6pjNxdSs0E0Q"/> | 3103 | <styles xmi:type="notation:FilteringStyle" xmi:id="_c0zXctcIEe6pjNxdSs0E0Q"/> |
3160 | </children> | 3104 | </children> |
3161 | <styles xmi:type="notation:ShapeStyle" xmi:id="_c0ue8NcIEe6pjNxdSs0E0Q" fontName="Noto Sans" fontHeight="8"/> | 3105 | <styles xmi:type="notation:ShapeStyle" xmi:id="_c0ue8NcIEe6pjNxdSs0E0Q" fontName="Noto Sans" fontHeight="8"/> |
3162 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_c0ue8dcIEe6pjNxdSs0E0Q" x="2460" y="312" width="120" height="100"/> | 3106 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_c0ue8dcIEe6pjNxdSs0E0Q" x="2288" y="312" width="120" height="100"/> |
3107 | </children> | ||
3108 | <children xmi:type="notation:Node" xmi:id="_hOS68NjvEe66mJJuF_pPGg" type="2003" element="_hNitANjvEe66mJJuF_pPGg"> | ||
3109 | <children xmi:type="notation:Node" xmi:id="_hOYagNjvEe66mJJuF_pPGg" type="5007"/> | ||
3110 | <children xmi:type="notation:Node" xmi:id="_hOZBkNjvEe66mJJuF_pPGg" type="7004"> | ||
3111 | <styles xmi:type="notation:SortingStyle" xmi:id="_hOZBkdjvEe66mJJuF_pPGg"/> | ||
3112 | <styles xmi:type="notation:FilteringStyle" xmi:id="_hOZBktjvEe66mJJuF_pPGg"/> | ||
3113 | </children> | ||
3114 | <styles xmi:type="notation:ShapeStyle" xmi:id="_hOS68djvEe66mJJuF_pPGg" fontName="Noto Sans" fontHeight="8"/> | ||
3115 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hOS68tjvEe66mJJuF_pPGg" x="2964" y="312" width="120" height="100"/> | ||
3116 | </children> | ||
3117 | <children xmi:type="notation:Node" xmi:id="_tkOK4NsVEe6c9ehqpe3s7A" type="2003" element="_tkAvgNsVEe6c9ehqpe3s7A"> | ||
3118 | <children xmi:type="notation:Node" xmi:id="_tkOK49sVEe6c9ehqpe3s7A" type="5007"/> | ||
3119 | <children xmi:type="notation:Node" xmi:id="_tkOK5NsVEe6c9ehqpe3s7A" type="7004"> | ||
3120 | <styles xmi:type="notation:SortingStyle" xmi:id="_tkOK5dsVEe6c9ehqpe3s7A"/> | ||
3121 | <styles xmi:type="notation:FilteringStyle" xmi:id="_tkOK5tsVEe6c9ehqpe3s7A"/> | ||
3122 | </children> | ||
3123 | <styles xmi:type="notation:ShapeStyle" xmi:id="_tkOK4dsVEe6c9ehqpe3s7A" fontName="Noto Sans" fontHeight="8"/> | ||
3124 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_tkOK4tsVEe6c9ehqpe3s7A" x="919" y="448" width="147"/> | ||
3163 | </children> | 3125 | </children> |
3164 | <styles xmi:type="notation:DiagramStyle" xmi:id="_z1ff0l3lEe2LuOZzJ_LhLg"/> | 3126 | <styles xmi:type="notation:DiagramStyle" xmi:id="_z1ff0l3lEe2LuOZzJ_LhLg"/> |
3165 | <edges xmi:type="notation:Edge" xmi:id="_C-b04F3mEe2LuOZzJ_LhLg" type="4001" element="_C9_I8F3mEe2LuOZzJ_LhLg" source="_9ZUmgF3lEe2LuOZzJ_LhLg" target="_8bUtMF3lEe2LuOZzJ_LhLg"> | 3127 | <edges xmi:type="notation:Edge" xmi:id="_C-b04F3mEe2LuOZzJ_LhLg" type="4001" element="_C9_I8F3mEe2LuOZzJ_LhLg" source="_9ZUmgF3lEe2LuOZzJ_LhLg" target="_8bUtMF3lEe2LuOZzJ_LhLg"> |
@@ -3196,33 +3158,33 @@ | |||
3196 | </edges> | 3158 | </edges> |
3197 | <edges xmi:type="notation:Edge" xmi:id="_oAifgF3vEe2LuOZzJ_LhLg" type="4001" element="_oARZ0l3vEe2LuOZzJ_LhLg" source="_bTgeJl3tEe2LuOZzJ_LhLg" target="_3xZUsF3lEe2LuOZzJ_LhLg"> | 3159 | <edges xmi:type="notation:Edge" xmi:id="_oAifgF3vEe2LuOZzJ_LhLg" type="4001" element="_oARZ0l3vEe2LuOZzJ_LhLg" source="_bTgeJl3tEe2LuOZzJ_LhLg" target="_3xZUsF3lEe2LuOZzJ_LhLg"> |
3198 | <children xmi:type="notation:Node" xmi:id="_oAifhF3vEe2LuOZzJ_LhLg" type="6001"> | 3160 | <children xmi:type="notation:Node" xmi:id="_oAifhF3vEe2LuOZzJ_LhLg" type="6001"> |
3199 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oAifhV3vEe2LuOZzJ_LhLg" x="-367" y="-38"/> | 3161 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oAifhV3vEe2LuOZzJ_LhLg" x="-281" y="-38"/> |
3200 | </children> | 3162 | </children> |
3201 | <children xmi:type="notation:Node" xmi:id="_oAifhl3vEe2LuOZzJ_LhLg" type="6002"> | 3163 | <children xmi:type="notation:Node" xmi:id="_oAifhl3vEe2LuOZzJ_LhLg" type="6002"> |
3202 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oAifh13vEe2LuOZzJ_LhLg" x="-52" y="-68"/> | 3164 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oAifh13vEe2LuOZzJ_LhLg" x="-26" y="-68"/> |
3203 | </children> | 3165 | </children> |
3204 | <children xmi:type="notation:Node" xmi:id="_oAifiF3vEe2LuOZzJ_LhLg" type="6003"> | 3166 | <children xmi:type="notation:Node" xmi:id="_oAifiF3vEe2LuOZzJ_LhLg" type="6003"> |
3205 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oAifiV3vEe2LuOZzJ_LhLg" x="-298" y="-10"/> | 3167 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oAifiV3vEe2LuOZzJ_LhLg" x="-324" y="-10"/> |
3206 | </children> | 3168 | </children> |
3207 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_oAifgV3vEe2LuOZzJ_LhLg" routing="Rectilinear"/> | 3169 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_oAifgV3vEe2LuOZzJ_LhLg" routing="Rectilinear"/> |
3208 | <styles xmi:type="notation:FontStyle" xmi:id="_oAifgl3vEe2LuOZzJ_LhLg" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> | 3170 | <styles xmi:type="notation:FontStyle" xmi:id="_oAifgl3vEe2LuOZzJ_LhLg" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> |
3209 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_oAifg13vEe2LuOZzJ_LhLg" points="[6, 0, 974, 50]$[6, -96, 974, -46]$[-886, -96, 82, -46]"/> | 3171 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_oAifg13vEe2LuOZzJ_LhLg" points="[6, 0, 802, 50]$[6, -96, 802, -46]$[-714, -96, 82, -46]"/> |
3210 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_oAifil3vEe2LuOZzJ_LhLg" id="(0.3050847457627119,0.0)"/> | 3172 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_oAifil3vEe2LuOZzJ_LhLg" id="(0.3050847457627119,0.0)"/> |
3211 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_oAifi13vEe2LuOZzJ_LhLg" id="(0.3050847457627119,1.0)"/> | 3173 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_oAifi13vEe2LuOZzJ_LhLg" id="(0.3050847457627119,1.0)"/> |
3212 | </edges> | 3174 | </edges> |
3213 | <edges xmi:type="notation:Edge" xmi:id="_qyMHwF3vEe2LuOZzJ_LhLg" type="4001" element="_qx9eWF3vEe2LuOZzJ_LhLg" source="_bTgeJl3tEe2LuOZzJ_LhLg" target="_3xZUsF3lEe2LuOZzJ_LhLg"> | 3175 | <edges xmi:type="notation:Edge" xmi:id="_qyMHwF3vEe2LuOZzJ_LhLg" type="4001" element="_qx9eWF3vEe2LuOZzJ_LhLg" source="_bTgeJl3tEe2LuOZzJ_LhLg" target="_3xZUsF3lEe2LuOZzJ_LhLg"> |
3214 | <children xmi:type="notation:Node" xmi:id="_qyMHxF3vEe2LuOZzJ_LhLg" type="6001"> | 3176 | <children xmi:type="notation:Node" xmi:id="_qyMHxF3vEe2LuOZzJ_LhLg" type="6001"> |
3215 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qyMHxV3vEe2LuOZzJ_LhLg" x="-440" y="-62"/> | 3177 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qyMHxV3vEe2LuOZzJ_LhLg" x="-354" y="-62"/> |
3216 | </children> | 3178 | </children> |
3217 | <children xmi:type="notation:Node" xmi:id="_qyMHxl3vEe2LuOZzJ_LhLg" type="6002"> | 3179 | <children xmi:type="notation:Node" xmi:id="_qyMHxl3vEe2LuOZzJ_LhLg" type="6002"> |
3218 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qyMHx13vEe2LuOZzJ_LhLg" x="-36" y="-83"/> | 3180 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qyMHx13vEe2LuOZzJ_LhLg" x="-10" y="-83"/> |
3219 | </children> | 3181 | </children> |
3220 | <children xmi:type="notation:Node" xmi:id="_qyMHyF3vEe2LuOZzJ_LhLg" type="6003"> | 3182 | <children xmi:type="notation:Node" xmi:id="_qyMHyF3vEe2LuOZzJ_LhLg" type="6003"> |
3221 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qyMHyV3vEe2LuOZzJ_LhLg" x="-304" y="-10"/> | 3183 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qyMHyV3vEe2LuOZzJ_LhLg" x="-330" y="-10"/> |
3222 | </children> | 3184 | </children> |
3223 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_qyMHwV3vEe2LuOZzJ_LhLg" routing="Rectilinear"/> | 3185 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_qyMHwV3vEe2LuOZzJ_LhLg" routing="Rectilinear"/> |
3224 | <styles xmi:type="notation:FontStyle" xmi:id="_qyMHwl3vEe2LuOZzJ_LhLg" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> | 3186 | <styles xmi:type="notation:FontStyle" xmi:id="_qyMHwl3vEe2LuOZzJ_LhLg" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> |
3225 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_qyMHw13vEe2LuOZzJ_LhLg" points="[0, 0, 968, 50]$[0, -120, 968, -70]$[-922, -120, 46, -70]"/> | 3187 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_qyMHw13vEe2LuOZzJ_LhLg" points="[0, 0, 796, 50]$[0, -120, 796, -70]$[-750, -120, 46, -70]"/> |
3226 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_qyMHyl3vEe2LuOZzJ_LhLg" id="(0.6101694915254238,0.0)"/> | 3188 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_qyMHyl3vEe2LuOZzJ_LhLg" id="(0.6101694915254238,0.0)"/> |
3227 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_qyMHy13vEe2LuOZzJ_LhLg" id="(0.6101694915254238,1.0)"/> | 3189 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_qyMHy13vEe2LuOZzJ_LhLg" id="(0.6101694915254238,1.0)"/> |
3228 | </edges> | 3190 | </edges> |
@@ -3244,17 +3206,17 @@ | |||
3244 | </edges> | 3206 | </edges> |
3245 | <edges xmi:type="notation:Edge" xmi:id="_v0nf0F3vEe2LuOZzJ_LhLg" type="4001" element="_v0WaHF3vEe2LuOZzJ_LhLg" source="_bTgeJl3tEe2LuOZzJ_LhLg" target="_3xZUsF3lEe2LuOZzJ_LhLg"> | 3207 | <edges xmi:type="notation:Edge" xmi:id="_v0nf0F3vEe2LuOZzJ_LhLg" type="4001" element="_v0WaHF3vEe2LuOZzJ_LhLg" source="_bTgeJl3tEe2LuOZzJ_LhLg" target="_3xZUsF3lEe2LuOZzJ_LhLg"> |
3246 | <children xmi:type="notation:Node" xmi:id="_v0nf1F3vEe2LuOZzJ_LhLg" type="6001"> | 3208 | <children xmi:type="notation:Node" xmi:id="_v0nf1F3vEe2LuOZzJ_LhLg" type="6001"> |
3247 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v0nf1V3vEe2LuOZzJ_LhLg" x="-7" y="-10"/> | 3209 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v0nf1V3vEe2LuOZzJ_LhLg" x="-15" y="-10"/> |
3248 | </children> | 3210 | </children> |
3249 | <children xmi:type="notation:Node" xmi:id="_v0nf1l3vEe2LuOZzJ_LhLg" type="6002"> | 3211 | <children xmi:type="notation:Node" xmi:id="_v0nf1l3vEe2LuOZzJ_LhLg" type="6002"> |
3250 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v0nf113vEe2LuOZzJ_LhLg" x="-18" y="10"/> | 3212 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v0nf113vEe2LuOZzJ_LhLg" x="-26" y="10"/> |
3251 | </children> | 3213 | </children> |
3252 | <children xmi:type="notation:Node" xmi:id="_v0nf2F3vEe2LuOZzJ_LhLg" type="6003"> | 3214 | <children xmi:type="notation:Node" xmi:id="_v0nf2F3vEe2LuOZzJ_LhLg" type="6003"> |
3253 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v0nf2V3vEe2LuOZzJ_LhLg" x="6" y="10"/> | 3215 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v0nf2V3vEe2LuOZzJ_LhLg" x="-2" y="10"/> |
3254 | </children> | 3216 | </children> |
3255 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_v0nf0V3vEe2LuOZzJ_LhLg" routing="Tree"/> | 3217 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_v0nf0V3vEe2LuOZzJ_LhLg" routing="Tree"/> |
3256 | <styles xmi:type="notation:FontStyle" xmi:id="_v0nf0l3vEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> | 3218 | <styles xmi:type="notation:FontStyle" xmi:id="_v0nf0l3vEe2LuOZzJ_LhLg" fontName="Noto Sans" fontHeight="8"/> |
3257 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_v0nf013vEe2LuOZzJ_LhLg" points="[0, -2, 758, 99]$[0, -26, 758, 75]$[-764, -26, -6, 75]$[-764, -52, -6, 49]"/> | 3219 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_v0nf013vEe2LuOZzJ_LhLg" points="[0, -2, 929, 99]$[0, -26, 929, 75]$[-935, -26, -6, 75]$[-935, -52, -6, 49]"/> |
3258 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v0nf2l3vEe2LuOZzJ_LhLg" id="(0.1694915254237288,0.02040816326530612)"/> | 3220 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v0nf2l3vEe2LuOZzJ_LhLg" id="(0.1694915254237288,0.02040816326530612)"/> |
3259 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v0nf213vEe2LuOZzJ_LhLg" id="(0.5,0.5)"/> | 3221 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v0nf213vEe2LuOZzJ_LhLg" id="(0.5,0.5)"/> |
3260 | </edges> | 3222 | </edges> |
@@ -3594,22 +3556,6 @@ | |||
3594 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_cBzLV2TvEe2qdtyPWAtoxA" id="(0.5,1.0)"/> | 3556 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_cBzLV2TvEe2qdtyPWAtoxA" id="(0.5,1.0)"/> |
3595 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_cBzLWGTvEe2qdtyPWAtoxA" id="(0.5,0.0)"/> | 3557 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_cBzLWGTvEe2qdtyPWAtoxA" id="(0.5,0.0)"/> |
3596 | </edges> | 3558 | </edges> |
3597 | <edges xmi:type="notation:Edge" xmi:id="_HgqNEGTwEe2qdtyPWAtoxA" type="4001" element="_HgMTBmTwEe2qdtyPWAtoxA" source="_DNRsUGTwEe2qdtyPWAtoxA" target="_meWJcF3uEe2LuOZzJ_LhLg"> | ||
3598 | <children xmi:type="notation:Node" xmi:id="_HgqNFGTwEe2qdtyPWAtoxA" type="6001"> | ||
3599 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HgqNFWTwEe2qdtyPWAtoxA" y="-10"/> | ||
3600 | </children> | ||
3601 | <children xmi:type="notation:Node" xmi:id="_HgqNFmTwEe2qdtyPWAtoxA" type="6002"> | ||
3602 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HgqNF2TwEe2qdtyPWAtoxA" y="10"/> | ||
3603 | </children> | ||
3604 | <children xmi:type="notation:Node" xmi:id="_Hgq0IGTwEe2qdtyPWAtoxA" type="6003"> | ||
3605 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Hgq0IWTwEe2qdtyPWAtoxA" y="10"/> | ||
3606 | </children> | ||
3607 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_HgqNEWTwEe2qdtyPWAtoxA" routing="Tree"/> | ||
3608 | <styles xmi:type="notation:FontStyle" xmi:id="_HgqNEmTwEe2qdtyPWAtoxA" fontName="Noto Sans" fontHeight="8"/> | ||
3609 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_HgqNE2TwEe2qdtyPWAtoxA" points="[0, 0, 211, 132]$[-211, -132, 0, 0]"/> | ||
3610 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Hgq0ImTwEe2qdtyPWAtoxA" id="(0.4067796610169492,0.0)"/> | ||
3611 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Hgq0I2TwEe2qdtyPWAtoxA" id="(0.5,0.5)"/> | ||
3612 | </edges> | ||
3613 | <edges xmi:type="notation:Edge" xmi:id="_MXL3IGTwEe2qdtyPWAtoxA" type="4001" element="_MW7_mGTwEe2qdtyPWAtoxA" source="_LC6oUGTvEe2qdtyPWAtoxA" target="_3xZUsF3lEe2LuOZzJ_LhLg"> | 3559 | <edges xmi:type="notation:Edge" xmi:id="_MXL3IGTwEe2qdtyPWAtoxA" type="4001" element="_MW7_mGTwEe2qdtyPWAtoxA" source="_LC6oUGTvEe2qdtyPWAtoxA" target="_3xZUsF3lEe2LuOZzJ_LhLg"> |
3614 | <children xmi:type="notation:Node" xmi:id="_MXL3JGTwEe2qdtyPWAtoxA" type="6001"> | 3560 | <children xmi:type="notation:Node" xmi:id="_MXL3JGTwEe2qdtyPWAtoxA" type="6001"> |
3615 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MXL3JWTwEe2qdtyPWAtoxA" x="-12" y="-10"/> | 3561 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_MXL3JWTwEe2qdtyPWAtoxA" x="-12" y="-10"/> |
@@ -3754,6 +3700,38 @@ | |||
3754 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fkYjINcIEe6pjNxdSs0E0Q" id="(0.5,0.0)"/> | 3700 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fkYjINcIEe6pjNxdSs0E0Q" id="(0.5,0.0)"/> |
3755 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fkYjIdcIEe6pjNxdSs0E0Q" id="(0.5,0.5)"/> | 3701 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fkYjIdcIEe6pjNxdSs0E0Q" id="(0.5,0.5)"/> |
3756 | </edges> | 3702 | </edges> |
3703 | <edges xmi:type="notation:Edge" xmi:id="_nICVgNjvEe66mJJuF_pPGg" type="4001" element="_nHjNetjvEe66mJJuF_pPGg" source="_hOS68NjvEe66mJJuF_pPGg" target="_87Ju4F4IEe2LuOZzJ_LhLg"> | ||
3704 | <children xmi:type="notation:Node" xmi:id="_nIC8kNjvEe66mJJuF_pPGg" type="6001"> | ||
3705 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nIC8kdjvEe66mJJuF_pPGg" y="-10"/> | ||
3706 | </children> | ||
3707 | <children xmi:type="notation:Node" xmi:id="_nIDjoNjvEe66mJJuF_pPGg" type="6002"> | ||
3708 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nIDjodjvEe66mJJuF_pPGg" y="10"/> | ||
3709 | </children> | ||
3710 | <children xmi:type="notation:Node" xmi:id="_nIEKsNjvEe66mJJuF_pPGg" type="6003"> | ||
3711 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_nIEKsdjvEe66mJJuF_pPGg" y="10"/> | ||
3712 | </children> | ||
3713 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_nICVgdjvEe66mJJuF_pPGg" routing="Tree"/> | ||
3714 | <styles xmi:type="notation:FontStyle" xmi:id="_nICVgtjvEe66mJJuF_pPGg" fontName="Noto Sans" fontHeight="8"/> | ||
3715 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_nICVg9jvEe66mJJuF_pPGg" points="[0, 0, 210, 108]$[-210, -108, 0, 0]"/> | ||
3716 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nIFY0NjvEe66mJJuF_pPGg" id="(0.6101694915254238,0.0)"/> | ||
3717 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nIFY0djvEe66mJJuF_pPGg" id="(0.5,0.5)"/> | ||
3718 | </edges> | ||
3719 | <edges xmi:type="notation:Edge" xmi:id="_vaGHYNsVEe6c9ehqpe3s7A" type="4001" element="_vZd1TNsVEe6c9ehqpe3s7A" source="_3BISYF4GEe2LuOZzJ_LhLg" target="_tkOK4NsVEe6c9ehqpe3s7A"> | ||
3720 | <children xmi:type="notation:Node" xmi:id="_vaGucNsVEe6c9ehqpe3s7A" type="6001"> | ||
3721 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vaGucdsVEe6c9ehqpe3s7A" x="-1" y="-47"/> | ||
3722 | </children> | ||
3723 | <children xmi:type="notation:Node" xmi:id="_vaGuctsVEe6c9ehqpe3s7A" type="6002"> | ||
3724 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vaGuc9sVEe6c9ehqpe3s7A" y="10"/> | ||
3725 | </children> | ||
3726 | <children xmi:type="notation:Node" xmi:id="_vaGudNsVEe6c9ehqpe3s7A" type="6003"> | ||
3727 | <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vaGuddsVEe6c9ehqpe3s7A" y="10"/> | ||
3728 | </children> | ||
3729 | <styles xmi:type="notation:ConnectorStyle" xmi:id="_vaGHYdsVEe6c9ehqpe3s7A" routing="Rectilinear"/> | ||
3730 | <styles xmi:type="notation:FontStyle" xmi:id="_vaGHYtsVEe6c9ehqpe3s7A" fontColor="7490599" fontName="Noto Sans" fontHeight="8"/> | ||
3731 | <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_vaGHY9sVEe6c9ehqpe3s7A" points="[0, 0, 0, -38]$[0, 38, 0, 0]"/> | ||
3732 | <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vaGudtsVEe6c9ehqpe3s7A" id="(0.503448275862069,1.0)"/> | ||
3733 | <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_vaGud9sVEe6c9ehqpe3s7A" id="(0.503448275862069,0.0)"/> | ||
3734 | </edges> | ||
3757 | </data> | 3735 | </data> |
3758 | </ownedAnnotationEntries> | 3736 | </ownedAnnotationEntries> |
3759 | <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_z1k_YV3lEe2LuOZzJ_LhLg" source="DANNOTATION_CUSTOMIZATION_KEY"> | 3737 | <ownedAnnotationEntries xmi:type="description:AnnotationEntry" uid="_z1k_YV3lEe2LuOZzJ_LhLg" source="DANNOTATION_CUSTOMIZATION_KEY"> |
@@ -3830,7 +3808,7 @@ | |||
3830 | </ownedStyle> | 3808 | </ownedStyle> |
3831 | <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']"/> | 3809 | <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']"/> |
3832 | </ownedDiagramElements> | 3810 | </ownedDiagramElements> |
3833 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_mdrbEF3uEe2LuOZzJ_LhLg" name="UnaryExpr" tooltipText="" outgoingEdges="_FMB-xl3vEe2LuOZzJ_LhLg _uSiCAF3vEe2LuOZzJ_LhLg" incomingEdges="_vB8OTF4GEe2LuOZzJ_LhLg _EUlvyF4LEe2m7IaHDkh2Xg _HgMTBmTwEe2qdtyPWAtoxA" width="12" height="10"> | 3811 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_mdrbEF3uEe2LuOZzJ_LhLg" name="UnaryExpr" tooltipText="" outgoingEdges="_FMB-xl3vEe2LuOZzJ_LhLg _uSiCAF3vEe2LuOZzJ_LhLg" incomingEdges="_vB8OTF4GEe2LuOZzJ_LhLg _EUlvyF4LEe2m7IaHDkh2Xg" width="12" height="10"> |
3834 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//UnaryExpr"/> | 3812 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//UnaryExpr"/> |
3835 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//UnaryExpr"/> | 3813 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//UnaryExpr"/> |
3836 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | 3814 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> |
@@ -3982,6 +3960,30 @@ | |||
3982 | </ownedStyle> | 3960 | </ownedStyle> |
3983 | <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']"/> | 3961 | <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']"/> |
3984 | </ownedElements> | 3962 | </ownedElements> |
3963 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_BiDXENf8Ee66mJJuF_pPGg" name="AND" tooltipText=""> | ||
3964 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//BinaryOp/AND"/> | ||
3965 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//BinaryOp/AND"/> | ||
3966 | <ownedStyle xmi:type="diagram:BundledImage" uid="_BiFMQNf8Ee66mJJuF_pPGg" labelAlignment="LEFT"> | ||
3967 | <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"/> | ||
3968 | </ownedStyle> | ||
3969 | <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']"/> | ||
3970 | </ownedElements> | ||
3971 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_CGRecNf8Ee66mJJuF_pPGg" name="OR" tooltipText=""> | ||
3972 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//BinaryOp/OR"/> | ||
3973 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//BinaryOp/OR"/> | ||
3974 | <ownedStyle xmi:type="diagram:BundledImage" uid="_CGRecdf8Ee66mJJuF_pPGg" labelAlignment="LEFT"> | ||
3975 | <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"/> | ||
3976 | </ownedStyle> | ||
3977 | <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']"/> | ||
3978 | </ownedElements> | ||
3979 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_CopLsNf8Ee66mJJuF_pPGg" name="XOR" tooltipText=""> | ||
3980 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//BinaryOp/XOR"/> | ||
3981 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//BinaryOp/XOR"/> | ||
3982 | <ownedStyle xmi:type="diagram:BundledImage" uid="_CopywNf8Ee66mJJuF_pPGg" labelAlignment="LEFT"> | ||
3983 | <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"/> | ||
3984 | </ownedStyle> | ||
3985 | <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']"/> | ||
3986 | </ownedElements> | ||
3985 | </ownedDiagramElements> | 3987 | </ownedDiagramElements> |
3986 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_R7XFMF38Ee2LuOZzJ_LhLg" name="ExistentialQuantifier" tooltipText="" outgoingEdges="_WGxVyF38Ee2LuOZzJ_LhLg" incomingEdges="_C0JQzV4LEe2m7IaHDkh2Xg _ZLAvTl9vEe2rXNsIDUvqhw" width="12" height="10"> | 3988 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_R7XFMF38Ee2LuOZzJ_LhLg" name="ExistentialQuantifier" tooltipText="" outgoingEdges="_WGxVyF38Ee2LuOZzJ_LhLg" incomingEdges="_C0JQzV4LEe2m7IaHDkh2Xg _ZLAvTl9vEe2rXNsIDUvqhw" width="12" height="10"> |
3987 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//ExistentialQuantifier"/> | 3989 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//ExistentialQuantifier"/> |
@@ -4050,24 +4052,16 @@ | |||
4050 | </ownedStyle> | 4052 | </ownedStyle> |
4051 | <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']"/> | 4053 | <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']"/> |
4052 | </ownedDiagramElements> | 4054 | </ownedDiagramElements> |
4053 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_3A1XcF4GEe2LuOZzJ_LhLg" name="AggregationExpr" tooltipText="" outgoingEdges="_ObhgTF4HEe2LuOZzJ_LhLg _q0dkhF4KEe2m7IaHDkh2Xg _Y-E8MF4LEe2m7IaHDkh2Xg _ZLAvTl9vEe2rXNsIDUvqhw" width="12" height="10"> | 4055 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_3A1XcF4GEe2LuOZzJ_LhLg" name="AggregationExpr" tooltipText="" outgoingEdges="_ObhgTF4HEe2LuOZzJ_LhLg _q0dkhF4KEe2m7IaHDkh2Xg _Y-E8MF4LEe2m7IaHDkh2Xg _ZLAvTl9vEe2rXNsIDUvqhw _vZd1TNsVEe6c9ehqpe3s7A" width="12" height="10"> |
4054 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregationExpr"/> | 4056 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregationExpr"/> |
4055 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregationExpr"/> | 4057 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregationExpr"/> |
4056 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | 4058 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> |
4057 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | 4059 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> |
4058 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | 4060 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> |
4059 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_LM1SS19xEe2rXNsIDUvqhw" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> | 4061 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_syXQI9sVEe6c9ehqpe3s7A" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> |
4060 | <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"/> | 4062 | <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"/> |
4061 | </ownedStyle> | 4063 | </ownedStyle> |
4062 | <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']"/> | 4064 | <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']"/> |
4063 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_nZoxHl9vEe2rXNsIDUvqhw" name="op : AggregationOp = SUM" tooltipText=""> | ||
4064 | <target xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//AggregationExpr/op"/> | ||
4065 | <semanticElements xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//AggregationExpr/op"/> | ||
4066 | <ownedStyle xmi:type="diagram:BundledImage" uid="_nZoxH19vEe2rXNsIDUvqhw" labelAlignment="LEFT"> | ||
4067 | <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"/> | ||
4068 | </ownedStyle> | ||
4069 | <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']"/> | ||
4070 | </ownedElements> | ||
4071 | </ownedDiagramElements> | 4065 | </ownedDiagramElements> |
4072 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_ObhgTF4HEe2LuOZzJ_LhLg" name="[0..1] value" sourceNode="_3A1XcF4GEe2LuOZzJ_LhLg" targetNode="_3wvNYF3lEe2LuOZzJ_LhLg"> | 4066 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_ObhgTF4HEe2LuOZzJ_LhLg" name="[0..1] value" sourceNode="_3A1XcF4GEe2LuOZzJ_LhLg" targetNode="_3wvNYF3lEe2LuOZzJ_LhLg"> |
4073 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AggregationExpr/value"/> | 4067 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AggregationExpr/value"/> |
@@ -4082,49 +4076,6 @@ | |||
4082 | </ownedStyle> | 4076 | </ownedStyle> |
4083 | <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']"/> | 4077 | <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']"/> |
4084 | </ownedDiagramElements> | 4078 | </ownedDiagramElements> |
4085 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_YrdfAF4HEe2LuOZzJ_LhLg" name="AggregationOp" tooltipText="" width="12" height="10"> | ||
4086 | <target xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//AggregationOp"/> | ||
4087 | <semanticElements xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//AggregationOp"/> | ||
4088 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
4089 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
4090 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
4091 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_YrdfAV4HEe2LuOZzJ_LhLg" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="221,236,202"> | ||
4092 | <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"/> | ||
4093 | </ownedStyle> | ||
4094 | <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']"/> | ||
4095 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_ZYVzIF4HEe2LuOZzJ_LhLg" name="SUM" tooltipText=""> | ||
4096 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//AggregationOp/SUM"/> | ||
4097 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//AggregationOp/SUM"/> | ||
4098 | <ownedStyle xmi:type="diagram:BundledImage" uid="_ZYVzIV4HEe2LuOZzJ_LhLg" labelAlignment="LEFT"> | ||
4099 | <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"/> | ||
4100 | </ownedStyle> | ||
4101 | <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']"/> | ||
4102 | </ownedElements> | ||
4103 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_Zyjp8F4HEe2LuOZzJ_LhLg" name="PROD" tooltipText=""> | ||
4104 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//AggregationOp/PROD"/> | ||
4105 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//AggregationOp/PROD"/> | ||
4106 | <ownedStyle xmi:type="diagram:BundledImage" uid="_Zyjp8V4HEe2LuOZzJ_LhLg" labelAlignment="LEFT"> | ||
4107 | <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"/> | ||
4108 | </ownedStyle> | ||
4109 | <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']"/> | ||
4110 | </ownedElements> | ||
4111 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_aDuScF4HEe2LuOZzJ_LhLg" name="MIN" tooltipText=""> | ||
4112 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//AggregationOp/MIN"/> | ||
4113 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//AggregationOp/MIN"/> | ||
4114 | <ownedStyle xmi:type="diagram:BundledImage" uid="_aDuScV4HEe2LuOZzJ_LhLg" labelAlignment="LEFT"> | ||
4115 | <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"/> | ||
4116 | </ownedStyle> | ||
4117 | <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']"/> | ||
4118 | </ownedElements> | ||
4119 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_aU4T4F4HEe2LuOZzJ_LhLg" name="MAX" tooltipText=""> | ||
4120 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//AggregationOp/MAX"/> | ||
4121 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//AggregationOp/MAX"/> | ||
4122 | <ownedStyle xmi:type="diagram:BundledImage" uid="_aU4T4V4HEe2LuOZzJ_LhLg" labelAlignment="LEFT"> | ||
4123 | <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"/> | ||
4124 | </ownedStyle> | ||
4125 | <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']"/> | ||
4126 | </ownedElements> | ||
4127 | </ownedDiagramElements> | ||
4128 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_D6U8-V4IEe2LuOZzJ_LhLg" name="[0..1] singletonVariable" sourceNode="_9Ys7cF3lEe2LuOZzJ_LhLg" targetNode="_WGuSZF38Ee2LuOZzJ_LhLg"> | 4079 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_D6U8-V4IEe2LuOZzJ_LhLg" name="[0..1] singletonVariable" sourceNode="_9Ys7cF3lEe2LuOZzJ_LhLg" targetNode="_WGuSZF38Ee2LuOZzJ_LhLg"> |
4129 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//VariableOrNodeExpr/singletonVariable"/> | 4080 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//VariableOrNodeExpr/singletonVariable"/> |
4130 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//VariableOrNodeExpr/singletonVariable"/> | 4081 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//VariableOrNodeExpr/singletonVariable"/> |
@@ -4138,7 +4089,7 @@ | |||
4138 | </ownedStyle> | 4089 | </ownedStyle> |
4139 | <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']"/> | 4090 | <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']"/> |
4140 | </ownedDiagramElements> | 4091 | </ownedDiagramElements> |
4141 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_86zJkF4IEe2LuOZzJ_LhLg" name="Constant" tooltipText="" outgoingEdges="_qYZuyGgtEe24RpwpWgpkFQ" incomingEdges="_JYWPtF4JEe2LuOZzJ_LhLg _JYW2c14JEe2LuOZzJ_LhLg _JYW2el4JEe2LuOZzJ_LhLg _dSnXTmkGEe24rIYSlCjKHA" width="12" height="10"> | 4092 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_86zJkF4IEe2LuOZzJ_LhLg" name="Constant" tooltipText="" outgoingEdges="_qYZuyGgtEe24RpwpWgpkFQ" incomingEdges="_JYWPtF4JEe2LuOZzJ_LhLg _JYW2c14JEe2LuOZzJ_LhLg _JYW2el4JEe2LuOZzJ_LhLg _dSnXTmkGEe24rIYSlCjKHA _nHjNetjvEe66mJJuF_pPGg" width="12" height="10"> |
4142 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Constant"/> | 4093 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Constant"/> |
4143 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Constant"/> | 4094 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Constant"/> |
4144 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | 4095 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> |
@@ -4246,12 +4197,12 @@ | |||
4246 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_q0dkhF4KEe2m7IaHDkh2Xg" sourceNode="_3A1XcF4GEe2LuOZzJ_LhLg" targetNode="_3wvNYF3lEe2LuOZzJ_LhLg"> | 4197 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_q0dkhF4KEe2m7IaHDkh2Xg" sourceNode="_3A1XcF4GEe2LuOZzJ_LhLg" targetNode="_3wvNYF3lEe2LuOZzJ_LhLg"> |
4247 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregationExpr"/> | 4198 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregationExpr"/> |
4248 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregationExpr"/> | 4199 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregationExpr"/> |
4249 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_q0eLcF4KEe2m7IaHDkh2Xg" targetArrow="InputClosedArrow" routingStyle="tree"> | 4200 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_syi2VtsVEe6c9ehqpe3s7A" targetArrow="InputClosedArrow" routingStyle="tree"> |
4250 | <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"/> | 4201 | <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"/> |
4251 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_q0eLcV4KEe2m7IaHDkh2Xg" showIcon="false"> | 4202 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_syi2V9sVEe6c9ehqpe3s7A" showIcon="false"> |
4252 | <labelFormat>italic</labelFormat> | 4203 | <labelFormat>italic</labelFormat> |
4253 | </beginLabelStyle> | 4204 | </beginLabelStyle> |
4254 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_q0eLcl4KEe2m7IaHDkh2Xg" showIcon="false"/> | 4205 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_syi2WNsVEe6c9ehqpe3s7A" showIcon="false"/> |
4255 | </ownedStyle> | 4206 | </ownedStyle> |
4256 | <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']"/> | 4207 | <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']"/> |
4257 | </ownedDiagramElements> | 4208 | </ownedDiagramElements> |
@@ -4355,12 +4306,12 @@ | |||
4355 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_ZLAvTl9vEe2rXNsIDUvqhw" sourceNode="_3A1XcF4GEe2LuOZzJ_LhLg" targetNode="_R7XFMF38Ee2LuOZzJ_LhLg"> | 4306 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_ZLAvTl9vEe2rXNsIDUvqhw" sourceNode="_3A1XcF4GEe2LuOZzJ_LhLg" targetNode="_R7XFMF38Ee2LuOZzJ_LhLg"> |
4356 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregationExpr"/> | 4307 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregationExpr"/> |
4357 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregationExpr"/> | 4308 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregationExpr"/> |
4358 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_ZLAvT19vEe2rXNsIDUvqhw" lineStyle="dash" targetArrow="InputClosedArrow" routingStyle="tree"> | 4309 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_syi2XNsVEe6c9ehqpe3s7A" lineStyle="dash" targetArrow="InputClosedArrow" routingStyle="tree"> |
4359 | <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"/> | 4310 | <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"/> |
4360 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_ZLAvUF9vEe2rXNsIDUvqhw" showIcon="false"> | 4311 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_syi2XdsVEe6c9ehqpe3s7A" showIcon="false"> |
4361 | <labelFormat>italic</labelFormat> | 4312 | <labelFormat>italic</labelFormat> |
4362 | </beginLabelStyle> | 4313 | </beginLabelStyle> |
4363 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_ZLAvUV9vEe2rXNsIDUvqhw" showIcon="false"/> | 4314 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_syi2XtsVEe6c9ehqpe3s7A" showIcon="false"/> |
4364 | </ownedStyle> | 4315 | </ownedStyle> |
4365 | <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']"/> | 4316 | <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']"/> |
4366 | </ownedDiagramElements> | 4317 | </ownedDiagramElements> |
@@ -4468,33 +4419,17 @@ | |||
4468 | </ownedStyle> | 4419 | </ownedStyle> |
4469 | <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']"/> | 4420 | <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']"/> |
4470 | </ownedElements> | 4421 | </ownedElements> |
4471 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_BtK6oGkFEe24rIYSlCjKHA" name="SUBSUMES" tooltipText=""> | 4422 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_eqCSkGkFEe24rIYSlCjKHA" name="NODE_EQ" tooltipText=""> |
4472 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ComparisonOp/SUBSUMES"/> | 4423 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ComparisonOp/NODE_EQ"/> |
4473 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ComparisonOp/SUBSUMES"/> | 4424 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ComparisonOp/NODE_EQ"/> |
4474 | <ownedStyle xmi:type="diagram:BundledImage" uid="_BtMv0GkFEe24rIYSlCjKHA" labelAlignment="LEFT"> | ||
4475 | <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"/> | ||
4476 | </ownedStyle> | ||
4477 | <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']"/> | ||
4478 | </ownedElements> | ||
4479 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_dSepwGkFEe24rIYSlCjKHA" name="SUBSUMED_BY" tooltipText=""> | ||
4480 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ComparisonOp/SUBSUMED_BY"/> | ||
4481 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ComparisonOp/SUBSUMED_BY"/> | ||
4482 | <ownedStyle xmi:type="diagram:BundledImage" uid="_dSfQ0GkFEe24rIYSlCjKHA" labelAlignment="LEFT"> | ||
4483 | <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"/> | ||
4484 | </ownedStyle> | ||
4485 | <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']"/> | ||
4486 | </ownedElements> | ||
4487 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_eqCSkGkFEe24rIYSlCjKHA" name="ABS_EQ" tooltipText=""> | ||
4488 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ComparisonOp/ABS_EQ"/> | ||
4489 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ComparisonOp/ABS_EQ"/> | ||
4490 | <ownedStyle xmi:type="diagram:BundledImage" uid="_eqCSkWkFEe24rIYSlCjKHA" labelAlignment="LEFT"> | 4425 | <ownedStyle xmi:type="diagram:BundledImage" uid="_eqCSkWkFEe24rIYSlCjKHA" labelAlignment="LEFT"> |
4491 | <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"/> | 4426 | <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"/> |
4492 | </ownedStyle> | 4427 | </ownedStyle> |
4493 | <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']"/> | 4428 | <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']"/> |
4494 | </ownedElements> | 4429 | </ownedElements> |
4495 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_p9Q6UGkFEe24rIYSlCjKHA" name="ABS_NOT_EQ" tooltipText=""> | 4430 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_p9Q6UGkFEe24rIYSlCjKHA" name="NODE_NOT_EQ" tooltipText=""> |
4496 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ComparisonOp/ABS_NOT_EQ"/> | 4431 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ComparisonOp/NODE_NOT_EQ"/> |
4497 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ComparisonOp/ABS_NOT_EQ"/> | 4432 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//ComparisonOp/NODE_NOT_EQ"/> |
4498 | <ownedStyle xmi:type="diagram:BundledImage" uid="_p9RhYGkFEe24rIYSlCjKHA" labelAlignment="LEFT"> | 4433 | <ownedStyle xmi:type="diagram:BundledImage" uid="_p9RhYGkFEe24rIYSlCjKHA" labelAlignment="LEFT"> |
4499 | <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"/> | 4434 | <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"/> |
4500 | </ownedStyle> | 4435 | </ownedStyle> |
@@ -4629,80 +4564,6 @@ | |||
4629 | </ownedStyle> | 4564 | </ownedStyle> |
4630 | <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']"/> | 4565 | <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']"/> |
4631 | </ownedDiagramElements> | 4566 | </ownedDiagramElements> |
4632 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_DM_YcGTwEe2qdtyPWAtoxA" name="ModalExpr" tooltipText="" outgoingEdges="_HgMTBmTwEe2qdtyPWAtoxA" width="12" height="10"> | ||
4633 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//ModalExpr"/> | ||
4634 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//ModalExpr"/> | ||
4635 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
4636 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
4637 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
4638 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_G0fDp2TwEe2qdtyPWAtoxA" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> | ||
4639 | <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"/> | ||
4640 | </ownedStyle> | ||
4641 | <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']"/> | ||
4642 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_GD-MoGTwEe2qdtyPWAtoxA" name="modality : Modality = DEFAULT" tooltipText=""> | ||
4643 | <target xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//ModalExpr/modality"/> | ||
4644 | <semanticElements xmi:type="ecore:EAttribute" href="src/main/resources/model/problem.ecore#//ModalExpr/modality"/> | ||
4645 | <ownedStyle xmi:type="diagram:BundledImage" uid="_G0fqp2TwEe2qdtyPWAtoxA" labelAlignment="LEFT"> | ||
4646 | <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"/> | ||
4647 | </ownedStyle> | ||
4648 | <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']"/> | ||
4649 | </ownedElements> | ||
4650 | </ownedDiagramElements> | ||
4651 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_FOadoGTwEe2qdtyPWAtoxA" name="Modality" tooltipText="" width="12" height="10"> | ||
4652 | <target xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//Modality"/> | ||
4653 | <semanticElements xmi:type="ecore:EEnum" href="src/main/resources/model/problem.ecore#//Modality"/> | ||
4654 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
4655 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
4656 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
4657 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_FOadoWTwEe2qdtyPWAtoxA" borderSize="1" borderSizeComputationExpression="1" borderColor="125,125,125" backgroundStyle="Liquid" foregroundColor="221,236,202"> | ||
4658 | <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"/> | ||
4659 | </ownedStyle> | ||
4660 | <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']"/> | ||
4661 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_FOevIGTwEe2qdtyPWAtoxA" name="DEFAULT" tooltipText=""> | ||
4662 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/DEFAULT"/> | ||
4663 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/DEFAULT"/> | ||
4664 | <ownedStyle xmi:type="diagram:BundledImage" uid="_FOevIWTwEe2qdtyPWAtoxA" labelAlignment="LEFT"> | ||
4665 | <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"/> | ||
4666 | </ownedStyle> | ||
4667 | <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']"/> | ||
4668 | </ownedElements> | ||
4669 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_FOevImTwEe2qdtyPWAtoxA" name="MAY" tooltipText=""> | ||
4670 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/MAY"/> | ||
4671 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/MAY"/> | ||
4672 | <ownedStyle xmi:type="diagram:BundledImage" uid="_FOevI2TwEe2qdtyPWAtoxA" labelAlignment="LEFT"> | ||
4673 | <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"/> | ||
4674 | </ownedStyle> | ||
4675 | <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']"/> | ||
4676 | </ownedElements> | ||
4677 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_FOevJGTwEe2qdtyPWAtoxA" name="MUST" tooltipText=""> | ||
4678 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/MUST"/> | ||
4679 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/MUST"/> | ||
4680 | <ownedStyle xmi:type="diagram:BundledImage" uid="_FOevJWTwEe2qdtyPWAtoxA" labelAlignment="LEFT"> | ||
4681 | <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"/> | ||
4682 | </ownedStyle> | ||
4683 | <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']"/> | ||
4684 | </ownedElements> | ||
4685 | <ownedElements xmi:type="diagram:DNodeListElement" uid="_FOevJmTwEe2qdtyPWAtoxA" name="CURRENT" tooltipText=""> | ||
4686 | <target xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/CURRENT"/> | ||
4687 | <semanticElements xmi:type="ecore:EEnumLiteral" href="src/main/resources/model/problem.ecore#//Modality/CURRENT"/> | ||
4688 | <ownedStyle xmi:type="diagram:BundledImage" uid="_FOfWIGTwEe2qdtyPWAtoxA" labelAlignment="LEFT"> | ||
4689 | <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"/> | ||
4690 | </ownedStyle> | ||
4691 | <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']"/> | ||
4692 | </ownedElements> | ||
4693 | </ownedDiagramElements> | ||
4694 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_HgMTBmTwEe2qdtyPWAtoxA" sourceNode="_DM_YcGTwEe2qdtyPWAtoxA" targetNode="_mdrbEF3uEe2LuOZzJ_LhLg"> | ||
4695 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//ModalExpr"/> | ||
4696 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//ModalExpr"/> | ||
4697 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_HgMTB2TwEe2qdtyPWAtoxA" targetArrow="InputClosedArrow" routingStyle="tree"> | ||
4698 | <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"/> | ||
4699 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_HgMTCGTwEe2qdtyPWAtoxA" showIcon="false"> | ||
4700 | <labelFormat>italic</labelFormat> | ||
4701 | </beginLabelStyle> | ||
4702 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_HgMTCWTwEe2qdtyPWAtoxA" showIcon="false"/> | ||
4703 | </ownedStyle> | ||
4704 | <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']"/> | ||
4705 | </ownedDiagramElements> | ||
4706 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_MW7_mGTwEe2qdtyPWAtoxA" sourceNode="_LCzTkGTvEe2qdtyPWAtoxA" targetNode="_3wvNYF3lEe2LuOZzJ_LhLg"> | 4567 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_MW7_mGTwEe2qdtyPWAtoxA" sourceNode="_LCzTkGTvEe2qdtyPWAtoxA" targetNode="_3wvNYF3lEe2LuOZzJ_LhLg"> |
4707 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Atom"/> | 4568 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Atom"/> |
4708 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Atom"/> | 4569 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//Atom"/> |
@@ -4947,6 +4808,50 @@ | |||
4947 | </ownedStyle> | 4808 | </ownedStyle> |
4948 | <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']"/> | 4809 | <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']"/> |
4949 | </ownedDiagramElements> | 4810 | </ownedDiagramElements> |
4811 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_hNitANjvEe66mJJuF_pPGg" name="InfiniteConstant" tooltipText="" outgoingEdges="_nHjNetjvEe66mJJuF_pPGg" width="12" height="10"> | ||
4812 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//InfiniteConstant"/> | ||
4813 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//InfiniteConstant"/> | ||
4814 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
4815 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
4816 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
4817 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_kgGbMdj1Ee6BBtaAvpH7kw" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> | ||
4818 | <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"/> | ||
4819 | </ownedStyle> | ||
4820 | <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']"/> | ||
4821 | </ownedDiagramElements> | ||
4822 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_nHjNetjvEe66mJJuF_pPGg" sourceNode="_hNitANjvEe66mJJuF_pPGg" targetNode="_86zJkF4IEe2LuOZzJ_LhLg"> | ||
4823 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//InfiniteConstant"/> | ||
4824 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//InfiniteConstant"/> | ||
4825 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_kgeOrNj1Ee6BBtaAvpH7kw" targetArrow="InputClosedArrow" routingStyle="tree"> | ||
4826 | <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"/> | ||
4827 | <beginLabelStyle xmi:type="diagram:BeginLabelStyle" uid="_kgeOrdj1Ee6BBtaAvpH7kw" showIcon="false"> | ||
4828 | <labelFormat>italic</labelFormat> | ||
4829 | </beginLabelStyle> | ||
4830 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_kgeOrtj1Ee6BBtaAvpH7kw" showIcon="false"/> | ||
4831 | </ownedStyle> | ||
4832 | <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']"/> | ||
4833 | </ownedDiagramElements> | ||
4834 | <ownedDiagramElements xmi:type="diagram:DNodeList" uid="_tkAvgNsVEe6c9ehqpe3s7A" name="AggregatorDeclaration" tooltipText="" incomingEdges="_vZd1TNsVEe6c9ehqpe3s7A" width="12" height="10"> | ||
4835 | <target xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregatorDeclaration"/> | ||
4836 | <semanticElements xmi:type="ecore:EClass" href="src/main/resources/model/problem.ecore#//AggregatorDeclaration"/> | ||
4837 | <arrangeConstraints>KEEP_LOCATION</arrangeConstraints> | ||
4838 | <arrangeConstraints>KEEP_SIZE</arrangeConstraints> | ||
4839 | <arrangeConstraints>KEEP_RATIO</arrangeConstraints> | ||
4840 | <ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_tkAvgdsVEe6c9ehqpe3s7A" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216"> | ||
4841 | <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"/> | ||
4842 | </ownedStyle> | ||
4843 | <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']"/> | ||
4844 | </ownedDiagramElements> | ||
4845 | <ownedDiagramElements xmi:type="diagram:DEdge" uid="_vZd1TNsVEe6c9ehqpe3s7A" name="[0..1] aggregator" sourceNode="_3A1XcF4GEe2LuOZzJ_LhLg" targetNode="_tkAvgNsVEe6c9ehqpe3s7A"> | ||
4846 | <target xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AggregationExpr/aggregator"/> | ||
4847 | <semanticElements xmi:type="ecore:EReference" href="src/main/resources/model/problem.ecore#//AggregationExpr/aggregator"/> | ||
4848 | <ownedStyle xmi:type="diagram:EdgeStyle" uid="_vZecUNsVEe6c9ehqpe3s7A" routingStyle="manhattan" strokeColor="0,0,0"> | ||
4849 | <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_EReference']/@style"/> | ||
4850 | <centerLabelStyle xmi:type="diagram:CenterLabelStyle" uid="_vZecUtsVEe6c9ehqpe3s7A" showIcon="false"/> | ||
4851 | <endLabelStyle xmi:type="diagram:EndLabelStyle" uid="_vZecUdsVEe6c9ehqpe3s7A" labelSize="6" showIcon="false" labelColor="39,76,114"/> | ||
4852 | </ownedStyle> | ||
4853 | <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']"/> | ||
4854 | </ownedDiagramElements> | ||
4950 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> | 4855 | <description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/> |
4951 | <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_z1aAQF3lEe2LuOZzJ_LhLg"/> | 4856 | <filterVariableHistory xmi:type="diagram:FilterVariableHistory" uid="_z1aAQF3lEe2LuOZzJ_LhLg"/> |
4952 | <activatedLayers xmi:type="description_1:Layer" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer"/> | 4857 | <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 eed134fd..9a349490 100644 --- a/subprojects/language-model/src/main/resources/model/problem.ecore +++ b/subprojects/language-model/src/main/resources/model/problem.ecore | |||
@@ -150,12 +150,6 @@ | |||
150 | <eStructuralFeatures xsi:type="ecore:EReference" name="parent" eType="#//VariableOrNode"/> | 150 | <eStructuralFeatures xsi:type="ecore:EReference" name="parent" eType="#//VariableOrNode"/> |
151 | </eClassifiers> | 151 | </eClassifiers> |
152 | <eClassifiers xsi:type="ecore:EClass" name="NewVariable" eSuperTypes="#//Variable"/> | 152 | <eClassifiers xsi:type="ecore:EClass" name="NewVariable" eSuperTypes="#//Variable"/> |
153 | <eClassifiers xsi:type="ecore:EEnum" name="Modality"> | ||
154 | <eLiterals name="DEFAULT" value="1"/> | ||
155 | <eLiterals name="MAY" value="2"/> | ||
156 | <eLiterals name="MUST" value="3"/> | ||
157 | <eLiterals name="CURRENT" value="3"/> | ||
158 | </eClassifiers> | ||
159 | <eClassifiers xsi:type="ecore:EEnum" name="ComparisonOp"> | 153 | <eClassifiers xsi:type="ecore:EEnum" name="ComparisonOp"> |
160 | <eLiterals name="LESS"/> | 154 | <eLiterals name="LESS"/> |
161 | <eLiterals name="LESS_EQ" value="1"/> | 155 | <eLiterals name="LESS_EQ" value="1"/> |
@@ -164,10 +158,8 @@ | |||
164 | <eLiterals name="EQ" value="4"/> | 158 | <eLiterals name="EQ" value="4"/> |
165 | <eLiterals name="NOT_EQ" value="5"/> | 159 | <eLiterals name="NOT_EQ" value="5"/> |
166 | <eLiterals name="IN" value="6"/> | 160 | <eLiterals name="IN" value="6"/> |
167 | <eLiterals name="SUBSUMES" value="7"/> | 161 | <eLiterals name="NODE_EQ" value="9"/> |
168 | <eLiterals name="SUBSUMED_BY" value="8"/> | 162 | <eLiterals name="NODE_NOT_EQ" value="10"/> |
169 | <eLiterals name="ABS_EQ" value="9"/> | ||
170 | <eLiterals name="ABS_NOT_EQ" value="10"/> | ||
171 | </eClassifiers> | 163 | </eClassifiers> |
172 | <eClassifiers xsi:type="ecore:EEnum" name="ReferenceKind"> | 164 | <eClassifiers xsi:type="ecore:EEnum" name="ReferenceKind"> |
173 | <eLiterals name="DEFAULT" value="1"/> | 165 | <eLiterals name="DEFAULT" value="1"/> |
@@ -199,6 +191,9 @@ | |||
199 | <eLiterals name="MUL" value="2"/> | 191 | <eLiterals name="MUL" value="2"/> |
200 | <eLiterals name="DIV" value="3"/> | 192 | <eLiterals name="DIV" value="3"/> |
201 | <eLiterals name="POW" value="4"/> | 193 | <eLiterals name="POW" value="4"/> |
194 | <eLiterals name="AND" value="5"/> | ||
195 | <eLiterals name="OR" value="6"/> | ||
196 | <eLiterals name="XOR" value="7"/> | ||
202 | </eClassifiers> | 197 | </eClassifiers> |
203 | <eClassifiers xsi:type="ecore:EClass" name="ArithmeticUnaryExpr" eSuperTypes="#//UnaryExpr"> | 198 | <eClassifiers xsi:type="ecore:EClass" name="ArithmeticUnaryExpr" eSuperTypes="#//UnaryExpr"> |
204 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="op" eType="#//UnaryOp"/> | 199 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="op" eType="#//UnaryOp"/> |
@@ -208,13 +203,7 @@ | |||
208 | containment="true"/> | 203 | containment="true"/> |
209 | <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="#//Expr" | 204 | <eStructuralFeatures xsi:type="ecore:EReference" name="condition" eType="#//Expr" |
210 | containment="true"/> | 205 | containment="true"/> |
211 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="op" eType="#//AggregationOp"/> | 206 | <eStructuralFeatures xsi:type="ecore:EReference" name="aggregator" eType="#//AggregatorDeclaration"/> |
212 | </eClassifiers> | ||
213 | <eClassifiers xsi:type="ecore:EEnum" name="AggregationOp"> | ||
214 | <eLiterals name="SUM"/> | ||
215 | <eLiterals name="PROD" value="1"/> | ||
216 | <eLiterals name="MIN" value="2"/> | ||
217 | <eLiterals name="MAX" value="3"/> | ||
218 | </eClassifiers> | 207 | </eClassifiers> |
219 | <eClassifiers xsi:type="ecore:EClass" name="ComparisonExpr" eSuperTypes="#//BinaryExpr"> | 208 | <eClassifiers xsi:type="ecore:EClass" name="ComparisonExpr" eSuperTypes="#//BinaryExpr"> |
220 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="op" eType="#//ComparisonOp"/> | 209 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="op" eType="#//ComparisonOp"/> |
@@ -243,9 +232,6 @@ | |||
243 | <eClassifiers xsi:type="ecore:EClass" name="NegationExpr" eSuperTypes="#//QuantifiedUnaryExpr"/> | 232 | <eClassifiers xsi:type="ecore:EClass" name="NegationExpr" eSuperTypes="#//QuantifiedUnaryExpr"/> |
244 | <eClassifiers xsi:type="ecore:EClass" name="CountExpr" eSuperTypes="#//QuantifiedUnaryExpr"/> | 233 | <eClassifiers xsi:type="ecore:EClass" name="CountExpr" eSuperTypes="#//QuantifiedUnaryExpr"/> |
245 | <eClassifiers xsi:type="ecore:EClass" name="Relation" abstract="true" eSuperTypes="#//NamedElement"/> | 234 | <eClassifiers xsi:type="ecore:EClass" name="Relation" abstract="true" eSuperTypes="#//NamedElement"/> |
246 | <eClassifiers xsi:type="ecore:EClass" name="ModalExpr" eSuperTypes="#//UnaryExpr"> | ||
247 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="modality" eType="#//Modality"/> | ||
248 | </eClassifiers> | ||
249 | <eClassifiers xsi:type="ecore:EClass" name="RangeExpr" eSuperTypes="#//BinaryExpr"/> | 235 | <eClassifiers xsi:type="ecore:EClass" name="RangeExpr" eSuperTypes="#//BinaryExpr"/> |
250 | <eClassifiers xsi:type="ecore:EClass" name="LogicConstant" eSuperTypes="#//Constant"> | 236 | <eClassifiers xsi:type="ecore:EClass" name="LogicConstant" eSuperTypes="#//Constant"> |
251 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="logicValue" eType="#//LogicValue"/> | 237 | <eStructuralFeatures xsi:type="ecore:EAttribute" name="logicValue" eType="#//LogicValue"/> |
@@ -276,4 +262,6 @@ | |||
276 | <eStructuralFeatures xsi:type="ecore:EReference" name="targetType" eType="#//Relation"/> | 262 | <eStructuralFeatures xsi:type="ecore:EReference" name="targetType" eType="#//Relation"/> |
277 | </eClassifiers> | 263 | </eClassifiers> |
278 | <eClassifiers xsi:type="ecore:EClass" name="AssignmentExpr" eSuperTypes="#//BinaryExpr"/> | 264 | <eClassifiers xsi:type="ecore:EClass" name="AssignmentExpr" eSuperTypes="#//BinaryExpr"/> |
265 | <eClassifiers xsi:type="ecore:EClass" name="InfiniteConstant" eSuperTypes="#//Constant"/> | ||
266 | <eClassifiers xsi:type="ecore:EClass" name="AggregatorDeclaration" eSuperTypes="#//Statement #//NamedElement"/> | ||
279 | </ecore:EPackage> | 267 | </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 927ec609..2a1d8522 100644 --- a/subprojects/language-model/src/main/resources/model/problem.genmodel +++ b/subprojects/language-model/src/main/resources/model/problem.genmodel | |||
@@ -16,12 +16,6 @@ | |||
16 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//LogicValue/UNKNOWN"/> | 16 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//LogicValue/UNKNOWN"/> |
17 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//LogicValue/ERROR"/> | 17 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//LogicValue/ERROR"/> |
18 | </genEnums> | 18 | </genEnums> |
19 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//Modality"> | ||
20 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//Modality/DEFAULT"/> | ||
21 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//Modality/MAY"/> | ||
22 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//Modality/MUST"/> | ||
23 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//Modality/CURRENT"/> | ||
24 | </genEnums> | ||
25 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//ComparisonOp"> | 19 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//ComparisonOp"> |
26 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/LESS"/> | 20 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/LESS"/> |
27 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/LESS_EQ"/> | 21 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/LESS_EQ"/> |
@@ -30,10 +24,8 @@ | |||
30 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/EQ"/> | 24 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/EQ"/> |
31 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/NOT_EQ"/> | 25 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/NOT_EQ"/> |
32 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/IN"/> | 26 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/IN"/> |
33 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/SUBSUMES"/> | 27 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/NODE_EQ"/> |
34 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/SUBSUMED_BY"/> | 28 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/NODE_NOT_EQ"/> |
35 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/ABS_EQ"/> | ||
36 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ComparisonOp/ABS_NOT_EQ"/> | ||
37 | </genEnums> | 29 | </genEnums> |
38 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//ReferenceKind"> | 30 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//ReferenceKind"> |
39 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ReferenceKind/DEFAULT"/> | 31 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ReferenceKind/DEFAULT"/> |
@@ -51,12 +43,9 @@ | |||
51 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//BinaryOp/MUL"/> | 43 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//BinaryOp/MUL"/> |
52 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//BinaryOp/DIV"/> | 44 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//BinaryOp/DIV"/> |
53 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//BinaryOp/POW"/> | 45 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//BinaryOp/POW"/> |
54 | </genEnums> | 46 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//BinaryOp/AND"/> |
55 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//AggregationOp"> | 47 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//BinaryOp/OR"/> |
56 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//AggregationOp/SUM"/> | 48 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//BinaryOp/XOR"/> |
57 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//AggregationOp/PROD"/> | ||
58 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//AggregationOp/MIN"/> | ||
59 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//AggregationOp/MAX"/> | ||
60 | </genEnums> | 49 | </genEnums> |
61 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//ModuleKind"> | 50 | <genEnums typeSafeEnumCompatible="false" ecoreEnum="problem.ecore#//ModuleKind"> |
62 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ModuleKind/PROBLEM"/> | 51 | <genEnumLiterals ecoreEnumLiteral="problem.ecore#//ModuleKind/PROBLEM"/> |
@@ -200,7 +189,7 @@ | |||
200 | <genClasses ecoreClass="problem.ecore#//AggregationExpr"> | 189 | <genClasses ecoreClass="problem.ecore#//AggregationExpr"> |
201 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//AggregationExpr/value"/> | 190 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//AggregationExpr/value"/> |
202 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//AggregationExpr/condition"/> | 191 | <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference problem.ecore#//AggregationExpr/condition"/> |
203 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//AggregationExpr/op"/> | 192 | <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//AggregationExpr/aggregator"/> |
204 | </genClasses> | 193 | </genClasses> |
205 | <genClasses ecoreClass="problem.ecore#//ComparisonExpr"> | 194 | <genClasses ecoreClass="problem.ecore#//ComparisonExpr"> |
206 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//ComparisonExpr/op"/> | 195 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//ComparisonExpr/op"/> |
@@ -224,9 +213,6 @@ | |||
224 | <genClasses ecoreClass="problem.ecore#//NegationExpr"/> | 213 | <genClasses ecoreClass="problem.ecore#//NegationExpr"/> |
225 | <genClasses ecoreClass="problem.ecore#//CountExpr"/> | 214 | <genClasses ecoreClass="problem.ecore#//CountExpr"/> |
226 | <genClasses ecoreClass="problem.ecore#//Relation"/> | 215 | <genClasses ecoreClass="problem.ecore#//Relation"/> |
227 | <genClasses ecoreClass="problem.ecore#//ModalExpr"> | ||
228 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//ModalExpr/modality"/> | ||
229 | </genClasses> | ||
230 | <genClasses ecoreClass="problem.ecore#//RangeExpr"/> | 216 | <genClasses ecoreClass="problem.ecore#//RangeExpr"/> |
231 | <genClasses ecoreClass="problem.ecore#//LogicConstant"> | 217 | <genClasses ecoreClass="problem.ecore#//LogicConstant"> |
232 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//LogicConstant/logicValue"/> | 218 | <genFeatures createChild="false" ecoreFeature="ecore:EAttribute problem.ecore#//LogicConstant/logicValue"/> |
@@ -244,5 +230,7 @@ | |||
244 | <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//CastExpr/targetType"/> | 230 | <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference problem.ecore#//CastExpr/targetType"/> |
245 | </genClasses> | 231 | </genClasses> |
246 | <genClasses ecoreClass="problem.ecore#//AssignmentExpr"/> | 232 | <genClasses ecoreClass="problem.ecore#//AssignmentExpr"/> |
233 | <genClasses ecoreClass="problem.ecore#//InfiniteConstant"/> | ||
234 | <genClasses ecoreClass="problem.ecore#//AggregatorDeclaration"/> | ||
247 | </genPackages> | 235 | </genPackages> |
248 | </genmodel:GenModel> | 236 | </genmodel:GenModel> |
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 203baad6..2a623cf1 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 | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2021-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
@@ -8,10 +8,10 @@ package tools.refinery.language.semantics; | |||
8 | import com.google.inject.Inject; | 8 | import com.google.inject.Inject; |
9 | import tools.refinery.language.library.BuiltinLibrary; | 9 | import tools.refinery.language.library.BuiltinLibrary; |
10 | import tools.refinery.language.model.problem.*; | 10 | import tools.refinery.language.model.problem.*; |
11 | import tools.refinery.language.scoping.imports.ImportAdapterProvider; | ||
11 | import tools.refinery.language.scoping.imports.ImportCollector; | 12 | import tools.refinery.language.scoping.imports.ImportCollector; |
12 | import tools.refinery.language.semantics.internal.MutableSeed; | 13 | import tools.refinery.language.semantics.internal.MutableSeed; |
13 | import tools.refinery.language.utils.BuiltinSymbols; | 14 | import tools.refinery.language.utils.BuiltinSymbols; |
14 | import tools.refinery.language.utils.ProblemDesugarer; | ||
15 | import tools.refinery.language.utils.ProblemUtil; | 15 | import tools.refinery.language.utils.ProblemUtil; |
16 | import tools.refinery.store.dse.propagation.PropagationBuilder; | 16 | import tools.refinery.store.dse.propagation.PropagationBuilder; |
17 | import tools.refinery.store.model.ModelStoreBuilder; | 17 | import tools.refinery.store.model.ModelStoreBuilder; |
@@ -48,9 +48,6 @@ import java.util.*; | |||
48 | 48 | ||
49 | public class ModelInitializer { | 49 | public class ModelInitializer { |
50 | @Inject | 50 | @Inject |
51 | private ProblemDesugarer desugarer; | ||
52 | |||
53 | @Inject | ||
54 | private SemanticsUtils semanticsUtils; | 51 | private SemanticsUtils semanticsUtils; |
55 | 52 | ||
56 | @Inject | 53 | @Inject |
@@ -59,6 +56,9 @@ public class ModelInitializer { | |||
59 | @Inject | 56 | @Inject |
60 | private ImportCollector importCollector; | 57 | private ImportCollector importCollector; |
61 | 58 | ||
59 | @Inject | ||
60 | private ImportAdapterProvider importAdapterProvider; | ||
61 | |||
62 | private Problem problem; | 62 | private Problem problem; |
63 | 63 | ||
64 | private final Set<Problem> importedProblems = new HashSet<>(); | 64 | private final Set<Problem> importedProblems = new HashSet<>(); |
@@ -96,8 +96,7 @@ public class ModelInitializer { | |||
96 | importedProblems.add(problem); | 96 | importedProblems.add(problem); |
97 | problemTrace.setProblem(problem); | 97 | problemTrace.setProblem(problem); |
98 | try { | 98 | try { |
99 | builtinSymbols = desugarer.getBuiltinSymbols(problem).orElseThrow(() -> new IllegalArgumentException( | 99 | builtinSymbols = importAdapterProvider.getBuiltinSymbols(problem); |
100 | "Problem has no builtin library")); | ||
101 | var nodeInfo = collectPartialRelation(builtinSymbols.node(), 1, TruthValue.TRUE, TruthValue.TRUE); | 100 | var nodeInfo = collectPartialRelation(builtinSymbols.node(), 1, TruthValue.TRUE, TruthValue.TRUE); |
102 | nodeRelation = nodeInfo.partialRelation(); | 101 | nodeRelation = nodeInfo.partialRelation(); |
103 | metamodelBuilder.type(nodeRelation); | 102 | metamodelBuilder.type(nodeRelation); |
@@ -681,8 +680,8 @@ public class ModelInitializer { | |||
681 | var argumentList = toArgumentList(List.of(comparisonExpr.getLeft(), comparisonExpr.getRight()), | 680 | var argumentList = toArgumentList(List.of(comparisonExpr.getLeft(), comparisonExpr.getRight()), |
682 | localScope, literals); | 681 | localScope, literals); |
683 | boolean positive = switch (comparisonExpr.getOp()) { | 682 | boolean positive = switch (comparisonExpr.getOp()) { |
684 | case EQ -> true; | 683 | case NODE_EQ -> true; |
685 | case NOT_EQ -> false; | 684 | case NODE_NOT_EQ -> false; |
686 | default -> throw new TracedException( | 685 | default -> throw new TracedException( |
687 | comparisonExpr, "Unsupported operator"); | 686 | comparisonExpr, "Unsupported operator"); |
688 | }; | 687 | }; |
diff --git a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SemanticsUtils.java b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SemanticsUtils.java index 9c40e6df..5e0526bc 100644 --- a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SemanticsUtils.java +++ b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/SemanticsUtils.java | |||
@@ -7,7 +7,6 @@ package tools.refinery.language.semantics; | |||
7 | 7 | ||
8 | import com.google.inject.Inject; | 8 | import com.google.inject.Inject; |
9 | import com.google.inject.Singleton; | 9 | import com.google.inject.Singleton; |
10 | import com.google.inject.name.Named; | ||
11 | import org.eclipse.emf.ecore.EClass; | 10 | import org.eclipse.emf.ecore.EClass; |
12 | import org.eclipse.emf.ecore.EObject; | 11 | import org.eclipse.emf.ecore.EObject; |
13 | import org.eclipse.emf.ecore.util.EcoreUtil; | 12 | import org.eclipse.emf.ecore.util.EcoreUtil; |
@@ -20,7 +19,6 @@ import org.eclipse.xtext.scoping.IScope; | |||
20 | import org.jetbrains.annotations.NotNull; | 19 | import org.jetbrains.annotations.NotNull; |
21 | import org.jetbrains.annotations.Nullable; | 20 | import org.jetbrains.annotations.Nullable; |
22 | import tools.refinery.language.model.problem.Problem; | 21 | import tools.refinery.language.model.problem.Problem; |
23 | import tools.refinery.language.naming.ProblemQualifiedNameProvider; | ||
24 | 22 | ||
25 | import java.util.Optional; | 23 | import java.util.Optional; |
26 | 24 | ||
@@ -30,17 +28,13 @@ public class SemanticsUtils { | |||
30 | private IQualifiedNameProvider qualifiedNameProvider; | 28 | private IQualifiedNameProvider qualifiedNameProvider; |
31 | 29 | ||
32 | @Inject | 30 | @Inject |
33 | @Named(ProblemQualifiedNameProvider.NAMED_DELEGATE) | ||
34 | private IQualifiedNameProvider delegateQualifiedNameProvider; | ||
35 | |||
36 | @Inject | ||
37 | private IQualifiedNameConverter qualifiedNameConverter; | 31 | private IQualifiedNameConverter qualifiedNameConverter; |
38 | 32 | ||
39 | @Inject | 33 | @Inject |
40 | private IResourceDescriptionsProvider resourceDescriptionsProvider; | 34 | private IResourceDescriptionsProvider resourceDescriptionsProvider; |
41 | 35 | ||
42 | public Optional<String> getNameWithoutRootPrefix(EObject eObject) { | 36 | public Optional<String> getNameWithoutRootPrefix(EObject eObject) { |
43 | var qualifiedName = delegateQualifiedNameProvider.getFullyQualifiedName(eObject); | 37 | var qualifiedName = qualifiedNameProvider.getFullyQualifiedName(eObject); |
44 | if (qualifiedName == null) { | 38 | if (qualifiedName == null) { |
45 | return Optional.empty(); | 39 | return Optional.empty(); |
46 | } | 40 | } |
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 377a66f3..61e70bcd 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 | |||
@@ -21,7 +21,8 @@ import org.eclipse.xtext.resource.XtextResourceSet; | |||
21 | import org.eclipse.xtext.scoping.IScopeProvider; | 21 | import org.eclipse.xtext.scoping.IScopeProvider; |
22 | import tools.refinery.language.model.problem.*; | 22 | import tools.refinery.language.model.problem.*; |
23 | import tools.refinery.language.naming.NamingUtil; | 23 | import tools.refinery.language.naming.NamingUtil; |
24 | import tools.refinery.language.utils.ProblemDesugarer; | 24 | import tools.refinery.language.scoping.imports.ImportAdapterProvider; |
25 | import tools.refinery.language.typesystem.SignatureProvider; | ||
25 | import tools.refinery.language.utils.ProblemUtil; | 26 | import tools.refinery.language.utils.ProblemUtil; |
26 | import tools.refinery.store.model.Model; | 27 | import tools.refinery.store.model.Model; |
27 | import tools.refinery.store.reasoning.ReasoningAdapter; | 28 | import tools.refinery.store.reasoning.ReasoningAdapter; |
@@ -57,10 +58,13 @@ public class SolutionSerializer { | |||
57 | private IScopeProvider scopeProvider; | 58 | private IScopeProvider scopeProvider; |
58 | 59 | ||
59 | @Inject | 60 | @Inject |
60 | private ProblemDesugarer desugarer; | 61 | private NodeNameProvider nameProvider; |
61 | 62 | ||
62 | @Inject | 63 | @Inject |
63 | private NodeNameProvider nameProvider; | 64 | private ImportAdapterProvider importAdapterProvider; |
65 | |||
66 | @Inject | ||
67 | private SignatureProvider signatureProvider; | ||
64 | 68 | ||
65 | private ProblemTrace trace; | 69 | private ProblemTrace trace; |
66 | private Model model; | 70 | private Model model; |
@@ -223,8 +227,7 @@ public class SolutionSerializer { | |||
223 | } | 227 | } |
224 | 228 | ||
225 | private void addExistsAssertions() { | 229 | private void addExistsAssertions() { |
226 | var builtinSymbols = desugarer.getBuiltinSymbols(problem).orElseThrow(() -> new IllegalStateException("No " + | 230 | var builtinSymbols = importAdapterProvider.getBuiltinSymbols(problem); |
227 | "builtin library in copied problem")); | ||
228 | // Make sure to output exists assertions in a deterministic order. | 231 | // Make sure to output exists assertions in a deterministic order. |
229 | var sortedNewNodes = new TreeMap<Integer, Node>(); | 232 | var sortedNewNodes = new TreeMap<Integer, Node>(); |
230 | for (var pair : trace.getNodeTrace().keyValuesView()) { | 233 | for (var pair : trace.getNodeTrace().keyValuesView()) { |
@@ -336,7 +339,7 @@ public class SolutionSerializer { | |||
336 | var assertion = ProblemFactory.eINSTANCE.createAssertion(); | 339 | var assertion = ProblemFactory.eINSTANCE.createAssertion(); |
337 | assertion.setDefault(true); | 340 | assertion.setDefault(true); |
338 | assertion.setRelation(relation); | 341 | assertion.setRelation(relation); |
339 | int arity = ProblemUtil.getArity(relation); | 342 | int arity = signatureProvider.getArity(relation); |
340 | for (int i = 0; i < arity; i++) { | 343 | for (int i = 0; i < arity; i++) { |
341 | var argument = ProblemFactory.eINSTANCE.createWildcardAssertionArgument(); | 344 | var argument = ProblemFactory.eINSTANCE.createWildcardAssertionArgument(); |
342 | assertion.getArguments().add(argument); | 345 | assertion.getArguments().add(argument); |
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 1858fc87..91008919 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 | |||
@@ -7,7 +7,6 @@ package tools.refinery.language.web.semantics.metadata; | |||
7 | 7 | ||
8 | import com.google.inject.Inject; | 8 | import com.google.inject.Inject; |
9 | import com.google.inject.Provider; | 9 | import com.google.inject.Provider; |
10 | import com.google.inject.name.Named; | ||
11 | import org.eclipse.emf.ecore.EObject; | 10 | import org.eclipse.emf.ecore.EObject; |
12 | import org.eclipse.xtext.naming.IQualifiedNameConverter; | 11 | import org.eclipse.xtext.naming.IQualifiedNameConverter; |
13 | import org.eclipse.xtext.naming.IQualifiedNameProvider; | 12 | import org.eclipse.xtext.naming.IQualifiedNameProvider; |
@@ -15,7 +14,6 @@ import org.eclipse.xtext.naming.QualifiedName; | |||
15 | import org.eclipse.xtext.scoping.IScope; | 14 | import org.eclipse.xtext.scoping.IScope; |
16 | import org.eclipse.xtext.scoping.IScopeProvider; | 15 | import org.eclipse.xtext.scoping.IScopeProvider; |
17 | import tools.refinery.language.model.problem.*; | 16 | import tools.refinery.language.model.problem.*; |
18 | import tools.refinery.language.naming.ProblemQualifiedNameProvider; | ||
19 | import tools.refinery.language.semantics.ProblemTrace; | 17 | import tools.refinery.language.semantics.ProblemTrace; |
20 | import tools.refinery.language.semantics.TracedException; | 18 | import tools.refinery.language.semantics.TracedException; |
21 | import tools.refinery.language.utils.ProblemUtil; | 19 | import tools.refinery.language.utils.ProblemUtil; |
@@ -34,7 +32,6 @@ public class MetadataCreator { | |||
34 | private IScopeProvider scopeProvider; | 32 | private IScopeProvider scopeProvider; |
35 | 33 | ||
36 | @Inject | 34 | @Inject |
37 | @Named(ProblemQualifiedNameProvider.NAMED_DELEGATE) | ||
38 | private IQualifiedNameProvider qualifiedNameProvider; | 35 | private IQualifiedNameProvider qualifiedNameProvider; |
39 | 36 | ||
40 | @Inject | 37 | @Inject |
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 43351d3e..08f7a585 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/Problem.xtext +++ b/subprojects/language/src/main/java/tools/refinery/language/Problem.xtext | |||
@@ -17,7 +17,8 @@ enum ModuleKind: | |||
17 | 17 | ||
18 | Statement: | 18 | Statement: |
19 | ImportStatement | Assertion | ClassDeclaration | EnumDeclaration | | 19 | ImportStatement | Assertion | ClassDeclaration | EnumDeclaration | |
20 | DatatypeDeclaration | PredicateDefinition | /* FunctionDefinition | RuleDefinition | */ | 20 | DatatypeDeclaration | AggregatorDeclaration | PredicateDefinition | |
21 | /* FunctionDefinition | RuleDefinition | */ | ||
21 | ScopeDeclaration | NodeDeclaration; | 22 | ScopeDeclaration | NodeDeclaration; |
22 | 23 | ||
23 | ImportStatement: | 24 | ImportStatement: |
@@ -40,6 +41,9 @@ EnumLiteral returns Node: | |||
40 | DatatypeDeclaration: | 41 | DatatypeDeclaration: |
41 | "extern" "datatype" name=Identifier "."; | 42 | "extern" "datatype" name=Identifier "."; |
42 | 43 | ||
44 | AggregatorDeclaration: | ||
45 | "extern" "aggregator" name=Identifier "."; | ||
46 | |||
43 | enum ReferenceKind: | 47 | enum ReferenceKind: |
44 | REFERENCE="refers" | CONTAINMENT="contains" | CONTAINER="container"; | 48 | REFERENCE="refers" | CONTAINMENT="contains" | CONTAINER="container"; |
45 | 49 | ||
@@ -71,7 +75,6 @@ Conjunction: | |||
71 | // | 75 | // |
72 | //Case: | 76 | //Case: |
73 | // Conjunction ({Match.condition=current} "->" value=Expr)?; | 77 | // Conjunction ({Match.condition=current} "->" value=Expr)?; |
74 | |||
75 | //RuleDefinition: | 78 | //RuleDefinition: |
76 | // "rule" | 79 | // "rule" |
77 | // name=Identifier | 80 | // name=Identifier |
@@ -106,11 +109,18 @@ Expr: | |||
106 | AssignmentExpr; | 109 | AssignmentExpr; |
107 | 110 | ||
108 | AssignmentExpr returns Expr: | 111 | AssignmentExpr returns Expr: |
109 | ComparisonExpr ({AssignmentExpr.left=current}"is" right=ComparisonExpr)*; | 112 | BooleanExpr ({AssignmentExpr.left=current} "is" right=BooleanExpr)*; |
113 | |||
114 | enum BooleanBinaryOp returns BinaryOp: | ||
115 | AND="&&" | OR="||" | XOR="^^"; | ||
116 | |||
117 | BooleanExpr returns Expr: | ||
118 | ComparisonExpr ({ArithmeticBinaryExpr.left=current} | ||
119 | op=BooleanBinaryOp right=ComparisonExpr)*; | ||
110 | 120 | ||
111 | enum ComparisonOp: | 121 | enum ComparisonOp: |
112 | LESS="<" | LESS_EQ="<=" | GREATER=">" | GREATER_EQ=">=" | EQ="==" | NOT_EQ="!=" | | 122 | LESS="<" | LESS_EQ="<=" | GREATER=">" | GREATER_EQ=">=" | EQ="===" | NOT_EQ="!==" | |
113 | IN="in" | SUBSUMES=":>" | SUBSUMED_BY="<:" | ABS_EQ="===" | ABS_NOT_EQ="!=="; | 123 | IN="in" | NODE_EQ="==" | NODE_NOT_EQ="!="; |
114 | 124 | ||
115 | ComparisonExpr returns Expr: | 125 | ComparisonExpr returns Expr: |
116 | LatticeExpr ({ComparisonExpr.left=current} | 126 | LatticeExpr ({ComparisonExpr.left=current} |
@@ -120,12 +130,8 @@ enum LatticeBinaryOp: | |||
120 | MEET="/\\" | JOIN="\\/"; | 130 | MEET="/\\" | JOIN="\\/"; |
121 | 131 | ||
122 | LatticeExpr returns Expr: | 132 | LatticeExpr returns Expr: |
123 | RangeExpr ({LatticeBinaryExpr.left=current} | 133 | AdditiveExpr ({LatticeBinaryExpr.left=current} |
124 | op=LatticeBinaryOp right=RangeExpr)*; | 134 | op=LatticeBinaryOp right=AdditiveExpr)*; |
125 | |||
126 | RangeExpr returns Expr: | ||
127 | AdditiveExpr ({RangeExpr.left=current} ".." ("*" | right=AdditiveExpr))* | | ||
128 | {RangeExpr} "*" ".." ("*" | right=AdditiveExpr); | ||
129 | 135 | ||
130 | enum AdditiveOp returns BinaryOp: | 136 | enum AdditiveOp returns BinaryOp: |
131 | ADD="+" | SUB="-"; | 137 | ADD="+" | SUB="-"; |
@@ -145,11 +151,14 @@ enum ExponentialOp returns BinaryOp: | |||
145 | POW="**"; | 151 | POW="**"; |
146 | 152 | ||
147 | ExponentialExpr returns Expr: | 153 | ExponentialExpr returns Expr: |
148 | UnaryExpr ({ArithmeticBinaryExpr.left=current} | 154 | RangeExpr ({ArithmeticBinaryExpr.left=current} |
149 | op=ExponentialOp right=ExponentialExpr)?; | 155 | op=ExponentialOp right=ExponentialExpr)?; |
150 | 156 | ||
157 | RangeExpr returns Expr: | ||
158 | UnaryExpr ({RangeExpr.left=current} ".." right=UnaryExpr)*; | ||
159 | |||
151 | UnaryExpr returns Expr: | 160 | UnaryExpr returns Expr: |
152 | ArithmeticUnaryExpr | ModalExpr | NegationExpr | | 161 | ArithmeticUnaryExpr | NegationExpr | |
153 | CountExpr | AggregationExpr | CastExpr; | 162 | CountExpr | AggregationExpr | CastExpr; |
154 | 163 | ||
155 | enum UnaryOp: | 164 | enum UnaryOp: |
@@ -158,23 +167,15 @@ enum UnaryOp: | |||
158 | ArithmeticUnaryExpr: | 167 | ArithmeticUnaryExpr: |
159 | op=UnaryOp body=UnaryExpr; | 168 | op=UnaryOp body=UnaryExpr; |
160 | 169 | ||
161 | enum Modality: | ||
162 | MAY="may" | MUST="must" | CURRENT="current"; | ||
163 | |||
164 | ModalExpr: | ||
165 | modality=Modality body=UnaryExpr; | ||
166 | |||
167 | NegationExpr: | 170 | NegationExpr: |
168 | "!" body=UnaryExpr; | 171 | "!" body=UnaryExpr; |
169 | 172 | ||
170 | CountExpr: | 173 | CountExpr: |
171 | "count" body=UnaryExpr; | 174 | "count" body=UnaryExpr; |
172 | 175 | ||
173 | enum AggregationOp: | ||
174 | SUM="sum" | PROD="prod" | MIN="min" | MAX="max"; | ||
175 | |||
176 | AggregationExpr: | 176 | AggregationExpr: |
177 | op=AggregationOp "{" value=Expr "|" condition=ComparisonExpr "}"; | 177 | aggregator=[AggregatorDeclaration|QualifiedName] |
178 | "{" value=Expr "|" condition=ComparisonExpr "}"; | ||
178 | 179 | ||
179 | CastExpr returns Expr: | 180 | CastExpr returns Expr: |
180 | CastExprBody ({CastExpr.body=current} "as" targetType=[Relation|QualifiedName])?; | 181 | CastExprBody ({CastExpr.body=current} "as" targetType=[Relation|QualifiedName])?; |
@@ -191,7 +192,7 @@ VariableOrNodeExpr: | |||
191 | variableOrNode=[VariableOrNode|QualifiedName]; | 192 | variableOrNode=[VariableOrNode|QualifiedName]; |
192 | 193 | ||
193 | Constant: | 194 | Constant: |
194 | RealConstant | IntConstant | StringConstant | LogicConstant; | 195 | RealConstant | IntConstant | StringConstant | InfiniteConstant | LogicConstant; |
195 | 196 | ||
196 | IntConstant: | 197 | IntConstant: |
197 | intValue=INT; | 198 | intValue=INT; |
@@ -202,6 +203,9 @@ RealConstant: | |||
202 | StringConstant: | 203 | StringConstant: |
203 | stringValue=STRING; | 204 | stringValue=STRING; |
204 | 205 | ||
206 | InfiniteConstant: | ||
207 | {InfiniteConstant} "*"; | ||
208 | |||
205 | enum LogicValue: | 209 | enum LogicValue: |
206 | TRUE="true" | FALSE="false" | UNKNOWN="unknown" | ERROR="error"; | 210 | TRUE="true" | FALSE="false" | UNKNOWN="unknown" | ERROR="error"; |
207 | 211 | ||
@@ -276,8 +280,8 @@ Identifier: | |||
276 | NonContainmentIdentifier | "contains" | "container"; | 280 | NonContainmentIdentifier | "contains" | "container"; |
277 | 281 | ||
278 | NonContainmentIdentifier: | 282 | NonContainmentIdentifier: |
279 | ID | "atom" | "multi" | "contained" | | 283 | ID | "atom" | "multi" | "contained" | "problem" | "module" | |
280 | "sum" | "prod" | "min" | "max" | "problem" | "module"; | 284 | "datatype" | "aggregator"; |
281 | 285 | ||
282 | Real returns ecore::EDouble: | 286 | Real returns ecore::EDouble: |
283 | EXPONENTIAL | INT "." (INT | EXPONENTIAL); | 287 | EXPONENTIAL | INT "." (INT | EXPONENTIAL); |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/ProblemRuntimeModule.java b/subprojects/language/src/main/java/tools/refinery/language/ProblemRuntimeModule.java index f7039027..955a89f9 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/ProblemRuntimeModule.java +++ b/subprojects/language/src/main/java/tools/refinery/language/ProblemRuntimeModule.java | |||
@@ -30,9 +30,8 @@ import org.eclipse.xtext.validation.IResourceValidator; | |||
30 | import org.eclipse.xtext.xbase.annotations.validation.DerivedStateAwareResourceValidator; | 30 | import org.eclipse.xtext.xbase.annotations.validation.DerivedStateAwareResourceValidator; |
31 | import tools.refinery.language.conversion.ProblemValueConverterService; | 31 | import tools.refinery.language.conversion.ProblemValueConverterService; |
32 | import tools.refinery.language.linking.ProblemLinkingService; | 32 | import tools.refinery.language.linking.ProblemLinkingService; |
33 | import tools.refinery.language.naming.ProblemDelegateQualifiedNameProvider; | ||
34 | import tools.refinery.language.naming.ProblemQualifiedNameConverter; | ||
35 | import tools.refinery.language.naming.ProblemQualifiedNameProvider; | 33 | import tools.refinery.language.naming.ProblemQualifiedNameProvider; |
34 | import tools.refinery.language.naming.ProblemQualifiedNameConverter; | ||
36 | import tools.refinery.language.parser.ProblemEcoreElementFactory; | 35 | import tools.refinery.language.parser.ProblemEcoreElementFactory; |
37 | import tools.refinery.language.parser.antlr.TokenSourceInjectingProblemParser; | 36 | import tools.refinery.language.parser.antlr.TokenSourceInjectingProblemParser; |
38 | import tools.refinery.language.resource.ProblemLocationInFileProvider; | 37 | import tools.refinery.language.resource.ProblemLocationInFileProvider; |
@@ -68,12 +67,6 @@ public class ProblemRuntimeModule extends AbstractProblemRuntimeModule { | |||
68 | return ProblemQualifiedNameConverter.class; | 67 | return ProblemQualifiedNameConverter.class; |
69 | } | 68 | } |
70 | 69 | ||
71 | public void configureIQualifiedNameProviderDelegate(Binder binder) { | ||
72 | binder.bind(IQualifiedNameProvider.class) | ||
73 | .annotatedWith(Names.named(ProblemQualifiedNameProvider.NAMED_DELEGATE)) | ||
74 | .to(ProblemDelegateQualifiedNameProvider.class); | ||
75 | } | ||
76 | |||
77 | @Override | 70 | @Override |
78 | public Class<? extends IQualifiedNameProvider> bindIQualifiedNameProvider() { | 71 | public Class<? extends IQualifiedNameProvider> bindIQualifiedNameProvider() { |
79 | return ProblemQualifiedNameProvider.class; | 72 | return ProblemQualifiedNameProvider.class; |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/expressions/AbstractTermInterpreter.java b/subprojects/language/src/main/java/tools/refinery/language/expressions/AbstractTermInterpreter.java new file mode 100644 index 00000000..2530b707 --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/expressions/AbstractTermInterpreter.java | |||
@@ -0,0 +1,131 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.expressions; | ||
7 | |||
8 | import tools.refinery.language.model.problem.BinaryOp; | ||
9 | import tools.refinery.language.model.problem.UnaryOp; | ||
10 | import tools.refinery.language.typesystem.AggregatorName; | ||
11 | import tools.refinery.language.typesystem.DataExprType; | ||
12 | |||
13 | import java.util.*; | ||
14 | |||
15 | // This class is used to configure term interpreters by clients with various arguments. | ||
16 | @SuppressWarnings("SameParameterValue") | ||
17 | public abstract class AbstractTermInterpreter implements TermInterpreter { | ||
18 | private final Map<DataExprType, DataExprType> negations = new HashMap<>(); | ||
19 | private final Map<UnaryKey, DataExprType> unaryOperators = new HashMap<>(); | ||
20 | private final Set<DataExprType> comparisons = new HashSet<>(); | ||
21 | private final Set<DataExprType> ranges = new HashSet<>(); | ||
22 | private final Map<BinaryKey, DataExprType> binaryOperators = new HashMap<>(); | ||
23 | private final Set<CastKey> casts = new HashSet<>(); | ||
24 | private final Map<AggregatorKey, DataExprType> aggregators = new HashMap<>(); | ||
25 | |||
26 | protected AbstractTermInterpreter() { | ||
27 | } | ||
28 | |||
29 | protected void addNegation(DataExprType type, DataExprType result) { | ||
30 | negations.put(type, result); | ||
31 | } | ||
32 | |||
33 | protected void addNegation(DataExprType type) { | ||
34 | addNegation(type, type); | ||
35 | } | ||
36 | |||
37 | protected void addUnaryOperator(UnaryOp op, DataExprType type, DataExprType result) { | ||
38 | unaryOperators.put(new UnaryKey(op, type), result); | ||
39 | } | ||
40 | |||
41 | protected void addUnaryOperator(UnaryOp op, DataExprType type) { | ||
42 | addUnaryOperator(op, type, type); | ||
43 | } | ||
44 | |||
45 | protected void addComparison(DataExprType type) { | ||
46 | comparisons.add(type); | ||
47 | } | ||
48 | |||
49 | protected void addRange(DataExprType type) { | ||
50 | ranges.add(type); | ||
51 | } | ||
52 | |||
53 | protected void addBinaryOperator(BinaryOp op, DataExprType leftType, DataExprType rightType, DataExprType result) { | ||
54 | binaryOperators.put(new BinaryKey(op, leftType, rightType), result); | ||
55 | } | ||
56 | |||
57 | protected void addBinaryOperator(BinaryOp op, DataExprType type) { | ||
58 | addBinaryOperator(op, type, type, type); | ||
59 | } | ||
60 | |||
61 | protected void addCast(DataExprType fromType, DataExprType toType) { | ||
62 | if (fromType.equals(toType)) { | ||
63 | throw new IllegalArgumentException("The fromType and toType of a cast operator must be different"); | ||
64 | } | ||
65 | casts.add(new CastKey(fromType, toType)); | ||
66 | } | ||
67 | |||
68 | protected void addAggregator(AggregatorName aggregator, DataExprType type, DataExprType result) { | ||
69 | aggregators.put(new AggregatorKey(aggregator, type), result); | ||
70 | } | ||
71 | |||
72 | protected void addAggregator(AggregatorName aggregator, DataExprType type) { | ||
73 | addAggregator(aggregator, type, type); | ||
74 | } | ||
75 | |||
76 | @Override | ||
77 | public Optional<DataExprType> getNegationType(DataExprType type) { | ||
78 | return Optional.ofNullable(negations.get(type)); | ||
79 | } | ||
80 | |||
81 | @Override | ||
82 | public Optional<DataExprType> getUnaryOperationType(UnaryOp op, DataExprType type) { | ||
83 | if (unaryOperators.isEmpty()) { | ||
84 | return Optional.empty(); | ||
85 | } | ||
86 | return Optional.ofNullable(unaryOperators.get(new UnaryKey(op, type))); | ||
87 | } | ||
88 | |||
89 | @Override | ||
90 | public boolean isComparisonSupported(DataExprType type) { | ||
91 | return comparisons.contains(type); | ||
92 | } | ||
93 | |||
94 | @Override | ||
95 | public boolean isRangeSupported(DataExprType type) { | ||
96 | return ranges.contains(type); | ||
97 | } | ||
98 | |||
99 | @Override | ||
100 | public Optional<DataExprType> getBinaryOperationType(BinaryOp op, DataExprType leftType, DataExprType rightType) { | ||
101 | if (binaryOperators.isEmpty()) { | ||
102 | return Optional.empty(); | ||
103 | } | ||
104 | return Optional.ofNullable(binaryOperators.get(new BinaryKey(op, leftType, rightType))); | ||
105 | } | ||
106 | |||
107 | @Override | ||
108 | public Optional<DataExprType> getAggregationType(AggregatorName aggregator, DataExprType type) { | ||
109 | if (aggregators.isEmpty()) { | ||
110 | return Optional.empty(); | ||
111 | } | ||
112 | return Optional.ofNullable(aggregators.get(new AggregatorKey(aggregator, type))); | ||
113 | } | ||
114 | |||
115 | @Override | ||
116 | public boolean isCastSupported(DataExprType fromType, DataExprType toType) { | ||
117 | return casts.contains(new CastKey(fromType, toType)); | ||
118 | } | ||
119 | |||
120 | private record UnaryKey(UnaryOp op, DataExprType type) { | ||
121 | } | ||
122 | |||
123 | private record BinaryKey(BinaryOp op, DataExprType leftType, DataExprType rightType) { | ||
124 | } | ||
125 | |||
126 | private record CastKey(DataExprType fromType, DataExprType toType) { | ||
127 | } | ||
128 | |||
129 | private record AggregatorKey(AggregatorName aggregator, DataExprType type) { | ||
130 | } | ||
131 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/expressions/BuiltinTermInterpreter.java b/subprojects/language/src/main/java/tools/refinery/language/expressions/BuiltinTermInterpreter.java new file mode 100644 index 00000000..412ed8ba --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/expressions/BuiltinTermInterpreter.java | |||
@@ -0,0 +1,54 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.expressions; | ||
7 | |||
8 | import tools.refinery.language.library.BuiltinLibrary; | ||
9 | import tools.refinery.language.model.problem.BinaryOp; | ||
10 | import tools.refinery.language.model.problem.UnaryOp; | ||
11 | import tools.refinery.language.typesystem.AggregatorName; | ||
12 | import tools.refinery.language.typesystem.DataExprType; | ||
13 | |||
14 | public final class BuiltinTermInterpreter extends AbstractTermInterpreter { | ||
15 | public static final DataExprType BOOLEAN_TYPE = new DataExprType(BuiltinLibrary.BUILTIN_LIBRARY_NAME, "boolean"); | ||
16 | public static final DataExprType INT_TYPE = new DataExprType(BuiltinLibrary.BUILTIN_LIBRARY_NAME, "int"); | ||
17 | public static final DataExprType REAL_TYPE = new DataExprType(BuiltinLibrary.BUILTIN_LIBRARY_NAME, "real"); | ||
18 | public static final DataExprType STRING_TYPE = new DataExprType(BuiltinLibrary.BUILTIN_LIBRARY_NAME, "string"); | ||
19 | public static final AggregatorName MIN_AGGREGATOR = new AggregatorName(BuiltinLibrary.BUILTIN_LIBRARY_NAME, "min"); | ||
20 | public static final AggregatorName MAX_AGGREGATOR = new AggregatorName(BuiltinLibrary.BUILTIN_LIBRARY_NAME, "max"); | ||
21 | public static final AggregatorName SUM_AGGREGATOR = new AggregatorName(BuiltinLibrary.BUILTIN_LIBRARY_NAME, "sum"); | ||
22 | |||
23 | public BuiltinTermInterpreter() { | ||
24 | addNegation(BOOLEAN_TYPE); | ||
25 | addBinaryOperator(BinaryOp.AND, BOOLEAN_TYPE); | ||
26 | addBinaryOperator(BinaryOp.OR, BOOLEAN_TYPE); | ||
27 | addBinaryOperator(BinaryOp.XOR, BOOLEAN_TYPE); | ||
28 | |||
29 | addUnaryOperator(UnaryOp.PLUS, INT_TYPE); | ||
30 | addUnaryOperator(UnaryOp.MINUS, INT_TYPE); | ||
31 | addComparison(INT_TYPE); | ||
32 | addRange(INT_TYPE); | ||
33 | addBinaryOperator(BinaryOp.ADD, INT_TYPE); | ||
34 | addBinaryOperator(BinaryOp.SUB, INT_TYPE); | ||
35 | addBinaryOperator(BinaryOp.MUL, INT_TYPE); | ||
36 | addAggregator(MIN_AGGREGATOR, INT_TYPE); | ||
37 | addAggregator(MAX_AGGREGATOR, INT_TYPE); | ||
38 | addAggregator(SUM_AGGREGATOR, INT_TYPE); | ||
39 | |||
40 | addUnaryOperator(UnaryOp.PLUS, REAL_TYPE); | ||
41 | addUnaryOperator(UnaryOp.MINUS, REAL_TYPE); | ||
42 | addCast(INT_TYPE, REAL_TYPE); | ||
43 | addComparison(REAL_TYPE); | ||
44 | addRange(REAL_TYPE); | ||
45 | addBinaryOperator(BinaryOp.ADD, REAL_TYPE); | ||
46 | addBinaryOperator(BinaryOp.SUB, REAL_TYPE); | ||
47 | addBinaryOperator(BinaryOp.MUL, REAL_TYPE); | ||
48 | addBinaryOperator(BinaryOp.DIV, REAL_TYPE); | ||
49 | addBinaryOperator(BinaryOp.POW, REAL_TYPE); | ||
50 | addAggregator(MIN_AGGREGATOR, REAL_TYPE); | ||
51 | addAggregator(MAX_AGGREGATOR, REAL_TYPE); | ||
52 | addAggregator(SUM_AGGREGATOR, REAL_TYPE); | ||
53 | } | ||
54 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/expressions/CompositeTermInterpreter.java b/subprojects/language/src/main/java/tools/refinery/language/expressions/CompositeTermInterpreter.java new file mode 100644 index 00000000..b337e5dd --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/expressions/CompositeTermInterpreter.java | |||
@@ -0,0 +1,99 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.expressions; | ||
7 | |||
8 | import tools.refinery.language.model.problem.BinaryOp; | ||
9 | import tools.refinery.language.model.problem.UnaryOp; | ||
10 | import tools.refinery.language.typesystem.AggregatorName; | ||
11 | import tools.refinery.language.typesystem.DataExprType; | ||
12 | |||
13 | import java.util.List; | ||
14 | import java.util.Optional; | ||
15 | |||
16 | public class CompositeTermInterpreter implements TermInterpreter { | ||
17 | private final List<TermInterpreter> interpreters; | ||
18 | |||
19 | public CompositeTermInterpreter(List<TermInterpreter> interpreters) { | ||
20 | this.interpreters = interpreters; | ||
21 | } | ||
22 | |||
23 | @Override | ||
24 | public Optional<DataExprType> getNegationType(DataExprType type) { | ||
25 | for (var interpreter : interpreters) { | ||
26 | var result = interpreter.getNegationType(type); | ||
27 | if (result.isPresent()) { | ||
28 | return result; | ||
29 | } | ||
30 | } | ||
31 | return Optional.empty(); | ||
32 | } | ||
33 | |||
34 | @Override | ||
35 | public Optional<DataExprType> getUnaryOperationType(UnaryOp op, DataExprType type) { | ||
36 | for (var interpreter : interpreters) { | ||
37 | var result = interpreter.getUnaryOperationType(op, type); | ||
38 | if (result.isPresent()) { | ||
39 | return result; | ||
40 | } | ||
41 | } | ||
42 | return Optional.empty(); | ||
43 | } | ||
44 | |||
45 | @Override | ||
46 | public boolean isComparisonSupported(DataExprType type) { | ||
47 | for (var interpreter : interpreters) { | ||
48 | var result = interpreter.isComparisonSupported(type); | ||
49 | if (result) { | ||
50 | return true; | ||
51 | } | ||
52 | } | ||
53 | return false; | ||
54 | } | ||
55 | |||
56 | @Override | ||
57 | public boolean isRangeSupported(DataExprType type) { | ||
58 | for (var interpreter : interpreters) { | ||
59 | var result = interpreter.isRangeSupported(type); | ||
60 | if (result) { | ||
61 | return true; | ||
62 | } | ||
63 | } | ||
64 | return false; | ||
65 | } | ||
66 | |||
67 | @Override | ||
68 | public Optional<DataExprType> getBinaryOperationType(BinaryOp op, DataExprType leftType, DataExprType rightType) { | ||
69 | for (var interpreter : interpreters) { | ||
70 | var result = interpreter.getBinaryOperationType(op, leftType, rightType); | ||
71 | if (result.isPresent()) { | ||
72 | return result; | ||
73 | } | ||
74 | } | ||
75 | return Optional.empty(); | ||
76 | } | ||
77 | |||
78 | @Override | ||
79 | public boolean isCastSupported(DataExprType fromType, DataExprType toType) { | ||
80 | for (var interpreter : interpreters) { | ||
81 | var result = interpreter.isCastSupported(fromType, toType); | ||
82 | if (result) { | ||
83 | return true; | ||
84 | } | ||
85 | } | ||
86 | return false; | ||
87 | } | ||
88 | |||
89 | @Override | ||
90 | public Optional<DataExprType> getAggregationType(AggregatorName aggregator, DataExprType type) { | ||
91 | for (var interpreter : interpreters) { | ||
92 | var result = interpreter.getAggregationType(aggregator, type); | ||
93 | if (result.isPresent()) { | ||
94 | return result; | ||
95 | } | ||
96 | } | ||
97 | return Optional.empty(); | ||
98 | } | ||
99 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/expressions/TermInterpreter.java b/subprojects/language/src/main/java/tools/refinery/language/expressions/TermInterpreter.java new file mode 100644 index 00000000..122785f2 --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/expressions/TermInterpreter.java | |||
@@ -0,0 +1,29 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.expressions; | ||
7 | |||
8 | import tools.refinery.language.model.problem.BinaryOp; | ||
9 | import tools.refinery.language.model.problem.UnaryOp; | ||
10 | import tools.refinery.language.typesystem.AggregatorName; | ||
11 | import tools.refinery.language.typesystem.DataExprType; | ||
12 | |||
13 | import java.util.Optional; | ||
14 | |||
15 | public interface TermInterpreter { | ||
16 | Optional<DataExprType> getNegationType(DataExprType type); | ||
17 | |||
18 | Optional<DataExprType> getUnaryOperationType(UnaryOp op, DataExprType type); | ||
19 | |||
20 | boolean isComparisonSupported(DataExprType type); | ||
21 | |||
22 | boolean isRangeSupported(DataExprType type); | ||
23 | |||
24 | Optional<DataExprType> getBinaryOperationType(BinaryOp op, DataExprType leftType, DataExprType rightType); | ||
25 | |||
26 | boolean isCastSupported(DataExprType fromType, DataExprType toType); | ||
27 | |||
28 | Optional<DataExprType> getAggregationType(AggregatorName aggregator, DataExprType type); | ||
29 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/naming/ProblemDelegateQualifiedNameProvider.java b/subprojects/language/src/main/java/tools/refinery/language/naming/ProblemDelegateQualifiedNameProvider.java deleted file mode 100644 index b3931401..00000000 --- a/subprojects/language/src/main/java/tools/refinery/language/naming/ProblemDelegateQualifiedNameProvider.java +++ /dev/null | |||
@@ -1,44 +0,0 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.naming; | ||
7 | |||
8 | import com.google.inject.Inject; | ||
9 | import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider; | ||
10 | import org.eclipse.xtext.naming.IQualifiedNameConverter; | ||
11 | import org.eclipse.xtext.naming.QualifiedName; | ||
12 | import tools.refinery.language.model.problem.Problem; | ||
13 | import tools.refinery.language.scoping.imports.ImportAdapter; | ||
14 | import tools.refinery.language.utils.ProblemUtil; | ||
15 | |||
16 | public class ProblemDelegateQualifiedNameProvider extends DefaultDeclarativeQualifiedNameProvider { | ||
17 | @Inject | ||
18 | private IQualifiedNameConverter qualifiedNameConverter; | ||
19 | |||
20 | protected QualifiedName qualifiedName(Problem problem) { | ||
21 | var qualifiedNameString = problem.getName(); | ||
22 | if (qualifiedNameString != null) { | ||
23 | return NamingUtil.stripRootPrefix(qualifiedNameConverter.toQualifiedName(qualifiedNameString)); | ||
24 | } | ||
25 | if (!ProblemUtil.isModule(problem)) { | ||
26 | return null; | ||
27 | } | ||
28 | var resource = problem.eResource(); | ||
29 | if (resource == null) { | ||
30 | return null; | ||
31 | } | ||
32 | var resourceUri = resource.getURI(); | ||
33 | if (resourceUri == null) { | ||
34 | return null; | ||
35 | } | ||
36 | var resourceSet = resource.getResourceSet(); | ||
37 | if (resourceSet == null) { | ||
38 | return null; | ||
39 | } | ||
40 | var adapter = ImportAdapter.getOrInstall(resourceSet); | ||
41 | // If a module has no explicitly specified name, return the qualified name it was resolved under. | ||
42 | return adapter.getQualifiedName(resourceUri); | ||
43 | } | ||
44 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/naming/ProblemQualifiedNameProvider.java b/subprojects/language/src/main/java/tools/refinery/language/naming/ProblemQualifiedNameProvider.java index 5b682058..2a4df4d0 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/naming/ProblemQualifiedNameProvider.java +++ b/subprojects/language/src/main/java/tools/refinery/language/naming/ProblemQualifiedNameProvider.java | |||
@@ -6,36 +6,44 @@ | |||
6 | package tools.refinery.language.naming; | 6 | package tools.refinery.language.naming; |
7 | 7 | ||
8 | import com.google.inject.Inject; | 8 | import com.google.inject.Inject; |
9 | import com.google.inject.name.Named; | 9 | import com.google.inject.Singleton; |
10 | import org.eclipse.emf.ecore.EObject; | 10 | import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider; |
11 | import org.eclipse.xtext.naming.IQualifiedNameProvider; | 11 | import org.eclipse.xtext.naming.IQualifiedNameConverter; |
12 | import org.eclipse.xtext.naming.QualifiedName; | 12 | import org.eclipse.xtext.naming.QualifiedName; |
13 | import org.eclipse.xtext.util.IResourceScopeCache; | 13 | import tools.refinery.language.model.problem.Problem; |
14 | import org.eclipse.xtext.util.Tuples; | 14 | import tools.refinery.language.scoping.imports.ImportAdapterProvider; |
15 | import tools.refinery.language.resource.ProblemResourceDescriptionStrategy; | 15 | import tools.refinery.language.utils.ProblemUtil; |
16 | |||
17 | public class ProblemQualifiedNameProvider extends IQualifiedNameProvider.AbstractImpl { | ||
18 | private static final String PREFIX = "tools.refinery.language.naming.ProblemQualifiedNameProvider."; | ||
19 | public static final String NAMED_DELEGATE = PREFIX + "NAMED_DELEGATE"; | ||
20 | public static final String CACHE_KEY = PREFIX + "CACHE_KEY"; | ||
21 | 16 | ||
17 | @Singleton | ||
18 | public class ProblemQualifiedNameProvider extends DefaultDeclarativeQualifiedNameProvider { | ||
22 | @Inject | 19 | @Inject |
23 | @Named(NAMED_DELEGATE) | 20 | private IQualifiedNameConverter qualifiedNameConverter; |
24 | private IQualifiedNameProvider delegate; | ||
25 | 21 | ||
26 | @Inject | 22 | @Inject |
27 | private IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE; | 23 | private ImportAdapterProvider importAdapterProvider; |
28 | |||
29 | @Override | ||
30 | public QualifiedName getFullyQualifiedName(EObject obj) { | ||
31 | return cache.get(Tuples.pair(obj, CACHE_KEY), obj.eResource(), () -> computeFullyQualifiedName(obj)); | ||
32 | } | ||
33 | 24 | ||
34 | public QualifiedName computeFullyQualifiedName(EObject obj) { | 25 | protected QualifiedName qualifiedName(Problem problem) { |
35 | var qualifiedName = delegate.getFullyQualifiedName(obj); | 26 | var qualifiedNameString = problem.getName(); |
36 | if (qualifiedName != null && ProblemResourceDescriptionStrategy.shouldExport(obj)) { | 27 | if (qualifiedNameString != null) { |
37 | return NamingUtil.addRootPrefix(qualifiedName); | 28 | return NamingUtil.stripRootPrefix(qualifiedNameConverter.toQualifiedName(qualifiedNameString)); |
29 | } | ||
30 | if (!ProblemUtil.isModule(problem)) { | ||
31 | return null; | ||
32 | } | ||
33 | var resource = problem.eResource(); | ||
34 | if (resource == null) { | ||
35 | return null; | ||
36 | } | ||
37 | var resourceUri = resource.getURI(); | ||
38 | if (resourceUri == null) { | ||
39 | return null; | ||
40 | } | ||
41 | var resourceSet = resource.getResourceSet(); | ||
42 | if (resourceSet == null) { | ||
43 | return null; | ||
38 | } | 44 | } |
39 | return qualifiedName; | 45 | var adapter = importAdapterProvider.getOrInstall(resourceSet); |
46 | // If a module has no explicitly specified name, return the qualified name it was resolved under. | ||
47 | return adapter.getQualifiedName(resourceUri); | ||
40 | } | 48 | } |
41 | } | 49 | } |
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 3dcf6b1f..8fd60364 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 | |||
@@ -8,7 +8,6 @@ package tools.refinery.language.resource; | |||
8 | import com.google.common.collect.ImmutableMap; | 8 | import com.google.common.collect.ImmutableMap; |
9 | import com.google.inject.Inject; | 9 | import com.google.inject.Inject; |
10 | import com.google.inject.Singleton; | 10 | import com.google.inject.Singleton; |
11 | import com.google.inject.name.Named; | ||
12 | import org.eclipse.emf.ecore.EObject; | 11 | import org.eclipse.emf.ecore.EObject; |
13 | import org.eclipse.xtext.EcoreUtil2; | 12 | import org.eclipse.xtext.EcoreUtil2; |
14 | import org.eclipse.xtext.naming.IQualifiedNameConverter; | 13 | import org.eclipse.xtext.naming.IQualifiedNameConverter; |
@@ -19,10 +18,9 @@ import org.eclipse.xtext.resource.IEObjectDescription; | |||
19 | import org.eclipse.xtext.resource.impl.DefaultResourceDescriptionStrategy; | 18 | import org.eclipse.xtext.resource.impl.DefaultResourceDescriptionStrategy; |
20 | import org.eclipse.xtext.util.IAcceptor; | 19 | import org.eclipse.xtext.util.IAcceptor; |
21 | import tools.refinery.language.documentation.DocumentationCommentParser; | 20 | import tools.refinery.language.documentation.DocumentationCommentParser; |
22 | import tools.refinery.language.naming.ProblemQualifiedNameProvider; | ||
23 | import tools.refinery.language.scoping.imports.ImportCollector; | ||
24 | import tools.refinery.language.model.problem.*; | 21 | import tools.refinery.language.model.problem.*; |
25 | import tools.refinery.language.naming.NamingUtil; | 22 | import tools.refinery.language.naming.NamingUtil; |
23 | import tools.refinery.language.scoping.imports.ImportCollector; | ||
26 | import tools.refinery.language.utils.ProblemUtil; | 24 | import tools.refinery.language.utils.ProblemUtil; |
27 | 25 | ||
28 | import java.util.Map; | 26 | import java.util.Map; |
@@ -32,13 +30,15 @@ import java.util.stream.Collectors; | |||
32 | public class ProblemResourceDescriptionStrategy extends DefaultResourceDescriptionStrategy { | 30 | public class ProblemResourceDescriptionStrategy extends DefaultResourceDescriptionStrategy { |
33 | private static final String DATA_PREFIX = "tools.refinery.language.resource.ProblemResourceDescriptionStrategy."; | 31 | private static final String DATA_PREFIX = "tools.refinery.language.resource.ProblemResourceDescriptionStrategy."; |
34 | 32 | ||
35 | public static final String ARITY = DATA_PREFIX + "ARITY"; | 33 | public static final String TYPE_LIKE = DATA_PREFIX + "ARITY"; |
34 | public static final String TYPE_LIKE_TRUE = "true"; | ||
36 | public static final String ERROR_PREDICATE = DATA_PREFIX + "ERROR_PREDICATE"; | 35 | public static final String ERROR_PREDICATE = DATA_PREFIX + "ERROR_PREDICATE"; |
37 | public static final String ERROR_PREDICATE_TRUE = "true"; | 36 | public static final String ERROR_PREDICATE_TRUE = "true"; |
38 | public static final String SHADOWING_KEY = DATA_PREFIX + "SHADOWING_KEY"; | 37 | public static final String SHADOWING_KEY = DATA_PREFIX + "SHADOWING_KEY"; |
39 | public static final String SHADOWING_KEY_PROBLEM = "problem"; | 38 | public static final String SHADOWING_KEY_PROBLEM = "problem"; |
40 | public static final String SHADOWING_KEY_NODE = "node"; | 39 | public static final String SHADOWING_KEY_NODE = "node"; |
41 | public static final String SHADOWING_KEY_RELATION = "relation"; | 40 | public static final String SHADOWING_KEY_RELATION = "relation"; |
41 | public static final String SHADOWING_KEY_AGGREGATOR = "aggregator"; | ||
42 | public static final String PREFERRED_NAME = DATA_PREFIX + "PREFERRED_NAME"; | 42 | public static final String PREFERRED_NAME = DATA_PREFIX + "PREFERRED_NAME"; |
43 | public static final String PREFERRED_NAME_TRUE = "true"; | 43 | public static final String PREFERRED_NAME_TRUE = "true"; |
44 | public static final String IMPORTS = DATA_PREFIX + "IMPORTS"; | 44 | public static final String IMPORTS = DATA_PREFIX + "IMPORTS"; |
@@ -51,8 +51,7 @@ public class ProblemResourceDescriptionStrategy extends DefaultResourceDescripti | |||
51 | private IQualifiedNameConverter qualifiedNameConverter; | 51 | private IQualifiedNameConverter qualifiedNameConverter; |
52 | 52 | ||
53 | @Inject | 53 | @Inject |
54 | @Named(ProblemQualifiedNameProvider.NAMED_DELEGATE) | 54 | private IQualifiedNameProvider qualifiedNameProvider; |
55 | private IQualifiedNameProvider delegateQualifiedNameProvider; | ||
56 | 55 | ||
57 | @Inject | 56 | @Inject |
58 | private ImportCollector importCollector; | 57 | private ImportCollector importCollector; |
@@ -123,7 +122,7 @@ public class ProblemResourceDescriptionStrategy extends DefaultResourceDescripti | |||
123 | if (problem == null) { | 122 | if (problem == null) { |
124 | return QualifiedName.EMPTY; | 123 | return QualifiedName.EMPTY; |
125 | } | 124 | } |
126 | var qualifiedName = delegateQualifiedNameProvider.getFullyQualifiedName(problem); | 125 | var qualifiedName = qualifiedNameProvider.getFullyQualifiedName(problem); |
127 | return qualifiedName == null ? QualifiedName.EMPTY : qualifiedName; | 126 | return qualifiedName == null ? QualifiedName.EMPTY : qualifiedName; |
128 | } | 127 | } |
129 | 128 | ||
@@ -152,8 +151,11 @@ public class ProblemResourceDescriptionStrategy extends DefaultResourceDescripti | |||
152 | builder.put(SHADOWING_KEY, SHADOWING_KEY_NODE); | 151 | builder.put(SHADOWING_KEY, SHADOWING_KEY_NODE); |
153 | } else if (eObject instanceof Relation relation) { | 152 | } else if (eObject instanceof Relation relation) { |
154 | builder.put(SHADOWING_KEY, SHADOWING_KEY_RELATION); | 153 | builder.put(SHADOWING_KEY, SHADOWING_KEY_RELATION); |
155 | int arity = ProblemUtil.getArity(relation); | 154 | if (ProblemUtil.isTypeLike(relation)) { |
156 | builder.put(ARITY, Integer.toString(arity)); | 155 | builder.put(TYPE_LIKE, TYPE_LIKE_TRUE); |
156 | } | ||
157 | } else if (eObject instanceof AggregatorDeclaration) { | ||
158 | builder.put(SHADOWING_KEY, SHADOWING_KEY_AGGREGATOR); | ||
157 | } | 159 | } |
158 | if (eObject instanceof PredicateDefinition predicateDefinition && predicateDefinition.isError()) { | 160 | if (eObject instanceof PredicateDefinition predicateDefinition && predicateDefinition.isError()) { |
159 | builder.put(ERROR_PREDICATE, ERROR_PREDICATE_TRUE); | 161 | builder.put(ERROR_PREDICATE, ERROR_PREDICATE_TRUE); |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/scoping/ProblemLocalScopeProvider.java b/subprojects/language/src/main/java/tools/refinery/language/scoping/ProblemLocalScopeProvider.java index 0067bf94..3b94423a 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/scoping/ProblemLocalScopeProvider.java +++ b/subprojects/language/src/main/java/tools/refinery/language/scoping/ProblemLocalScopeProvider.java | |||
@@ -6,7 +6,6 @@ | |||
6 | package tools.refinery.language.scoping; | 6 | package tools.refinery.language.scoping; |
7 | 7 | ||
8 | import com.google.inject.Inject; | 8 | import com.google.inject.Inject; |
9 | import com.google.inject.name.Named; | ||
10 | import org.eclipse.emf.ecore.EObject; | 9 | import org.eclipse.emf.ecore.EObject; |
11 | import org.eclipse.emf.ecore.EReference; | 10 | import org.eclipse.emf.ecore.EReference; |
12 | import org.eclipse.emf.ecore.resource.Resource; | 11 | import org.eclipse.emf.ecore.resource.Resource; |
@@ -17,14 +16,12 @@ import org.eclipse.xtext.resource.ISelectable; | |||
17 | import org.eclipse.xtext.scoping.IScope; | 16 | import org.eclipse.xtext.scoping.IScope; |
18 | import org.eclipse.xtext.scoping.impl.AbstractGlobalScopeDelegatingScopeProvider; | 17 | import org.eclipse.xtext.scoping.impl.AbstractGlobalScopeDelegatingScopeProvider; |
19 | import org.eclipse.xtext.util.IResourceScopeCache; | 18 | import org.eclipse.xtext.util.IResourceScopeCache; |
20 | import tools.refinery.language.naming.ProblemQualifiedNameProvider; | ||
21 | 19 | ||
22 | public class ProblemLocalScopeProvider extends AbstractGlobalScopeDelegatingScopeProvider { | 20 | public class ProblemLocalScopeProvider extends AbstractGlobalScopeDelegatingScopeProvider { |
23 | private static final String CACHE_KEY = "tools.refinery.language.scoping.ProblemLocalScopeProvider.CACHE_KEY"; | 21 | private static final String CACHE_KEY = "tools.refinery.language.scoping.ProblemLocalScopeProvider.CACHE_KEY"; |
24 | 22 | ||
25 | @Inject | 23 | @Inject |
26 | @Named(ProblemQualifiedNameProvider.NAMED_DELEGATE) | 24 | private IQualifiedNameProvider qualifiedNameProvider; |
27 | private IQualifiedNameProvider delegateQualifiedNameProvider; | ||
28 | 25 | ||
29 | @Inject | 26 | @Inject |
30 | private IResourceDescriptionsProvider resourceDescriptionsProvider; | 27 | private IResourceDescriptionsProvider resourceDescriptionsProvider; |
@@ -59,7 +56,7 @@ public class ProblemLocalScopeProvider extends AbstractGlobalScopeDelegatingScop | |||
59 | if (rootElement == null) { | 56 | if (rootElement == null) { |
60 | return new NoFullyQualifiedNamesSelectable(resourceDescription); | 57 | return new NoFullyQualifiedNamesSelectable(resourceDescription); |
61 | } | 58 | } |
62 | var rootName = delegateQualifiedNameProvider.getFullyQualifiedName(rootElement); | 59 | var rootName = qualifiedNameProvider.getFullyQualifiedName(rootElement); |
63 | if (rootName == null) { | 60 | if (rootName == null) { |
64 | return new NoFullyQualifiedNamesSelectable(resourceDescription); | 61 | return new NoFullyQualifiedNamesSelectable(resourceDescription); |
65 | } | 62 | } |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/scoping/ProblemScopeProvider.java b/subprojects/language/src/main/java/tools/refinery/language/scoping/ProblemScopeProvider.java index f83a7ebd..d94c9a13 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/scoping/ProblemScopeProvider.java +++ b/subprojects/language/src/main/java/tools/refinery/language/scoping/ProblemScopeProvider.java | |||
@@ -9,14 +9,12 @@ | |||
9 | */ | 9 | */ |
10 | package tools.refinery.language.scoping; | 10 | package tools.refinery.language.scoping; |
11 | 11 | ||
12 | import com.google.inject.Inject; | ||
13 | import org.eclipse.emf.ecore.EObject; | 12 | import org.eclipse.emf.ecore.EObject; |
14 | import org.eclipse.emf.ecore.EReference; | 13 | import org.eclipse.emf.ecore.EReference; |
15 | import org.eclipse.xtext.EcoreUtil2; | 14 | import org.eclipse.xtext.EcoreUtil2; |
16 | import org.eclipse.xtext.scoping.IScope; | 15 | import org.eclipse.xtext.scoping.IScope; |
17 | import org.eclipse.xtext.scoping.Scopes; | 16 | import org.eclipse.xtext.scoping.Scopes; |
18 | import tools.refinery.language.model.problem.*; | 17 | import tools.refinery.language.model.problem.*; |
19 | import tools.refinery.language.utils.ProblemDesugarer; | ||
20 | 18 | ||
21 | import java.util.Collection; | 19 | import java.util.Collection; |
22 | import java.util.LinkedHashSet; | 20 | import java.util.LinkedHashSet; |
@@ -29,9 +27,6 @@ import java.util.LinkedHashSet; | |||
29 | * on how and when to use it. | 27 | * on how and when to use it. |
30 | */ | 28 | */ |
31 | public class ProblemScopeProvider extends AbstractProblemScopeProvider { | 29 | public class ProblemScopeProvider extends AbstractProblemScopeProvider { |
32 | @Inject | ||
33 | private ProblemDesugarer desugarer; | ||
34 | |||
35 | @Override | 30 | @Override |
36 | public IScope getScope(EObject context, EReference reference) { | 31 | public IScope getScope(EObject context, EReference reference) { |
37 | var scope = super.getScope(context, reference); | 32 | var scope = super.getScope(context, reference); |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/scoping/imports/ImportAdapter.java b/subprojects/language/src/main/java/tools/refinery/language/scoping/imports/ImportAdapter.java index d7a5304f..753c8565 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/scoping/imports/ImportAdapter.java +++ b/subprojects/language/src/main/java/tools/refinery/language/scoping/imports/ImportAdapter.java | |||
@@ -16,7 +16,12 @@ import org.eclipse.emf.ecore.resource.Resource; | |||
16 | import org.eclipse.emf.ecore.resource.ResourceSet; | 16 | import org.eclipse.emf.ecore.resource.ResourceSet; |
17 | import org.eclipse.emf.ecore.util.EcoreUtil; | 17 | import org.eclipse.emf.ecore.util.EcoreUtil; |
18 | import org.eclipse.xtext.naming.QualifiedName; | 18 | import org.eclipse.xtext.naming.QualifiedName; |
19 | import tools.refinery.language.expressions.CompositeTermInterpreter; | ||
20 | import tools.refinery.language.expressions.TermInterpreter; | ||
21 | import tools.refinery.language.library.BuiltinLibrary; | ||
19 | import tools.refinery.language.library.RefineryLibrary; | 22 | import tools.refinery.language.library.RefineryLibrary; |
23 | import tools.refinery.language.model.problem.Problem; | ||
24 | import tools.refinery.language.utils.BuiltinSymbols; | ||
20 | 25 | ||
21 | import java.io.File; | 26 | import java.io.File; |
22 | import java.nio.file.Path; | 27 | import java.nio.file.Path; |
@@ -25,15 +30,12 @@ import java.util.*; | |||
25 | public class ImportAdapter extends AdapterImpl { | 30 | public class ImportAdapter extends AdapterImpl { |
26 | private static final Logger LOG = Logger.getLogger(ImportAdapter.class); | 31 | private static final Logger LOG = Logger.getLogger(ImportAdapter.class); |
27 | private static final List<RefineryLibrary> DEFAULT_LIBRARIES; | 32 | private static final List<RefineryLibrary> DEFAULT_LIBRARIES; |
33 | private static final List<TermInterpreter> DEFAULT_TERM_INTERPRETERS; | ||
28 | private static final List<Path> DEFAULT_PATHS; | 34 | private static final List<Path> DEFAULT_PATHS; |
29 | 35 | ||
30 | static { | 36 | static { |
31 | var serviceLoader = ServiceLoader.load(RefineryLibrary.class); | 37 | DEFAULT_LIBRARIES = loadServices(RefineryLibrary.class); |
32 | var defaultLibraries = new ArrayList<RefineryLibrary>(); | 38 | DEFAULT_TERM_INTERPRETERS = loadServices(TermInterpreter.class); |
33 | for (var service : serviceLoader) { | ||
34 | defaultLibraries.add(service); | ||
35 | } | ||
36 | DEFAULT_LIBRARIES = List.copyOf(defaultLibraries); | ||
37 | var pathEnv = System.getenv("REFINERY_LIBRARY_PATH"); | 39 | var pathEnv = System.getenv("REFINERY_LIBRARY_PATH"); |
38 | if (pathEnv == null) { | 40 | if (pathEnv == null) { |
39 | DEFAULT_PATHS = List.of(); | 41 | DEFAULT_PATHS = List.of(); |
@@ -45,16 +47,29 @@ public class ImportAdapter extends AdapterImpl { | |||
45 | } | 47 | } |
46 | } | 48 | } |
47 | 49 | ||
48 | private final List<RefineryLibrary> libraries; | 50 | private static <T> List<T> loadServices(Class<T> serviceClass) { |
49 | private final List<Path> libraryPaths; | 51 | var serviceLoader = ServiceLoader.load(serviceClass); |
52 | var services = new ArrayList<T>(); | ||
53 | for (var service : serviceLoader) { | ||
54 | services.add(service); | ||
55 | } | ||
56 | return List.copyOf(services); | ||
57 | } | ||
58 | |||
59 | private ResourceSet resourceSet; | ||
60 | private final List<RefineryLibrary> libraries = new ArrayList<>(DEFAULT_LIBRARIES); | ||
61 | private final List<TermInterpreter> termInterpreters = new ArrayList<>(DEFAULT_TERM_INTERPRETERS); | ||
62 | private final TermInterpreter termInterpreter = new CompositeTermInterpreter(termInterpreters); | ||
63 | private final List<Path> libraryPaths = new ArrayList<>(DEFAULT_PATHS); | ||
50 | private final Cache<QualifiedName, QualifiedName> failedResolutions = | 64 | private final Cache<QualifiedName, QualifiedName> failedResolutions = |
51 | CacheBuilder.newBuilder().maximumSize(100).build(); | 65 | CacheBuilder.newBuilder().maximumSize(100).build(); |
52 | private final Map<QualifiedName, URI> qualifiedNameToUriMap = new LinkedHashMap<>(); | 66 | private final Map<QualifiedName, URI> qualifiedNameToUriMap = new LinkedHashMap<>(); |
53 | private final Map<URI, QualifiedName> uriToQualifiedNameMap = new LinkedHashMap<>(); | 67 | private final Map<URI, QualifiedName> uriToQualifiedNameMap = new LinkedHashMap<>(); |
68 | private Problem builtinProblem; | ||
69 | private BuiltinSymbols builtinSymbols; | ||
54 | 70 | ||
55 | private ImportAdapter(ResourceSet resourceSet) { | 71 | void setResourceSet(ResourceSet resourceSet) { |
56 | libraries = new ArrayList<>(DEFAULT_LIBRARIES); | 72 | this.resourceSet = resourceSet; |
57 | libraryPaths = new ArrayList<>(DEFAULT_PATHS); | ||
58 | for (var resource : resourceSet.getResources()) { | 73 | for (var resource : resourceSet.getResources()) { |
59 | resourceAdded(resource); | 74 | resourceAdded(resource); |
60 | } | 75 | } |
@@ -69,6 +84,14 @@ public class ImportAdapter extends AdapterImpl { | |||
69 | return libraries; | 84 | return libraries; |
70 | } | 85 | } |
71 | 86 | ||
87 | public List<TermInterpreter> getTermInterpreters() { | ||
88 | return termInterpreters; | ||
89 | } | ||
90 | |||
91 | public TermInterpreter getTermInterpreter() { | ||
92 | return termInterpreter; | ||
93 | } | ||
94 | |||
72 | public List<Path> getLibraryPaths() { | 95 | public List<Path> getLibraryPaths() { |
73 | return libraryPaths; | 96 | return libraryPaths; |
74 | } | 97 | } |
@@ -190,16 +213,26 @@ public class ImportAdapter extends AdapterImpl { | |||
190 | } | 213 | } |
191 | } | 214 | } |
192 | 215 | ||
193 | public static ImportAdapter getOrInstall(ResourceSet resourceSet) { | 216 | public Problem getBuiltinProblem() { |
194 | var adapter = getAdapter(resourceSet); | 217 | if (builtinProblem == null) { |
195 | if (adapter == null) { | 218 | var builtinResource = resourceSet.getResource(BuiltinLibrary.BUILTIN_LIBRARY_URI, true); |
196 | adapter = new ImportAdapter(resourceSet); | 219 | if (builtinResource == null) { |
197 | resourceSet.eAdapters().add(adapter); | 220 | throw new IllegalStateException("Failed to load builtin resource"); |
221 | } | ||
222 | var contents = builtinResource.getContents(); | ||
223 | if (contents.isEmpty()) { | ||
224 | throw new IllegalStateException("builtin resource is empty"); | ||
225 | } | ||
226 | builtinProblem = (Problem) contents.getFirst(); | ||
227 | EcoreUtil.resolveAll(builtinResource); | ||
198 | } | 228 | } |
199 | return adapter; | 229 | return builtinProblem; |
200 | } | 230 | } |
201 | 231 | ||
202 | private static ImportAdapter getAdapter(ResourceSet resourceSet) { | 232 | public BuiltinSymbols getBuiltinSymbols() { |
203 | return (ImportAdapter) EcoreUtil.getAdapter(resourceSet.eAdapters(), ImportAdapter.class); | 233 | if (builtinSymbols == null) { |
234 | builtinSymbols = new BuiltinSymbols(getBuiltinProblem()); | ||
235 | } | ||
236 | return builtinSymbols; | ||
204 | } | 237 | } |
205 | } | 238 | } |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/scoping/imports/ImportAdapterProvider.java b/subprojects/language/src/main/java/tools/refinery/language/scoping/imports/ImportAdapterProvider.java new file mode 100644 index 00000000..5ab3a851 --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/scoping/imports/ImportAdapterProvider.java | |||
@@ -0,0 +1,68 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.scoping.imports; | ||
7 | |||
8 | import com.google.inject.Inject; | ||
9 | import com.google.inject.Provider; | ||
10 | import com.google.inject.Singleton; | ||
11 | import org.eclipse.emf.ecore.EObject; | ||
12 | import org.eclipse.emf.ecore.resource.Resource; | ||
13 | import org.eclipse.emf.ecore.resource.ResourceSet; | ||
14 | import org.eclipse.emf.ecore.util.EcoreUtil; | ||
15 | import org.jetbrains.annotations.NotNull; | ||
16 | import tools.refinery.language.expressions.TermInterpreter; | ||
17 | import tools.refinery.language.utils.BuiltinSymbols; | ||
18 | |||
19 | @Singleton | ||
20 | public class ImportAdapterProvider { | ||
21 | @Inject | ||
22 | private Provider<ImportAdapter> delegateProvider; | ||
23 | |||
24 | public BuiltinSymbols getBuiltinSymbols(@NotNull EObject context) { | ||
25 | var adapter = getOrInstall(context); | ||
26 | return adapter.getBuiltinSymbols(); | ||
27 | } | ||
28 | |||
29 | public BuiltinSymbols getBuiltinSymbols(@NotNull Resource context) { | ||
30 | var adapter = getOrInstall(context); | ||
31 | return adapter.getBuiltinSymbols(); | ||
32 | } | ||
33 | |||
34 | public TermInterpreter getTermInterpreter(@NotNull EObject context) { | ||
35 | var adapter = getOrInstall(context); | ||
36 | return adapter.getTermInterpreter(); | ||
37 | } | ||
38 | |||
39 | public ImportAdapter getOrInstall(@NotNull EObject context) { | ||
40 | var resource = context.eResource(); | ||
41 | if (resource == null) { | ||
42 | throw new IllegalArgumentException("context is not in a resource"); | ||
43 | } | ||
44 | return getOrInstall(resource); | ||
45 | } | ||
46 | |||
47 | public ImportAdapter getOrInstall(@NotNull Resource context) { | ||
48 | var resourceSet = context.getResourceSet(); | ||
49 | if (resourceSet == null) { | ||
50 | throw new IllegalArgumentException("context is not in a resource set"); | ||
51 | } | ||
52 | return getOrInstall(resourceSet); | ||
53 | } | ||
54 | |||
55 | public ImportAdapter getOrInstall(@NotNull ResourceSet resourceSet) { | ||
56 | var adapter = getAdapter(resourceSet); | ||
57 | if (adapter == null) { | ||
58 | adapter = delegateProvider.get(); | ||
59 | adapter.setResourceSet(resourceSet); | ||
60 | resourceSet.eAdapters().add(adapter); | ||
61 | } | ||
62 | return adapter; | ||
63 | } | ||
64 | |||
65 | public static ImportAdapter getAdapter(@NotNull ResourceSet resourceSet) { | ||
66 | return (ImportAdapter) EcoreUtil.getAdapter(resourceSet.eAdapters(), ImportAdapter.class); | ||
67 | } | ||
68 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/scoping/imports/ImportCollector.java b/subprojects/language/src/main/java/tools/refinery/language/scoping/imports/ImportCollector.java index ac5a92ba..f3ab54ae 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/scoping/imports/ImportCollector.java +++ b/subprojects/language/src/main/java/tools/refinery/language/scoping/imports/ImportCollector.java | |||
@@ -46,6 +46,9 @@ public class ImportCollector { | |||
46 | @Inject | 46 | @Inject |
47 | private Provider<LoadOnDemandResourceDescriptionProvider> loadOnDemandProvider; | 47 | private Provider<LoadOnDemandResourceDescriptionProvider> loadOnDemandProvider; |
48 | 48 | ||
49 | @Inject | ||
50 | private ImportAdapterProvider importAdapterProvider; | ||
51 | |||
49 | public ImportCollection getDirectImports(Resource resource) { | 52 | public ImportCollection getDirectImports(Resource resource) { |
50 | return cache.get(DIRECT_IMPORTS_KEY, resource, () -> this.computeDirectImports(resource)); | 53 | return cache.get(DIRECT_IMPORTS_KEY, resource, () -> this.computeDirectImports(resource)); |
51 | } | 54 | } |
@@ -58,7 +61,7 @@ public class ImportCollector { | |||
58 | if (resourceSet == null) { | 61 | if (resourceSet == null) { |
59 | return ImportCollection.EMPTY; | 62 | return ImportCollection.EMPTY; |
60 | } | 63 | } |
61 | var adapter = ImportAdapter.getOrInstall(resourceSet); | 64 | var adapter = importAdapterProvider.getOrInstall(resourceSet); |
62 | var collection = new ImportCollection(); | 65 | var collection = new ImportCollection(); |
63 | collectAutomaticImports(collection, adapter); | 66 | collectAutomaticImports(collection, adapter); |
64 | collectExplicitImports(problem, collection, adapter); | 67 | collectExplicitImports(problem, collection, adapter); |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/typesystem/AggregatorName.java b/subprojects/language/src/main/java/tools/refinery/language/typesystem/AggregatorName.java new file mode 100644 index 00000000..5939865a --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/typesystem/AggregatorName.java | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.typesystem; | ||
7 | |||
8 | import org.eclipse.xtext.naming.QualifiedName; | ||
9 | |||
10 | public record AggregatorName(QualifiedName qualifiedName) { | ||
11 | public AggregatorName(QualifiedName prefix, String name) { | ||
12 | this(prefix.append(name)); | ||
13 | } | ||
14 | |||
15 | @Override | ||
16 | public String toString() { | ||
17 | return qualifiedName.isEmpty() ? "" : qualifiedName.getLastSegment(); | ||
18 | } | ||
19 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/typesystem/DataExprType.java b/subprojects/language/src/main/java/tools/refinery/language/typesystem/DataExprType.java new file mode 100644 index 00000000..9bc3e6aa --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/typesystem/DataExprType.java | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.typesystem; | ||
7 | |||
8 | import org.eclipse.xtext.naming.QualifiedName; | ||
9 | |||
10 | public record DataExprType(QualifiedName qualifiedName) implements FixedType { | ||
11 | public DataExprType(QualifiedName prefix, String name) { | ||
12 | this(prefix.append(name)); | ||
13 | } | ||
14 | |||
15 | @Override | ||
16 | public String toString() { | ||
17 | return qualifiedName.isEmpty() ? "" : qualifiedName.getLastSegment(); | ||
18 | } | ||
19 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/typesystem/ExprType.java b/subprojects/language/src/main/java/tools/refinery/language/typesystem/ExprType.java new file mode 100644 index 00000000..9e44063d --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/typesystem/ExprType.java | |||
@@ -0,0 +1,16 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.typesystem; | ||
7 | |||
8 | public sealed interface ExprType permits FixedType, MutableType { | ||
9 | NodeType NODE = new NodeType(); | ||
10 | LiteralType LITERAL = new LiteralType(); | ||
11 | InvalidType INVALID = new InvalidType(); | ||
12 | |||
13 | FixedType getActualType(); | ||
14 | |||
15 | ExprType unwrapIfSet(); | ||
16 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/typesystem/FixedType.java b/subprojects/language/src/main/java/tools/refinery/language/typesystem/FixedType.java new file mode 100644 index 00000000..1b2ded48 --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/typesystem/FixedType.java | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.typesystem; | ||
7 | |||
8 | public sealed interface FixedType extends ExprType permits NodeType, LiteralType, InvalidType, DataExprType { | ||
9 | @Override | ||
10 | default FixedType getActualType() { | ||
11 | return this; | ||
12 | } | ||
13 | |||
14 | @Override | ||
15 | default FixedType unwrapIfSet() { | ||
16 | return this; | ||
17 | } | ||
18 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/typesystem/InvalidType.java b/subprojects/language/src/main/java/tools/refinery/language/typesystem/InvalidType.java new file mode 100644 index 00000000..c18612bc --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/typesystem/InvalidType.java | |||
@@ -0,0 +1,16 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.typesystem; | ||
7 | |||
8 | public final class InvalidType implements FixedType { | ||
9 | InvalidType() { | ||
10 | } | ||
11 | |||
12 | @Override | ||
13 | public String toString() { | ||
14 | return "invalid"; | ||
15 | } | ||
16 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/typesystem/LiteralType.java b/subprojects/language/src/main/java/tools/refinery/language/typesystem/LiteralType.java new file mode 100644 index 00000000..7fd33553 --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/typesystem/LiteralType.java | |||
@@ -0,0 +1,16 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.typesystem; | ||
7 | |||
8 | public final class LiteralType implements FixedType { | ||
9 | LiteralType() { | ||
10 | } | ||
11 | |||
12 | @Override | ||
13 | public String toString() { | ||
14 | return "constraint"; | ||
15 | } | ||
16 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/typesystem/MutableType.java b/subprojects/language/src/main/java/tools/refinery/language/typesystem/MutableType.java new file mode 100644 index 00000000..78fdf884 --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/typesystem/MutableType.java | |||
@@ -0,0 +1,32 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.typesystem; | ||
7 | |||
8 | public final class MutableType implements ExprType { | ||
9 | private DataExprType actualType; | ||
10 | |||
11 | @Override | ||
12 | public FixedType getActualType() { | ||
13 | return actualType == null ? INVALID : actualType; | ||
14 | } | ||
15 | |||
16 | public void setActualType(DataExprType actualType) { | ||
17 | if (this.actualType != null) { | ||
18 | throw new IllegalStateException("Actual type was already set"); | ||
19 | } | ||
20 | this.actualType = actualType; | ||
21 | } | ||
22 | |||
23 | @Override | ||
24 | public ExprType unwrapIfSet() { | ||
25 | return actualType == null ? this : actualType; | ||
26 | } | ||
27 | |||
28 | @Override | ||
29 | public String toString() { | ||
30 | return getActualType().toString(); | ||
31 | } | ||
32 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/typesystem/NodeType.java b/subprojects/language/src/main/java/tools/refinery/language/typesystem/NodeType.java new file mode 100644 index 00000000..1baff212 --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/typesystem/NodeType.java | |||
@@ -0,0 +1,16 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.typesystem; | ||
7 | |||
8 | public final class NodeType implements FixedType { | ||
9 | NodeType() { | ||
10 | } | ||
11 | |||
12 | @Override | ||
13 | public String toString() { | ||
14 | return "node"; | ||
15 | } | ||
16 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/typesystem/ProblemTypeAnalyzer.java b/subprojects/language/src/main/java/tools/refinery/language/typesystem/ProblemTypeAnalyzer.java new file mode 100644 index 00000000..fcf99ad8 --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/typesystem/ProblemTypeAnalyzer.java | |||
@@ -0,0 +1,32 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.typesystem; | ||
7 | |||
8 | import com.google.inject.Inject; | ||
9 | import com.google.inject.Provider; | ||
10 | import com.google.inject.Singleton; | ||
11 | import org.eclipse.xtext.util.IResourceScopeCache; | ||
12 | import tools.refinery.language.model.problem.Problem; | ||
13 | |||
14 | @Singleton | ||
15 | public class ProblemTypeAnalyzer { | ||
16 | private static final String CACHE_KEY = "tools.refinery.language.typesystem.ProblemTypeAnalyzer.CACHE_KEY"; | ||
17 | |||
18 | @Inject | ||
19 | private IResourceScopeCache resourceScopeCache; | ||
20 | |||
21 | @Inject | ||
22 | private Provider<TypedModule> typedModuleProvider; | ||
23 | |||
24 | public TypedModule getOrComputeTypes(Problem problem) { | ||
25 | var resource = problem.eResource(); | ||
26 | return resourceScopeCache.get(CACHE_KEY, resource, () -> { | ||
27 | var typedModule = typedModuleProvider.get(); | ||
28 | typedModule.setProblem(problem); | ||
29 | return typedModule; | ||
30 | }); | ||
31 | } | ||
32 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/typesystem/Signature.java b/subprojects/language/src/main/java/tools/refinery/language/typesystem/Signature.java new file mode 100644 index 00000000..8e72c185 --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/typesystem/Signature.java | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.typesystem; | ||
7 | |||
8 | import java.util.List; | ||
9 | |||
10 | public record Signature(List<FixedType> parameterTypes, FixedType resultType) { | ||
11 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/typesystem/SignatureProvider.java b/subprojects/language/src/main/java/tools/refinery/language/typesystem/SignatureProvider.java new file mode 100644 index 00000000..3e25a0f5 --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/typesystem/SignatureProvider.java | |||
@@ -0,0 +1,107 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.typesystem; | ||
7 | |||
8 | import com.google.inject.Inject; | ||
9 | import com.google.inject.Singleton; | ||
10 | import org.eclipse.xtext.naming.IQualifiedNameProvider; | ||
11 | import org.eclipse.xtext.util.IResourceScopeCache; | ||
12 | import tools.refinery.language.model.problem.*; | ||
13 | |||
14 | import java.util.ArrayList; | ||
15 | import java.util.HashMap; | ||
16 | import java.util.List; | ||
17 | |||
18 | @Singleton | ||
19 | public class SignatureProvider { | ||
20 | private static final String PREFIX = "tools.refinery.language.typesystem.SignatureProvider."; | ||
21 | private static final String SIGNATURE_CACHE = PREFIX + "SIGNATURE_CACHE"; | ||
22 | private static final String DATATYPE_CACHE = PREFIX + "DATATYPE_CACHE"; | ||
23 | private static final String AGGREGATOR_CACHE = PREFIX + "AGGREGATOR_CACHE"; | ||
24 | |||
25 | @Inject | ||
26 | private IQualifiedNameProvider qualifiedNameProvider; | ||
27 | |||
28 | @Inject | ||
29 | private IResourceScopeCache cache; | ||
30 | |||
31 | public Signature getSignature(Relation relation) { | ||
32 | var signatures = cache.get(SIGNATURE_CACHE, relation.eResource(), () -> new HashMap<Relation, Signature>()); | ||
33 | return signatures.computeIfAbsent(relation, this::computeSignature); | ||
34 | } | ||
35 | |||
36 | public int getArity(Relation relation) { | ||
37 | return getSignature(relation).parameterTypes().size(); | ||
38 | } | ||
39 | |||
40 | private Signature computeSignature(Relation relation) { | ||
41 | return new Signature(getParameterTypes(relation), getResultType(relation)); | ||
42 | } | ||
43 | |||
44 | private List<FixedType> getParameterTypes(Relation relation) { | ||
45 | return switch (relation) { | ||
46 | case ClassDeclaration ignored -> List.of(ExprType.NODE); | ||
47 | case EnumDeclaration ignored -> List.of(ExprType.NODE); | ||
48 | case DatatypeDeclaration datatypeDeclaration -> List.of(getDataType(datatypeDeclaration)); | ||
49 | case ReferenceDeclaration referenceDeclaration -> { | ||
50 | if (referenceDeclaration.getReferenceType() instanceof DatatypeDeclaration) { | ||
51 | yield List.of(ExprType.NODE); | ||
52 | } | ||
53 | yield List.of(ExprType.NODE, ExprType.NODE); | ||
54 | } | ||
55 | case ParametricDefinition parametricDefinition -> { | ||
56 | var parameters = parametricDefinition.getParameters(); | ||
57 | var exprTypes = new ArrayList<FixedType>(parameters.size()); | ||
58 | for (var parameter : parameters) { | ||
59 | if (parameter.getParameterType() instanceof DatatypeDeclaration datatypeDeclaration) { | ||
60 | exprTypes.add(getDataType(datatypeDeclaration)); | ||
61 | } else { | ||
62 | exprTypes.add(ExprType.NODE); | ||
63 | } | ||
64 | } | ||
65 | yield List.copyOf(exprTypes); | ||
66 | } | ||
67 | default -> throw new IllegalArgumentException("Unknown Relation: " + relation); | ||
68 | }; | ||
69 | } | ||
70 | |||
71 | private FixedType getResultType(Relation relation) { | ||
72 | if (relation instanceof ReferenceDeclaration referenceDeclaration && | ||
73 | referenceDeclaration.getReferenceType() instanceof DatatypeDeclaration datatypeDeclaration) { | ||
74 | return getDataType(datatypeDeclaration); | ||
75 | } | ||
76 | return ExprType.LITERAL; | ||
77 | } | ||
78 | |||
79 | public DataExprType getDataType(DatatypeDeclaration datatypeDeclaration) { | ||
80 | var dataTypes = cache.get(DATATYPE_CACHE, datatypeDeclaration.eResource(), | ||
81 | () -> new HashMap<DatatypeDeclaration, DataExprType>()); | ||
82 | return dataTypes.computeIfAbsent(datatypeDeclaration, this::computeDataType); | ||
83 | } | ||
84 | |||
85 | private DataExprType computeDataType(DatatypeDeclaration datatypeDeclaration) { | ||
86 | var qualifiedName = qualifiedNameProvider.getFullyQualifiedName(datatypeDeclaration); | ||
87 | if (qualifiedName == null) { | ||
88 | throw new IllegalArgumentException("Datatype declaration has no qualified name: " + datatypeDeclaration); | ||
89 | } | ||
90 | return new DataExprType(qualifiedName); | ||
91 | } | ||
92 | |||
93 | public AggregatorName getAggregatorName(AggregatorDeclaration aggregatorDeclaration) { | ||
94 | var dataTypes = cache.get(AGGREGATOR_CACHE, aggregatorDeclaration.eResource(), | ||
95 | () -> new HashMap<AggregatorDeclaration, AggregatorName>()); | ||
96 | return dataTypes.computeIfAbsent(aggregatorDeclaration, this::computeAggregatorName); | ||
97 | } | ||
98 | |||
99 | private AggregatorName computeAggregatorName(AggregatorDeclaration aggregatorDeclaration) { | ||
100 | var qualifiedName = qualifiedNameProvider.getFullyQualifiedName(aggregatorDeclaration); | ||
101 | if (qualifiedName == null) { | ||
102 | throw new IllegalArgumentException( | ||
103 | "Aggregator declaration has no qualified name: " + aggregatorDeclaration); | ||
104 | } | ||
105 | return new AggregatorName(qualifiedName); | ||
106 | } | ||
107 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/typesystem/TypedModule.java b/subprojects/language/src/main/java/tools/refinery/language/typesystem/TypedModule.java new file mode 100644 index 00000000..de923e0d --- /dev/null +++ b/subprojects/language/src/main/java/tools/refinery/language/typesystem/TypedModule.java | |||
@@ -0,0 +1,568 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.typesystem; | ||
7 | |||
8 | import com.google.inject.Inject; | ||
9 | import org.eclipse.emf.common.util.Diagnostic; | ||
10 | import org.eclipse.emf.ecore.EObject; | ||
11 | import org.eclipse.emf.ecore.EStructuralFeature; | ||
12 | import org.eclipse.xtext.validation.CheckType; | ||
13 | import org.eclipse.xtext.validation.FeatureBasedDiagnostic; | ||
14 | import tools.refinery.language.expressions.BuiltinTermInterpreter; | ||
15 | import tools.refinery.language.expressions.TermInterpreter; | ||
16 | import tools.refinery.language.model.problem.*; | ||
17 | import tools.refinery.language.scoping.imports.ImportAdapterProvider; | ||
18 | import tools.refinery.language.validation.ProblemValidator; | ||
19 | |||
20 | import java.util.*; | ||
21 | |||
22 | public class TypedModule { | ||
23 | private static final String OPERAND_TYPE_ERROR_MESSAGE = "Cannot determine operand type."; | ||
24 | |||
25 | @Inject | ||
26 | private SignatureProvider signatureProvider; | ||
27 | |||
28 | @Inject | ||
29 | private ImportAdapterProvider importAdapterProvider; | ||
30 | |||
31 | private TermInterpreter interpreter; | ||
32 | private final Map<Variable, List<AssignmentExpr>> assignments = new LinkedHashMap<>(); | ||
33 | private final Map<Variable, FixedType> variableTypes = new HashMap<>(); | ||
34 | private final Map<Expr, ExprType> expressionTypes = new HashMap<>(); | ||
35 | private final Set<Variable> variablesToProcess = new LinkedHashSet<>(); | ||
36 | private final List<FeatureBasedDiagnostic> diagnostics = new ArrayList<>(); | ||
37 | |||
38 | void setProblem(Problem problem) { | ||
39 | interpreter = importAdapterProvider.getTermInterpreter(problem); | ||
40 | gatherAssignments(problem); | ||
41 | checkTypes(problem); | ||
42 | } | ||
43 | |||
44 | private void gatherAssignments(Problem problem) { | ||
45 | var iterator = problem.eAllContents(); | ||
46 | while (iterator.hasNext()) { | ||
47 | var eObject = iterator.next(); | ||
48 | if (!(eObject instanceof AssignmentExpr assignmentExpr)) { | ||
49 | continue; | ||
50 | } | ||
51 | if (assignmentExpr.getLeft() instanceof VariableOrNodeExpr variableOrNodeExpr && | ||
52 | variableOrNodeExpr.getVariableOrNode() instanceof Variable variable) { | ||
53 | var assignmentList = assignments.computeIfAbsent(variable, ignored -> new ArrayList<>(1)); | ||
54 | assignmentList.add(assignmentExpr); | ||
55 | } | ||
56 | iterator.prune(); | ||
57 | } | ||
58 | } | ||
59 | |||
60 | private void checkTypes(Problem problem) { | ||
61 | for (var statement : problem.getStatements()) { | ||
62 | switch (statement) { | ||
63 | case PredicateDefinition predicateDefinition -> checkTypes(predicateDefinition); | ||
64 | case Assertion assertion -> checkTypes(assertion); | ||
65 | default -> { | ||
66 | // Nothing to type check. | ||
67 | } | ||
68 | } | ||
69 | } | ||
70 | } | ||
71 | |||
72 | private void checkTypes(PredicateDefinition predicateDefinition) { | ||
73 | for (var conjunction : predicateDefinition.getBodies()) { | ||
74 | for (var literal : conjunction.getLiterals()) { | ||
75 | coerceIntoLiteral(literal); | ||
76 | } | ||
77 | } | ||
78 | } | ||
79 | |||
80 | private void checkTypes(Assertion assertion) { | ||
81 | var relation = assertion.getRelation(); | ||
82 | var value = assertion.getValue(); | ||
83 | if (relation == null) { | ||
84 | return; | ||
85 | } | ||
86 | var type = signatureProvider.getSignature(relation).resultType(); | ||
87 | if (type == ExprType.LITERAL) { | ||
88 | if (value == null) { | ||
89 | return; | ||
90 | } | ||
91 | expectType(value, BuiltinTermInterpreter.BOOLEAN_TYPE); | ||
92 | return; | ||
93 | } | ||
94 | if (value == null) { | ||
95 | var message = "Assertion value of type %s is required.".formatted(type); | ||
96 | error(message, assertion, ProblemPackage.Literals.ASSERTION__RELATION, 0, ProblemValidator.TYPE_ERROR); | ||
97 | } | ||
98 | expectType(value, type); | ||
99 | } | ||
100 | |||
101 | public List<FeatureBasedDiagnostic> getDiagnostics() { | ||
102 | return diagnostics; | ||
103 | } | ||
104 | |||
105 | public FixedType getVariableType(Variable variable) { | ||
106 | // We can't use computeIfAbsent here, because translating referenced queries calls this method in a reentrant | ||
107 | // way, which would cause a ConcurrentModificationException with computeIfAbsent. | ||
108 | @SuppressWarnings("squid:S3824") | ||
109 | var type = variableTypes.get(variable); | ||
110 | //noinspection Java8MapApi | ||
111 | if (type == null) { | ||
112 | type = computeVariableType(variable); | ||
113 | variableTypes.put(variable, type); | ||
114 | } | ||
115 | return type; | ||
116 | } | ||
117 | |||
118 | private FixedType computeVariableType(Variable variable) { | ||
119 | if (variable instanceof Parameter) { | ||
120 | return computeUnassignedVariableType(variable); | ||
121 | } | ||
122 | var assignmnentList = assignments.get(variable); | ||
123 | if (assignmnentList == null || assignmnentList.isEmpty()) { | ||
124 | return computeUnassignedVariableType(variable); | ||
125 | } | ||
126 | if (variablesToProcess.contains(variable)) { | ||
127 | throw new IllegalStateException("Circular reference to variable: " + variable.getName()); | ||
128 | } | ||
129 | if (assignmnentList.size() > 1) { | ||
130 | var message = "Multiple assignments for variable '%s'.".formatted(variable.getName()); | ||
131 | for (var assignment : assignmnentList) { | ||
132 | error(message, assignment, ProblemPackage.Literals.BINARY_EXPR__LEFT, 0, | ||
133 | ProblemValidator.INVALID_ASSIGNMENT_ISSUE); | ||
134 | } | ||
135 | return ExprType.INVALID; | ||
136 | } | ||
137 | var assignment = assignmnentList.getFirst(); | ||
138 | variablesToProcess.add(variable); | ||
139 | try { | ||
140 | var assignedType = getExpressionType(assignment.getRight()); | ||
141 | if (assignedType instanceof MutableType) { | ||
142 | var message = "Cannot determine type of variable '%s'.".formatted(variable.getName()); | ||
143 | error(message, assignment, ProblemPackage.Literals.BINARY_EXPR__RIGHT, 0, ProblemValidator.TYPE_ERROR); | ||
144 | return ExprType.INVALID; | ||
145 | } | ||
146 | if (assignedType instanceof DataExprType dataExprType) { | ||
147 | return dataExprType; | ||
148 | } | ||
149 | if (assignedType != ExprType.INVALID) { | ||
150 | var message = "Expected data expression for variable '%s', got %s instead." | ||
151 | .formatted(variable.getName(), assignedType); | ||
152 | error(message, assignment, ProblemPackage.Literals.BINARY_EXPR__RIGHT, 0, ProblemValidator.TYPE_ERROR); | ||
153 | } | ||
154 | return ExprType.INVALID; | ||
155 | } finally { | ||
156 | variablesToProcess.remove(variable); | ||
157 | } | ||
158 | } | ||
159 | |||
160 | private FixedType computeUnassignedVariableType(Variable variable) { | ||
161 | if (variable instanceof Parameter parameter && | ||
162 | parameter.getParameterType() instanceof DatatypeDeclaration datatypeDeclaration) { | ||
163 | return signatureProvider.getDataType(datatypeDeclaration); | ||
164 | } | ||
165 | // Parameters without an explicit datatype annotation are node variables. | ||
166 | return ExprType.NODE; | ||
167 | } | ||
168 | |||
169 | public ExprType getExpressionType(Expr expr) { | ||
170 | // We can't use computeIfAbsent here, because translating referenced queries calls this method in a reentrant | ||
171 | // way, which would cause a ConcurrentModificationException with computeIfAbsent. | ||
172 | @SuppressWarnings("squid:S3824") | ||
173 | var type = expressionTypes.get(expr); | ||
174 | //noinspection Java8MapApi | ||
175 | if (type == null) { | ||
176 | type = computeExpressionType(expr); | ||
177 | expressionTypes.put(expr, type); | ||
178 | } | ||
179 | return type.unwrapIfSet(); | ||
180 | } | ||
181 | |||
182 | private ExprType computeExpressionType(Expr expr) { | ||
183 | return switch (expr) { | ||
184 | case LogicConstant logicConstant -> computeExpressionType(logicConstant); | ||
185 | case IntConstant ignored -> BuiltinTermInterpreter.INT_TYPE; | ||
186 | case RealConstant ignored -> BuiltinTermInterpreter.REAL_TYPE; | ||
187 | case StringConstant ignored -> BuiltinTermInterpreter.STRING_TYPE; | ||
188 | case InfiniteConstant ignored -> new MutableType(); | ||
189 | case VariableOrNodeExpr variableOrNodeExpr -> computeExpressionType(variableOrNodeExpr); | ||
190 | case AssignmentExpr assignmentExpr -> computeExpressionType(assignmentExpr); | ||
191 | case Atom atom -> computeExpressionType(atom); | ||
192 | case NegationExpr negationExpr -> computeExpressionType(negationExpr); | ||
193 | case ArithmeticUnaryExpr arithmeticUnaryExpr -> computeExpressionType(arithmeticUnaryExpr); | ||
194 | case CountExpr countExpr -> computeExpressionType(countExpr); | ||
195 | case AggregationExpr aggregationExpr -> computeExpressionType(aggregationExpr); | ||
196 | case ComparisonExpr comparisonExpr -> computeExpressionType(comparisonExpr); | ||
197 | case LatticeBinaryExpr latticeBinaryExpr -> computeExpressionType(latticeBinaryExpr); | ||
198 | case RangeExpr rangeExpr -> computeExpressionType(rangeExpr); | ||
199 | case ArithmeticBinaryExpr arithmeticBinaryExpr -> computeExpressionType(arithmeticBinaryExpr); | ||
200 | case CastExpr castExpr -> computeExpressionType(castExpr); | ||
201 | default -> { | ||
202 | error("Unknown expression: " + expr.getClass().getSimpleName(), expr, null, 0, | ||
203 | ProblemValidator.UNKNOWN_EXPRESSION_ISSUE); | ||
204 | yield ExprType.INVALID; | ||
205 | } | ||
206 | }; | ||
207 | } | ||
208 | |||
209 | private ExprType computeExpressionType(LogicConstant expr) { | ||
210 | return switch (expr.getLogicValue()) { | ||
211 | case TRUE, FALSE -> BuiltinTermInterpreter.BOOLEAN_TYPE; | ||
212 | case UNKNOWN, ERROR -> new MutableType(); | ||
213 | case null -> ExprType.INVALID; | ||
214 | }; | ||
215 | } | ||
216 | |||
217 | private ExprType computeExpressionType(VariableOrNodeExpr expr) { | ||
218 | var target = expr.getVariableOrNode(); | ||
219 | if (target == null || target.eIsProxy()) { | ||
220 | return ExprType.INVALID; | ||
221 | } | ||
222 | return switch (target) { | ||
223 | case Node ignored -> ExprType.NODE; | ||
224 | case Variable variable -> { | ||
225 | if (variablesToProcess.contains(variable)) { | ||
226 | var message = "Circular reference to variable '%s'.".formatted(variable.getName()); | ||
227 | error(message, expr, ProblemPackage.Literals.VARIABLE_OR_NODE_EXPR__VARIABLE_OR_NODE, 0, | ||
228 | ProblemValidator.INVALID_ASSIGNMENT_ISSUE); | ||
229 | yield ExprType.INVALID; | ||
230 | } | ||
231 | yield getVariableType(variable); | ||
232 | } | ||
233 | default -> { | ||
234 | error("Unknown variable: " + target.getName(), expr, | ||
235 | ProblemPackage.Literals.VARIABLE_OR_NODE_EXPR__VARIABLE_OR_NODE, 0, | ||
236 | ProblemValidator.UNKNOWN_EXPRESSION_ISSUE); | ||
237 | yield ExprType.INVALID; | ||
238 | } | ||
239 | }; | ||
240 | } | ||
241 | |||
242 | private ExprType computeExpressionType(AssignmentExpr expr) { | ||
243 | // Force the left side to type check. Since the left side is a variable, it will force the right side to also | ||
244 | // type check in order to infer the variable type. | ||
245 | return getExpressionType(expr.getLeft()) == ExprType.INVALID ? ExprType.INVALID : ExprType.LITERAL; | ||
246 | } | ||
247 | |||
248 | private ExprType computeExpressionType(Atom atom) { | ||
249 | var relation = atom.getRelation(); | ||
250 | if (relation == null || relation.eIsProxy()) { | ||
251 | return ExprType.INVALID; | ||
252 | } | ||
253 | if (relation instanceof DatatypeDeclaration) { | ||
254 | var message = "Invalid call to data type. Use 'as %s' for casting.".formatted( | ||
255 | relation.getName()); | ||
256 | error(message, atom, ProblemPackage.Literals.ATOM__RELATION, 0, ProblemValidator.TYPE_ERROR); | ||
257 | } | ||
258 | var signature = signatureProvider.getSignature(relation); | ||
259 | var parameterTypes = signature.parameterTypes(); | ||
260 | var arguments = atom.getArguments(); | ||
261 | int size = Math.min(parameterTypes.size(), arguments.size()); | ||
262 | boolean ok = parameterTypes.size() == arguments.size(); | ||
263 | for (int i = 0; i < size; i++) { | ||
264 | var parameterType = parameterTypes.get(i); | ||
265 | var argument = arguments.get(i); | ||
266 | if (!expectType(argument, parameterType)) { | ||
267 | // Avoid short-circuiting to let us type check all arguments. | ||
268 | ok = false; | ||
269 | } | ||
270 | } | ||
271 | return ok ? signature.resultType() : ExprType.INVALID; | ||
272 | } | ||
273 | |||
274 | private ExprType computeExpressionType(NegationExpr negationExpr) { | ||
275 | var body = negationExpr.getBody(); | ||
276 | if (body == null) { | ||
277 | return ExprType.INVALID; | ||
278 | } | ||
279 | var actualType = getExpressionType(body); | ||
280 | if (actualType == ExprType.LITERAL) { | ||
281 | // Negation of literals yields another (non-enumerable) literal. | ||
282 | return ExprType.LITERAL; | ||
283 | } | ||
284 | if (actualType == DataExprType.INVALID) { | ||
285 | return ExprType.INVALID; | ||
286 | } | ||
287 | if (actualType instanceof MutableType) { | ||
288 | error(OPERAND_TYPE_ERROR_MESSAGE, body, null, 0, ProblemValidator.TYPE_ERROR); | ||
289 | return ExprType.INVALID; | ||
290 | } | ||
291 | if (actualType instanceof DataExprType dataExprType) { | ||
292 | var result = interpreter.getNegationType(dataExprType); | ||
293 | if (result.isPresent()) { | ||
294 | return result.get(); | ||
295 | } | ||
296 | } | ||
297 | var message = "Data type %s does not support negation.".formatted(actualType); | ||
298 | error(message, negationExpr, null, 0, ProblemValidator.TYPE_ERROR); | ||
299 | return ExprType.INVALID; | ||
300 | } | ||
301 | |||
302 | private ExprType computeExpressionType(ArithmeticUnaryExpr expr) { | ||
303 | var op = expr.getOp(); | ||
304 | var body = expr.getBody(); | ||
305 | if (op == null || body == null) { | ||
306 | return ExprType.INVALID; | ||
307 | } | ||
308 | var actualType = getExpressionType(body); | ||
309 | if (actualType == DataExprType.INVALID) { | ||
310 | return ExprType.INVALID; | ||
311 | } | ||
312 | if (actualType instanceof MutableType) { | ||
313 | error(OPERAND_TYPE_ERROR_MESSAGE, body, null, 0, ProblemValidator.TYPE_ERROR); | ||
314 | return ExprType.INVALID; | ||
315 | } | ||
316 | if (actualType instanceof DataExprType dataExprType) { | ||
317 | var result = interpreter.getUnaryOperationType(op, dataExprType); | ||
318 | if (result.isPresent()) { | ||
319 | return result.get(); | ||
320 | } | ||
321 | } | ||
322 | var message = "Unsupported operator for data type %s.".formatted(actualType); | ||
323 | error(message, expr, null, 0, ProblemValidator.TYPE_ERROR); | ||
324 | return ExprType.INVALID; | ||
325 | } | ||
326 | |||
327 | private ExprType computeExpressionType(CountExpr countExpr) { | ||
328 | return coerceIntoLiteral(countExpr.getBody()) ? BuiltinTermInterpreter.INT_TYPE : ExprType.INVALID; | ||
329 | } | ||
330 | |||
331 | private ExprType computeExpressionType(AggregationExpr expr) { | ||
332 | var aggregator = expr.getAggregator(); | ||
333 | if (aggregator == null || aggregator.eIsProxy()) { | ||
334 | return null; | ||
335 | } | ||
336 | // Avoid short-circuiting to let us type check both the value and the condition. | ||
337 | boolean ok = coerceIntoLiteral(expr.getCondition()); | ||
338 | var value = expr.getValue(); | ||
339 | var actualType = getExpressionType(value); | ||
340 | if (actualType == ExprType.INVALID) { | ||
341 | return ExprType.INVALID; | ||
342 | } | ||
343 | if (actualType instanceof MutableType) { | ||
344 | error(OPERAND_TYPE_ERROR_MESSAGE, value, null, 0, ProblemValidator.TYPE_ERROR); | ||
345 | return ExprType.INVALID; | ||
346 | } | ||
347 | if (actualType instanceof DataExprType dataExprType) { | ||
348 | var aggregatorName = signatureProvider.getAggregatorName(aggregator); | ||
349 | var result = interpreter.getAggregationType(aggregatorName, dataExprType); | ||
350 | if (result.isPresent()) { | ||
351 | return ok ? result.get() : ExprType.INVALID; | ||
352 | } | ||
353 | } | ||
354 | var message = "Unsupported aggregator for type %s.".formatted(actualType); | ||
355 | error(message, expr, ProblemPackage.Literals.AGGREGATION_EXPR__AGGREGATOR, 0, ProblemValidator.TYPE_ERROR); | ||
356 | return ExprType.INVALID; | ||
357 | } | ||
358 | |||
359 | private ExprType computeExpressionType(ComparisonExpr expr) { | ||
360 | var left = expr.getLeft(); | ||
361 | var right = expr.getRight(); | ||
362 | var op = expr.getOp(); | ||
363 | if (op == ComparisonOp.NODE_EQ || op == ComparisonOp.NODE_NOT_EQ) { | ||
364 | // Avoid short-circuiting to let us type check both arguments. | ||
365 | boolean leftOk = expectType(left, ExprType.NODE); | ||
366 | boolean rightOk = expectType(right, ExprType.NODE); | ||
367 | return leftOk && rightOk ? ExprType.LITERAL : ExprType.INVALID; | ||
368 | } | ||
369 | if (!(getCommonDataType(expr) instanceof DataExprType commonType)) { | ||
370 | return ExprType.INVALID; | ||
371 | } | ||
372 | // Data equality and inequality are always supported for data types. | ||
373 | if (op != ComparisonOp.EQ && op != ComparisonOp.NOT_EQ && !interpreter.isComparisonSupported(commonType)) { | ||
374 | var message = "Data type %s does not support comparison.".formatted(commonType); | ||
375 | error(message, expr, null, 0, ProblemValidator.TYPE_ERROR); | ||
376 | return ExprType.INVALID; | ||
377 | } | ||
378 | return BuiltinTermInterpreter.BOOLEAN_TYPE; | ||
379 | } | ||
380 | |||
381 | private ExprType computeExpressionType(LatticeBinaryExpr expr) { | ||
382 | // Lattice operations are always supported for data types. | ||
383 | return getCommonDataType(expr); | ||
384 | } | ||
385 | |||
386 | private ExprType computeExpressionType(RangeExpr expr) { | ||
387 | var left = expr.getLeft(); | ||
388 | var right = expr.getRight(); | ||
389 | if (left instanceof InfiniteConstant && right instanceof InfiniteConstant) { | ||
390 | // `*..*` is equivalent to `unknown` if neither subexpression have been typed yet. | ||
391 | var mutableType = new MutableType(); | ||
392 | if (expressionTypes.putIfAbsent(left, mutableType) == null && | ||
393 | expressionTypes.put(right, mutableType) == null) { | ||
394 | return mutableType; | ||
395 | } | ||
396 | } | ||
397 | if (!(getCommonDataType(expr) instanceof DataExprType commonType)) { | ||
398 | return ExprType.INVALID; | ||
399 | } | ||
400 | if (!interpreter.isRangeSupported(commonType)) { | ||
401 | var message = "Data type %s does not support ranges.".formatted(commonType); | ||
402 | error(message, expr, null, 0, ProblemValidator.TYPE_ERROR); | ||
403 | return ExprType.INVALID; | ||
404 | } | ||
405 | return commonType; | ||
406 | } | ||
407 | |||
408 | private ExprType computeExpressionType(ArithmeticBinaryExpr expr) { | ||
409 | var op = expr.getOp(); | ||
410 | var left = expr.getLeft(); | ||
411 | var right = expr.getRight(); | ||
412 | if (op == null || left == null || right == null) { | ||
413 | return ExprType.INVALID; | ||
414 | } | ||
415 | // Avoid short-circuiting to let us type check both arguments. | ||
416 | var leftType = getExpressionType(left); | ||
417 | var rightType = getExpressionType(right); | ||
418 | if (leftType == ExprType.INVALID || rightType == ExprType.INVALID) { | ||
419 | return ExprType.INVALID; | ||
420 | } | ||
421 | if (rightType instanceof MutableType rightMutableType) { | ||
422 | if (leftType instanceof DataExprType leftExprType) { | ||
423 | rightMutableType.setActualType(leftExprType); | ||
424 | rightType = leftExprType; | ||
425 | } else { | ||
426 | error(OPERAND_TYPE_ERROR_MESSAGE, right, null, 0, ProblemValidator.TYPE_ERROR); | ||
427 | return ExprType.INVALID; | ||
428 | } | ||
429 | } | ||
430 | if (leftType instanceof MutableType leftMutableType) { | ||
431 | if (rightType instanceof DataExprType rightExprType) { | ||
432 | leftMutableType.setActualType(rightExprType); | ||
433 | leftType = rightExprType; | ||
434 | } else { | ||
435 | error(OPERAND_TYPE_ERROR_MESSAGE, left, null, 0, ProblemValidator.TYPE_ERROR); | ||
436 | return ExprType.INVALID; | ||
437 | } | ||
438 | } | ||
439 | if (leftType instanceof DataExprType leftExprType && rightType instanceof DataExprType rightExprType) { | ||
440 | var result = interpreter.getBinaryOperationType(op, leftExprType, rightExprType); | ||
441 | if (result.isPresent()) { | ||
442 | return result.get(); | ||
443 | } | ||
444 | } | ||
445 | var messageBuilder = new StringBuilder("Unsupported operator for "); | ||
446 | if (leftType.equals(rightType)) { | ||
447 | messageBuilder.append("data type ").append(leftType); | ||
448 | } else { | ||
449 | messageBuilder.append("data types ").append(leftType).append(" and ").append(rightType); | ||
450 | } | ||
451 | messageBuilder.append("."); | ||
452 | error(messageBuilder.toString(), expr, null, 0, ProblemValidator.TYPE_ERROR); | ||
453 | return ExprType.INVALID; | ||
454 | } | ||
455 | |||
456 | private ExprType computeExpressionType(CastExpr expr) { | ||
457 | var body = expr.getBody(); | ||
458 | var targetRelation = expr.getTargetType(); | ||
459 | if (body == null || !(targetRelation instanceof DatatypeDeclaration targetDeclaration)) { | ||
460 | return null; | ||
461 | } | ||
462 | var actualType = getExpressionType(body); | ||
463 | if (actualType == ExprType.INVALID) { | ||
464 | return ExprType.INVALID; | ||
465 | } | ||
466 | var targetType = signatureProvider.getDataType(targetDeclaration); | ||
467 | if (actualType instanceof MutableType mutableType) { | ||
468 | // Type ascription for polymorphic literal (e.g., `unknown as int` for the set of all integers). | ||
469 | mutableType.setActualType(targetType); | ||
470 | return targetType; | ||
471 | } | ||
472 | if (actualType.equals(targetType)) { | ||
473 | return targetType; | ||
474 | } | ||
475 | if (actualType instanceof DataExprType dataExprType && interpreter.isCastSupported(dataExprType, targetType)) { | ||
476 | return targetType; | ||
477 | } | ||
478 | var message = "Casting from %s to %s is not supported.".formatted(actualType, targetType); | ||
479 | error(message, expr, null, 0, ProblemValidator.TYPE_ERROR); | ||
480 | return ExprType.INVALID; | ||
481 | } | ||
482 | |||
483 | private FixedType getCommonDataType(BinaryExpr expr) { | ||
484 | var commonType = getCommonType(expr); | ||
485 | if (!(commonType instanceof DataExprType) && commonType != ExprType.INVALID) { | ||
486 | var message = "Expected data expression, got %s instead.".formatted(commonType); | ||
487 | error(message, expr, null, 0, ProblemValidator.TYPE_ERROR); | ||
488 | return ExprType.INVALID; | ||
489 | } | ||
490 | return commonType; | ||
491 | } | ||
492 | |||
493 | private FixedType getCommonType(BinaryExpr expr) { | ||
494 | var left = expr.getLeft(); | ||
495 | var right = expr.getRight(); | ||
496 | if (left == null || right == null) { | ||
497 | return ExprType.INVALID; | ||
498 | } | ||
499 | var leftType = getExpressionType(left); | ||
500 | if (leftType instanceof FixedType fixedLeftType) { | ||
501 | return expectType(right, fixedLeftType) ? fixedLeftType : ExprType.INVALID; | ||
502 | } else { | ||
503 | var rightType = getExpressionType(right); | ||
504 | if (rightType instanceof FixedType fixedRightType) { | ||
505 | return expectType(left, leftType, fixedRightType) ? fixedRightType : ExprType.INVALID; | ||
506 | } else { | ||
507 | error(OPERAND_TYPE_ERROR_MESSAGE, left, null, 0, ProblemValidator.TYPE_ERROR); | ||
508 | error(OPERAND_TYPE_ERROR_MESSAGE, right, null, 0, ProblemValidator.TYPE_ERROR); | ||
509 | return ExprType.INVALID; | ||
510 | } | ||
511 | } | ||
512 | } | ||
513 | |||
514 | private boolean coerceIntoLiteral(Expr expr) { | ||
515 | if (expr == null) { | ||
516 | return false; | ||
517 | } | ||
518 | var actualType = getExpressionType(expr); | ||
519 | if (actualType == ExprType.LITERAL) { | ||
520 | return true; | ||
521 | } | ||
522 | return expectType(expr, actualType, BuiltinTermInterpreter.BOOLEAN_TYPE); | ||
523 | } | ||
524 | |||
525 | private boolean expectType(Expr expr, FixedType expectedType) { | ||
526 | if (expr == null) { | ||
527 | return false; | ||
528 | } | ||
529 | var actualType = getExpressionType(expr); | ||
530 | return expectType(expr, actualType, expectedType); | ||
531 | } | ||
532 | |||
533 | private boolean expectType(Expr expr, ExprType actualType, FixedType expectedType) { | ||
534 | if (expectedType == ExprType.INVALID) { | ||
535 | // Silence any further errors is the expected type failed to compute. | ||
536 | return false; | ||
537 | } | ||
538 | if (actualType.equals(expectedType)) { | ||
539 | return true; | ||
540 | } | ||
541 | if (actualType == ExprType.INVALID) { | ||
542 | // We have already emitted an error previously. | ||
543 | return false; | ||
544 | } | ||
545 | if (actualType instanceof MutableType mutableType && expectedType instanceof DataExprType dataExprType) { | ||
546 | mutableType.setActualType(dataExprType); | ||
547 | return true; | ||
548 | } | ||
549 | var builder = new StringBuilder() | ||
550 | .append("Expected ") | ||
551 | .append(expectedType) | ||
552 | .append(" expression"); | ||
553 | if (!(actualType instanceof MutableType)) { | ||
554 | builder.append(", got ") | ||
555 | .append(actualType) | ||
556 | .append(" instead"); | ||
557 | } | ||
558 | builder.append("."); | ||
559 | error(builder.toString(), expr, null, 0, ProblemValidator.TYPE_ERROR); | ||
560 | return false; | ||
561 | } | ||
562 | |||
563 | private void error(String message, EObject object, EStructuralFeature feature, int index, String code, | ||
564 | String... issueData) { | ||
565 | diagnostics.add(new FeatureBasedDiagnostic(Diagnostic.ERROR, message, object, feature, index, | ||
566 | CheckType.NORMAL, code, issueData)); | ||
567 | } | ||
568 | } | ||
diff --git a/subprojects/language/src/main/java/tools/refinery/language/utils/BuiltinSymbols.java b/subprojects/language/src/main/java/tools/refinery/language/utils/BuiltinSymbols.java index c87fa044..72f23e85 100644 --- a/subprojects/language/src/main/java/tools/refinery/language/utils/BuiltinSymbols.java +++ b/subprojects/language/src/main/java/tools/refinery/language/utils/BuiltinSymbols.java | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2021-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
@@ -7,7 +7,56 @@ package tools.refinery.language.utils; | |||
7 | 7 | ||
8 | import tools.refinery.language.model.problem.*; | 8 | import tools.refinery.language.model.problem.*; |
9 | 9 | ||
10 | public record BuiltinSymbols(Problem problem, ClassDeclaration node, PredicateDefinition equals, | 10 | public final class BuiltinSymbols { |
11 | PredicateDefinition exists, ClassDeclaration contained, PredicateDefinition contains, | 11 | private final Problem problem; |
12 | PredicateDefinition invalidContainer) { | 12 | private final ClassDeclaration node; |
13 | private final PredicateDefinition equals; | ||
14 | private final PredicateDefinition exists; | ||
15 | private final ClassDeclaration contained; | ||
16 | private final PredicateDefinition contains; | ||
17 | private final PredicateDefinition invalidContainer; | ||
18 | |||
19 | public BuiltinSymbols(Problem problem) { | ||
20 | this.problem = problem; | ||
21 | node = getDeclaration(ClassDeclaration.class, "node"); | ||
22 | equals = getDeclaration(PredicateDefinition.class, "equals"); | ||
23 | exists = getDeclaration(PredicateDefinition.class, "exists"); | ||
24 | contained = getDeclaration(ClassDeclaration.class, "contained"); | ||
25 | contains = getDeclaration(PredicateDefinition.class, "contains"); | ||
26 | invalidContainer = getDeclaration(PredicateDefinition.class, "invalidContainer"); | ||
27 | } | ||
28 | |||
29 | public Problem problem() { | ||
30 | return problem; | ||
31 | } | ||
32 | |||
33 | public ClassDeclaration node() { | ||
34 | return node; | ||
35 | } | ||
36 | |||
37 | public PredicateDefinition equals() { | ||
38 | return equals; | ||
39 | } | ||
40 | |||
41 | public PredicateDefinition exists() { | ||
42 | return exists; | ||
43 | } | ||
44 | |||
45 | public ClassDeclaration contained() { | ||
46 | return contained; | ||
47 | } | ||
48 | |||
49 | public PredicateDefinition contains() { | ||
50 | return contains; | ||
51 | } | ||
52 | |||
53 | public PredicateDefinition invalidContainer() { | ||
54 | return invalidContainer; | ||
55 | } | ||
56 | |||
57 | private <T extends Statement & NamedElement> T getDeclaration(Class<T> type, String name) { | ||
58 | return problem.getStatements().stream().filter(type::isInstance).map(type::cast) | ||
59 | .filter(declaration -> name.equals(declaration.getName())).findFirst() | ||
60 | .orElseThrow(() -> new IllegalArgumentException("Built-in declaration " + name + " was not found")); | ||
61 | } | ||
13 | } | 62 | } |
diff --git a/subprojects/language/src/main/java/tools/refinery/language/utils/ProblemDesugarer.java b/subprojects/language/src/main/java/tools/refinery/language/utils/ProblemDesugarer.java deleted file mode 100644 index d45c8083..00000000 --- a/subprojects/language/src/main/java/tools/refinery/language/utils/ProblemDesugarer.java +++ /dev/null | |||
@@ -1,98 +0,0 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2021-2024 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.language.utils; | ||
7 | |||
8 | import com.google.inject.Inject; | ||
9 | import com.google.inject.Singleton; | ||
10 | import org.eclipse.emf.ecore.EObject; | ||
11 | import org.eclipse.emf.ecore.resource.Resource; | ||
12 | import org.eclipse.xtext.util.IResourceScopeCache; | ||
13 | import org.eclipse.xtext.util.Tuples; | ||
14 | import tools.refinery.language.library.BuiltinLibrary; | ||
15 | import tools.refinery.language.model.problem.*; | ||
16 | |||
17 | import java.util.*; | ||
18 | |||
19 | @Singleton | ||
20 | public class ProblemDesugarer { | ||
21 | @Inject | ||
22 | private IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE; | ||
23 | |||
24 | public Optional<Problem> getBuiltinProblem(EObject context) { | ||
25 | return Optional.ofNullable(context).map(EObject::eResource).flatMap(resource -> | ||
26 | cache.get("builtinProblem", resource, () -> doGetBuiltinProblem(resource))); | ||
27 | } | ||
28 | |||
29 | private Optional<Problem> doGetBuiltinProblem(Resource resource) { | ||
30 | return Optional.ofNullable(resource).map(Resource::getResourceSet) | ||
31 | .map(resourceSet -> resourceSet.getResource(BuiltinLibrary.BUILTIN_LIBRARY_URI, true)) | ||
32 | .map(Resource::getContents).filter(contents -> !contents.isEmpty()).map(List::getFirst) | ||
33 | .filter(Problem.class::isInstance).map(Problem.class::cast); | ||
34 | } | ||
35 | |||
36 | public Optional<BuiltinSymbols> getBuiltinSymbols(EObject context) { | ||
37 | return getBuiltinProblem(context).map(builtin -> | ||
38 | cache.get("builtinSymbols", builtin.eResource(), () -> doGetBuiltinSymbols(builtin))); | ||
39 | } | ||
40 | |||
41 | private BuiltinSymbols doGetBuiltinSymbols(Problem builtin) { | ||
42 | var node = doGetDeclaration(builtin, ClassDeclaration.class, "node"); | ||
43 | var equals = doGetDeclaration(builtin, PredicateDefinition.class, "equals"); | ||
44 | var exists = doGetDeclaration(builtin, PredicateDefinition.class, "exists"); | ||
45 | var contained = doGetDeclaration(builtin, ClassDeclaration.class, "contained"); | ||
46 | var contains = doGetDeclaration(builtin, PredicateDefinition.class, "contains"); | ||
47 | var invalidContainer = doGetDeclaration(builtin, PredicateDefinition.class, "invalidContainer"); | ||
48 | return new BuiltinSymbols(builtin, node, equals, exists, contained, contains, invalidContainer); | ||
49 | } | ||
50 | |||
51 | private <T extends Statement & NamedElement> T doGetDeclaration(Problem builtin, Class<T> type, String name) { | ||
52 | return builtin.getStatements().stream().filter(type::isInstance).map(type::cast) | ||
53 | .filter(declaration -> name.equals(declaration.getName())).findFirst() | ||
54 | .orElseThrow(() -> new IllegalArgumentException("Built-in declaration " + name + " was not found")); | ||
55 | } | ||
56 | |||
57 | public Collection<ClassDeclaration> getSuperclassesAndSelf(ClassDeclaration classDeclaration) { | ||
58 | return cache.get(Tuples.create(classDeclaration, "superclassesAndSelf"), classDeclaration.eResource(), | ||
59 | () -> doGetSuperclassesAndSelf(classDeclaration)); | ||
60 | } | ||
61 | |||
62 | private Collection<ClassDeclaration> doGetSuperclassesAndSelf(ClassDeclaration classDeclaration) { | ||
63 | var builtinSymbols = getBuiltinSymbols(classDeclaration); | ||
64 | Set<ClassDeclaration> found = new HashSet<>(); | ||
65 | builtinSymbols.ifPresent(symbols -> found.add(symbols.node())); | ||
66 | Deque<ClassDeclaration> queue = new ArrayDeque<>(); | ||
67 | queue.addLast(classDeclaration); | ||
68 | while (!queue.isEmpty()) { | ||
69 | ClassDeclaration current = queue.removeFirst(); | ||
70 | if (!found.contains(current)) { | ||
71 | found.add(current); | ||
72 | for (Relation superType : current.getSuperTypes()) { | ||
73 | if (superType instanceof ClassDeclaration superDeclaration) { | ||
74 | queue.addLast(superDeclaration); | ||
75 | } | ||
76 | } | ||
77 | } | ||
78 | } | ||
79 | return found; | ||
80 | } | ||
81 | |||
82 | public Collection<ReferenceDeclaration> getAllReferenceDeclarations(ClassDeclaration classDeclaration) { | ||
83 | return cache.get(Tuples.create(classDeclaration, "allReferenceDeclarations"), classDeclaration.eResource(), | ||
84 | () -> doGetAllReferenceDeclarations(classDeclaration)); | ||
85 | } | ||
86 | |||
87 | private Collection<ReferenceDeclaration> doGetAllReferenceDeclarations(ClassDeclaration classDeclaration) { | ||
88 | Set<ReferenceDeclaration> referenceDeclarations = new HashSet<>(); | ||
89 | for (ClassDeclaration superclass : getSuperclassesAndSelf(classDeclaration)) { | ||
90 | referenceDeclarations.addAll(superclass.getFeatureDeclarations()); | ||
91 | } | ||
92 | return referenceDeclarations; | ||
93 | } | ||
94 | |||
95 | public boolean isContainmentReference(ReferenceDeclaration referenceDeclaration) { | ||
96 | return referenceDeclaration.getKind() == ReferenceKind.CONTAINMENT; | ||
97 | } | ||
98 | } | ||
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 6d6d65da..9daa8f61 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 | |||
@@ -98,18 +98,19 @@ public final class ProblemUtil { | |||
98 | return true; | 98 | return true; |
99 | } | 99 | } |
100 | 100 | ||
101 | public static int getArity(Relation relation) { | 101 | public static boolean isTypeLike(Relation relation) { |
102 | if (relation instanceof ClassDeclaration || relation instanceof EnumDeclaration || | 102 | if (relation instanceof ClassDeclaration || relation instanceof EnumDeclaration || |
103 | relation instanceof DatatypeDeclaration) { | 103 | relation instanceof DatatypeDeclaration) { |
104 | return 1; | 104 | return true; |
105 | } | ||
106 | if (relation instanceof ReferenceDeclaration) { | ||
107 | return 2; | ||
108 | } | 105 | } |
109 | if (relation instanceof PredicateDefinition predicateDefinition) { | 106 | if (relation instanceof PredicateDefinition predicateDefinition) { |
110 | return predicateDefinition.getParameters().size(); | 107 | return predicateDefinition.getParameters().size() == 1; |
111 | } | 108 | } |
112 | throw new IllegalArgumentException("Unknown Relation: " + relation); | 109 | return false; |
110 | } | ||
111 | |||
112 | public static boolean isContainmentReference(ReferenceDeclaration referenceDeclaration) { | ||
113 | return referenceDeclaration.getKind() == ReferenceKind.CONTAINMENT; | ||
113 | } | 114 | } |
114 | 115 | ||
115 | public static boolean isContainerReference(ReferenceDeclaration referenceDeclaration) { | 116 | public static boolean isContainerReference(ReferenceDeclaration referenceDeclaration) { |
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 7f45bc20..745e2d2b 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 | |||
@@ -10,6 +10,7 @@ | |||
10 | package tools.refinery.language.validation; | 10 | package tools.refinery.language.validation; |
11 | 11 | ||
12 | import com.google.inject.Inject; | 12 | import com.google.inject.Inject; |
13 | import org.eclipse.emf.common.util.Diagnostic; | ||
13 | import org.eclipse.emf.ecore.EObject; | 14 | import org.eclipse.emf.ecore.EObject; |
14 | import org.eclipse.emf.ecore.EReference; | 15 | import org.eclipse.emf.ecore.EReference; |
15 | import org.eclipse.xtext.EcoreUtil2; | 16 | import org.eclipse.xtext.EcoreUtil2; |
@@ -18,11 +19,15 @@ import org.eclipse.xtext.validation.Check; | |||
18 | import org.jetbrains.annotations.Nullable; | 19 | import org.jetbrains.annotations.Nullable; |
19 | import tools.refinery.language.model.problem.*; | 20 | import tools.refinery.language.model.problem.*; |
20 | import tools.refinery.language.naming.NamingUtil; | 21 | import tools.refinery.language.naming.NamingUtil; |
21 | import tools.refinery.language.scoping.imports.ImportAdapter; | 22 | import tools.refinery.language.scoping.imports.ImportAdapterProvider; |
22 | import tools.refinery.language.utils.ProblemDesugarer; | 23 | import tools.refinery.language.typesystem.ProblemTypeAnalyzer; |
24 | import tools.refinery.language.typesystem.SignatureProvider; | ||
23 | import tools.refinery.language.utils.ProblemUtil; | 25 | import tools.refinery.language.utils.ProblemUtil; |
24 | 26 | ||
25 | import java.util.*; | 27 | import java.util.ArrayList; |
28 | import java.util.LinkedHashMap; | ||
29 | import java.util.LinkedHashSet; | ||
30 | import java.util.Set; | ||
26 | 31 | ||
27 | /** | 32 | /** |
28 | * This class contains custom validation rules. | 33 | * This class contains custom validation rules. |
@@ -32,47 +37,39 @@ import java.util.*; | |||
32 | */ | 37 | */ |
33 | public class ProblemValidator extends AbstractProblemValidator { | 38 | public class ProblemValidator extends AbstractProblemValidator { |
34 | private static final String ISSUE_PREFIX = "tools.refinery.language.validation.ProblemValidator."; | 39 | private static final String ISSUE_PREFIX = "tools.refinery.language.validation.ProblemValidator."; |
35 | |||
36 | public static final String UNEXPECTED_MODULE_NAME_ISSUE = ISSUE_PREFIX + "UNEXPECTED_MODULE_NAME"; | 40 | public static final String UNEXPECTED_MODULE_NAME_ISSUE = ISSUE_PREFIX + "UNEXPECTED_MODULE_NAME"; |
37 | |||
38 | public static final String INVALID_IMPORT_ISSUE = ISSUE_PREFIX + "INVALID_IMPORT"; | 41 | public static final String INVALID_IMPORT_ISSUE = ISSUE_PREFIX + "INVALID_IMPORT"; |
39 | |||
40 | public static final String SINGLETON_VARIABLE_ISSUE = ISSUE_PREFIX + "SINGLETON_VARIABLE"; | 42 | public static final String SINGLETON_VARIABLE_ISSUE = ISSUE_PREFIX + "SINGLETON_VARIABLE"; |
41 | |||
42 | public static final String NODE_CONSTANT_ISSUE = ISSUE_PREFIX + "NODE_CONSTANT_ISSUE"; | 43 | public static final String NODE_CONSTANT_ISSUE = ISSUE_PREFIX + "NODE_CONSTANT_ISSUE"; |
43 | |||
44 | public static final String DUPLICATE_NAME_ISSUE = ISSUE_PREFIX + "DUPLICATE_NAME"; | 44 | public static final String DUPLICATE_NAME_ISSUE = ISSUE_PREFIX + "DUPLICATE_NAME"; |
45 | |||
46 | public static final String INVALID_MULTIPLICITY_ISSUE = ISSUE_PREFIX + "INVALID_MULTIPLICITY"; | 45 | public static final String INVALID_MULTIPLICITY_ISSUE = ISSUE_PREFIX + "INVALID_MULTIPLICITY"; |
47 | |||
48 | public static final String ZERO_MULTIPLICITY_ISSUE = ISSUE_PREFIX + "ZERO_MULTIPLICITY"; | 46 | public static final String ZERO_MULTIPLICITY_ISSUE = ISSUE_PREFIX + "ZERO_MULTIPLICITY"; |
49 | |||
50 | public static final String MISSING_OPPOSITE_ISSUE = ISSUE_PREFIX + "MISSING_OPPOSITE"; | 47 | public static final String MISSING_OPPOSITE_ISSUE = ISSUE_PREFIX + "MISSING_OPPOSITE"; |
51 | |||
52 | public static final String INVALID_OPPOSITE_ISSUE = ISSUE_PREFIX + "INVALID_OPPOSITE"; | 48 | public static final String INVALID_OPPOSITE_ISSUE = ISSUE_PREFIX + "INVALID_OPPOSITE"; |
53 | |||
54 | public static final String INVALID_SUPERTYPE_ISSUE = ISSUE_PREFIX + "INVALID_SUPERTYPE"; | 49 | public static final String INVALID_SUPERTYPE_ISSUE = ISSUE_PREFIX + "INVALID_SUPERTYPE"; |
55 | |||
56 | public static final String INVALID_REFERENCE_TYPE_ISSUE = ISSUE_PREFIX + "INVALID_REFERENCE_TYPE"; | 50 | public static final String INVALID_REFERENCE_TYPE_ISSUE = ISSUE_PREFIX + "INVALID_REFERENCE_TYPE"; |
57 | |||
58 | public static final String INVALID_ARITY_ISSUE = ISSUE_PREFIX + "INVALID_ARITY"; | 51 | public static final String INVALID_ARITY_ISSUE = ISSUE_PREFIX + "INVALID_ARITY"; |
59 | |||
60 | public static final String INVALID_TRANSITIVE_CLOSURE_ISSUE = ISSUE_PREFIX + "INVALID_TRANSITIVE_CLOSURE"; | 52 | public static final String INVALID_TRANSITIVE_CLOSURE_ISSUE = ISSUE_PREFIX + "INVALID_TRANSITIVE_CLOSURE"; |
61 | |||
62 | public static final String INVALID_VALUE_ISSUE = ISSUE_PREFIX + "INVALID_VALUE"; | 53 | public static final String INVALID_VALUE_ISSUE = ISSUE_PREFIX + "INVALID_VALUE"; |
63 | |||
64 | public static final String UNSUPPORTED_ASSERTION_ISSUE = ISSUE_PREFIX + "UNSUPPORTED_ASSERTION"; | 54 | public static final String UNSUPPORTED_ASSERTION_ISSUE = ISSUE_PREFIX + "UNSUPPORTED_ASSERTION"; |
65 | 55 | public static final String UNKNOWN_EXPRESSION_ISSUE = ISSUE_PREFIX + "UNKNOWN_EXPRESSION"; | |
66 | public static final String INVALID_ASSIGNMENT_ISSUE = ISSUE_PREFIX + "INVALID_ASSIGNMENT"; | 56 | public static final String INVALID_ASSIGNMENT_ISSUE = ISSUE_PREFIX + "INVALID_ASSIGNMENT"; |
57 | public static final String TYPE_ERROR = ISSUE_PREFIX + "TYPE_ERROR"; | ||
67 | 58 | ||
68 | @Inject | 59 | @Inject |
69 | private ReferenceCounter referenceCounter; | 60 | private ReferenceCounter referenceCounter; |
70 | 61 | ||
71 | @Inject | 62 | @Inject |
72 | private ProblemDesugarer desugarer; | 63 | private IQualifiedNameConverter qualifiedNameConverter; |
73 | 64 | ||
74 | @Inject | 65 | @Inject |
75 | private IQualifiedNameConverter qualifiedNameConverter; | 66 | private ImportAdapterProvider importAdapterProvider; |
67 | |||
68 | @Inject | ||
69 | private SignatureProvider signatureProvider; | ||
70 | |||
71 | @Inject | ||
72 | private ProblemTypeAnalyzer typeAnalyzer; | ||
76 | 73 | ||
77 | @Check | 74 | @Check |
78 | public void checkModuleName(Problem problem) { | 75 | public void checkModuleName(Problem problem) { |
@@ -88,7 +85,7 @@ public class ProblemValidator extends AbstractProblemValidator { | |||
88 | if (resourceSet == null) { | 85 | if (resourceSet == null) { |
89 | return; | 86 | return; |
90 | } | 87 | } |
91 | var adapter = ImportAdapter.getOrInstall(resourceSet); | 88 | var adapter = importAdapterProvider.getOrInstall(resourceSet); |
92 | var expectedName = adapter.getQualifiedName(resource.getURI()); | 89 | var expectedName = adapter.getQualifiedName(resource.getURI()); |
93 | if (expectedName == null) { | 90 | if (expectedName == null) { |
94 | return; | 91 | return; |
@@ -158,15 +155,19 @@ public class ProblemValidator extends AbstractProblemValidator { | |||
158 | public void checkUniqueDeclarations(Problem problem) { | 155 | public void checkUniqueDeclarations(Problem problem) { |
159 | var relations = new ArrayList<Relation>(); | 156 | var relations = new ArrayList<Relation>(); |
160 | var nodes = new ArrayList<Node>(); | 157 | var nodes = new ArrayList<Node>(); |
158 | var aggregators = new ArrayList<AggregatorDeclaration>(); | ||
161 | for (var statement : problem.getStatements()) { | 159 | for (var statement : problem.getStatements()) { |
162 | if (statement instanceof Relation relation) { | 160 | if (statement instanceof Relation relation) { |
163 | relations.add(relation); | 161 | relations.add(relation); |
164 | } else if (statement instanceof NodeDeclaration nodeDeclaration) { | 162 | } else if (statement instanceof NodeDeclaration nodeDeclaration) { |
165 | nodes.addAll(nodeDeclaration.getNodes()); | 163 | nodes.addAll(nodeDeclaration.getNodes()); |
164 | } else if (statement instanceof AggregatorDeclaration aggregatorDeclaration) { | ||
165 | aggregators.add(aggregatorDeclaration); | ||
166 | } | 166 | } |
167 | } | 167 | } |
168 | checkUniqueSimpleNames(relations); | 168 | checkUniqueSimpleNames(relations); |
169 | checkUniqueSimpleNames(nodes); | 169 | checkUniqueSimpleNames(nodes); |
170 | checkUniqueSimpleNames(aggregators); | ||
170 | } | 171 | } |
171 | 172 | ||
172 | @Check | 173 | @Check |
@@ -353,11 +354,14 @@ public class ProblemValidator extends AbstractProblemValidator { | |||
353 | 354 | ||
354 | @Check | 355 | @Check |
355 | public void checkAssertion(Assertion assertion) { | 356 | public void checkAssertion(Assertion assertion) { |
356 | int argumentCount = assertion.getArguments().size(); | 357 | var relation = assertion.getRelation(); |
357 | if (!(assertion.getValue() instanceof LogicConstant)) { | 358 | if (relation instanceof DatatypeDeclaration) { |
358 | var message = "Assertion value must be one of 'true', 'false', 'unknown', or 'error'."; | 359 | var message = "Assertions for data types are not supported."; |
359 | acceptError(message, assertion, ProblemPackage.Literals.ASSERTION__VALUE, 0, INVALID_VALUE_ISSUE); | 360 | acceptError(message, assertion, ProblemPackage.Literals.ASSERTION__RELATION, 0, |
361 | UNSUPPORTED_ASSERTION_ISSUE); | ||
362 | return; | ||
360 | } | 363 | } |
364 | int argumentCount = assertion.getArguments().size(); | ||
361 | checkArity(assertion, ProblemPackage.Literals.ASSERTION__RELATION, argumentCount); | 365 | checkArity(assertion, ProblemPackage.Literals.ASSERTION__RELATION, argumentCount); |
362 | } | 366 | } |
363 | 367 | ||
@@ -376,7 +380,7 @@ public class ProblemValidator extends AbstractProblemValidator { | |||
376 | // Feature does not point to a {@link Relation}, we are probably already emitting another error. | 380 | // Feature does not point to a {@link Relation}, we are probably already emitting another error. |
377 | return; | 381 | return; |
378 | } | 382 | } |
379 | int arity = ProblemUtil.getArity(relation); | 383 | int arity = signatureProvider.getArity(relation); |
380 | if (arity == expectedArity) { | 384 | if (arity == expectedArity) { |
381 | return; | 385 | return; |
382 | } | 386 | } |
@@ -387,11 +391,7 @@ public class ProblemValidator extends AbstractProblemValidator { | |||
387 | 391 | ||
388 | @Check | 392 | @Check |
389 | public void checkMultiObjectAssertion(Assertion assertion) { | 393 | public void checkMultiObjectAssertion(Assertion assertion) { |
390 | var builtinSymbolsOption = desugarer.getBuiltinSymbols(assertion); | 394 | var builtinSymbols = importAdapterProvider.getBuiltinSymbols(assertion); |
391 | if (builtinSymbolsOption.isEmpty()) { | ||
392 | return; | ||
393 | } | ||
394 | var builtinSymbols = builtinSymbolsOption.get(); | ||
395 | var relation = assertion.getRelation(); | 395 | var relation = assertion.getRelation(); |
396 | boolean isExists = builtinSymbols.exists().equals(relation); | 396 | boolean isExists = builtinSymbols.exists().equals(relation); |
397 | boolean isEquals = builtinSymbols.equals().equals(relation); | 397 | boolean isEquals = builtinSymbols.equals().equals(relation); |
@@ -524,5 +524,37 @@ public class ProblemValidator extends AbstractProblemValidator { | |||
524 | acceptError(message, variableOrNodeExpr, ProblemPackage.Literals.VARIABLE_OR_NODE_EXPR__VARIABLE_OR_NODE, | 524 | acceptError(message, variableOrNodeExpr, ProblemPackage.Literals.VARIABLE_OR_NODE_EXPR__VARIABLE_OR_NODE, |
525 | 0, INVALID_ASSIGNMENT_ISSUE); | 525 | 0, INVALID_ASSIGNMENT_ISSUE); |
526 | } | 526 | } |
527 | if (!(assignmentExpr.eContainer() instanceof Conjunction)) { | ||
528 | var message = "Assignments may only appear as top-level expressions."; | ||
529 | acceptError(message, assignmentExpr, null, 0, INVALID_ASSIGNMENT_ISSUE); | ||
530 | } | ||
531 | } | ||
532 | |||
533 | @Check | ||
534 | private void checkInfiniteConstant(InfiniteConstant infiniteConstant) { | ||
535 | if (!(infiniteConstant.eContainer() instanceof RangeExpr)) { | ||
536 | var message = "Negative and positive infinity literals may only appear in '..' range expressions."; | ||
537 | acceptError(message, infiniteConstant, null, 0, TYPE_ERROR); | ||
538 | } | ||
539 | } | ||
540 | |||
541 | @Check | ||
542 | private void checkTypes(Problem problem) { | ||
543 | var diagnostics = typeAnalyzer.getOrComputeTypes(problem).getDiagnostics(); | ||
544 | for (var diagnostic : diagnostics) { | ||
545 | switch (diagnostic.getSeverity()) { | ||
546 | case Diagnostic.INFO -> info(diagnostic.getMessage(), diagnostic.getSourceEObject(), | ||
547 | diagnostic.getFeature(), diagnostic.getIndex(), diagnostic.getIssueCode(), | ||
548 | diagnostic.getIssueData()); | ||
549 | case Diagnostic.WARNING -> warning(diagnostic.getMessage(), diagnostic.getSourceEObject(), | ||
550 | diagnostic.getFeature(), diagnostic.getIndex(), diagnostic.getIssueCode(), | ||
551 | diagnostic.getIssueData()); | ||
552 | case Diagnostic.ERROR -> error(diagnostic.getMessage(), diagnostic.getSourceEObject(), | ||
553 | diagnostic.getFeature(), diagnostic.getIndex(), diagnostic.getIssueCode(), | ||
554 | diagnostic.getIssueData()); | ||
555 | default -> throw new IllegalStateException("Unknown severity %s of %s" | ||
556 | .formatted(diagnostic.getSeverity(), diagnostic)); | ||
557 | } | ||
558 | } | ||
527 | } | 559 | } |
528 | } | 560 | } |
diff --git a/subprojects/language/src/main/resources/META-INF/services/tools.refinery.language.expressions.TermInterpreter b/subprojects/language/src/main/resources/META-INF/services/tools.refinery.language.expressions.TermInterpreter new file mode 100644 index 00000000..11b6ccae --- /dev/null +++ b/subprojects/language/src/main/resources/META-INF/services/tools.refinery.language.expressions.TermInterpreter | |||
@@ -0,0 +1,4 @@ | |||
1 | # SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/> | ||
2 | # | ||
3 | # SPDX-License-Identifier: EPL-2.0 | ||
4 | tools.refinery.language.expressions.BuiltinTermInterpreter | ||
diff --git a/subprojects/language/src/main/resources/tools/refinery/language/library/builtin.refinery b/subprojects/language/src/main/resources/tools/refinery/language/library/builtin.refinery index faca332f..09c7d92b 100644 --- a/subprojects/language/src/main/resources/tools/refinery/language/library/builtin.refinery +++ b/subprojects/language/src/main/resources/tools/refinery/language/library/builtin.refinery | |||
@@ -14,8 +14,16 @@ pred contains(container, contained contained). | |||
14 | 14 | ||
15 | error invalidContainer(contained contained). | 15 | error invalidContainer(contained contained). |
16 | 16 | ||
17 | extern datatype boolean. | ||
18 | |||
17 | extern datatype int. | 19 | extern datatype int. |
18 | 20 | ||
19 | extern datatype real. | 21 | extern datatype real. |
20 | 22 | ||
21 | extern datatype string. | 23 | extern datatype string. |
24 | |||
25 | extern aggregator min. | ||
26 | |||
27 | extern aggregator max. | ||
28 | |||
29 | extern aggregator sum. | ||
diff --git a/subprojects/language/src/test/java/tools/refinery/language/tests/validation/AssertionValidationTest.java b/subprojects/language/src/test/java/tools/refinery/language/tests/validation/AssertionValidationTest.java index 1fb08845..b995d0bb 100644 --- a/subprojects/language/src/test/java/tools/refinery/language/tests/validation/AssertionValidationTest.java +++ b/subprojects/language/src/test/java/tools/refinery/language/tests/validation/AssertionValidationTest.java | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
@@ -35,7 +35,7 @@ class AssertionValidationTest { | |||
35 | """); | 35 | """); |
36 | var issues = problem.validate(); | 36 | var issues = problem.validate(); |
37 | assertThat(issues, hasItem(hasProperty("issueCode", | 37 | assertThat(issues, hasItem(hasProperty("issueCode", |
38 | is(ProblemValidator.INVALID_VALUE_ISSUE)))); | 38 | is(ProblemValidator.TYPE_ERROR)))); |
39 | } | 39 | } |
40 | 40 | ||
41 | @ParameterizedTest | 41 | @ParameterizedTest |
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 58bfce44..b31eed6d 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 | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | 2 | * SPDX-FileCopyrightText: 2021-2024 The Refinery Authors <https://refinery.tools/> |
3 | * | 3 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 4 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 5 | */ |
@@ -7,9 +7,9 @@ package tools.refinery.language.model.tests.utils; | |||
7 | 7 | ||
8 | import org.eclipse.emf.ecore.resource.Resource.Diagnostic; | 8 | import org.eclipse.emf.ecore.resource.Resource.Diagnostic; |
9 | import org.eclipse.emf.ecore.util.Diagnostician; | 9 | import org.eclipse.emf.ecore.util.Diagnostician; |
10 | import org.eclipse.emf.ecore.util.EcoreUtil; | ||
11 | import tools.refinery.language.library.BuiltinLibrary; | ||
10 | import tools.refinery.language.model.problem.*; | 12 | import tools.refinery.language.model.problem.*; |
11 | import tools.refinery.language.utils.BuiltinSymbols; | ||
12 | import tools.refinery.language.utils.ProblemDesugarer; | ||
13 | 13 | ||
14 | import java.util.List; | 14 | import java.util.List; |
15 | import java.util.stream.Stream; | 15 | import java.util.stream.Stream; |
@@ -32,11 +32,11 @@ public record WrappedProblem(Problem problem) { | |||
32 | } | 32 | } |
33 | 33 | ||
34 | public WrappedProblem builtin() { | 34 | public WrappedProblem builtin() { |
35 | return new WrappedProblem(new ProblemDesugarer().getBuiltinProblem(problem).orElseThrow()); | 35 | var resourceSet = problem.eResource().getResourceSet(); |
36 | } | 36 | var builtinResource = resourceSet.getResource(BuiltinLibrary.BUILTIN_LIBRARY_URI, true); |
37 | 37 | EcoreUtil.resolveAll(builtinResource); | |
38 | public BuiltinSymbols builtinSymbols() { | 38 | var builtinProblem = (Problem) builtinResource.getContents().getFirst(); |
39 | return new ProblemDesugarer().getBuiltinSymbols(problem).orElseThrow(); | 39 | return new WrappedProblem(builtinProblem); |
40 | } | 40 | } |
41 | 41 | ||
42 | public List<String> nodeNames() { | 42 | public List<String> nodeNames() { |