diff options
Diffstat (limited to 'subprojects/language/src/main/java/tools/refinery/language/utils/BuiltinSymbols.java')
-rw-r--r-- | subprojects/language/src/main/java/tools/refinery/language/utils/BuiltinSymbols.java | 57 |
1 files changed, 53 insertions, 4 deletions
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 | } |