aboutsummaryrefslogtreecommitdiffstats
path: root/language
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2021-10-19 03:36:26 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2021-10-19 03:36:26 +0200
commit663274763e56b228efe07363b8ede4ce7bebc251 (patch)
treeda6f8e0404cc03152cad84d8b9dfc8c63f7a6dbf /language
parentnodeIter moved from private field inside the method (diff)
downloadrefinery-663274763e56b228efe07363b8ede4ce7bebc251.tar.gz
refinery-663274763e56b228efe07363b8ede4ce7bebc251.tar.zst
refinery-663274763e56b228efe07363b8ede4ce7bebc251.zip
chore: remove builtin library xtext dependency
Diffstat (limited to 'language')
-rw-r--r--language/build.gradle1
-rw-r--r--language/src/main/java/tools/refinery/language/ProblemStandaloneSetup.java30
-rw-r--r--language/src/main/java/tools/refinery/language/ProblemUtil.java94
-rw-r--r--language/src/main/java/tools/refinery/language/ProblemXmiRuntimeModule.java35
-rw-r--r--language/src/main/java/tools/refinery/language/resource/ProblemLocationInFileProvider.java2
-rw-r--r--language/src/main/java/tools/refinery/language/resource/ProblemResourceDescriptionStrategy.java2
-rw-r--r--language/src/main/java/tools/refinery/language/resource/ProblemXmiResourceFactory.java16
-rw-r--r--language/src/main/java/tools/refinery/language/scoping/ProblemGlobalScopeProvider.java13
-rw-r--r--language/src/main/java/tools/refinery/language/scoping/ProblemLocalScopeProvider.java4
-rw-r--r--language/src/main/java/tools/refinery/language/scoping/ProblemScopeProvider.java2
-rw-r--r--language/src/main/resources/tools/refinery/builtin.problem21
-rw-r--r--language/src/test/java/tools/refinery/language/tests/ProblemParsingTest.xtend5
-rw-r--r--language/src/test/java/tools/refinery/language/tests/ProblemTestUtil.xtend114
-rw-r--r--language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.xtend2
14 files changed, 85 insertions, 256 deletions
diff --git a/language/build.gradle b/language/build.gradle
index 85b0902f..f2b20ab5 100644
--- a/language/build.gradle
+++ b/language/build.gradle
@@ -12,6 +12,7 @@ dependencies {
12 api "org.eclipse.emf:org.eclipse.emf.ecore:${ecoreVersion}" 12 api "org.eclipse.emf:org.eclipse.emf.ecore:${ecoreVersion}"
13 api project(':refinery-language-model') 13 api project(':refinery-language-model')
14 testFixturesApi "org.eclipse.xtext:org.eclipse.xtext.testing:${xtextVersion}" 14 testFixturesApi "org.eclipse.xtext:org.eclipse.xtext.testing:${xtextVersion}"
15 testFixturesApi testFixtures(project(':refinery-language-model'))
15 mwe2 "org.eclipse.xtext:org.eclipse.xtext.common.types:${xtextVersion}" 16 mwe2 "org.eclipse.xtext:org.eclipse.xtext.common.types:${xtextVersion}"
16 mwe2 "org.eclipse.xtext:org.eclipse.xtext.xtext.generator:${xtextVersion}" 17 mwe2 "org.eclipse.xtext:org.eclipse.xtext.xtext.generator:${xtextVersion}"
17 mwe2 "org.eclipse.xtext:xtext-antlr-generator:${xtextAntlrGeneratorVersion}" 18 mwe2 "org.eclipse.xtext:xtext-antlr-generator:${xtextAntlrGeneratorVersion}"
diff --git a/language/src/main/java/tools/refinery/language/ProblemStandaloneSetup.java b/language/src/main/java/tools/refinery/language/ProblemStandaloneSetup.java
index f49069a5..d753a119 100644
--- a/language/src/main/java/tools/refinery/language/ProblemStandaloneSetup.java
+++ b/language/src/main/java/tools/refinery/language/ProblemStandaloneSetup.java
@@ -3,11 +3,14 @@
3 */ 3 */
4package tools.refinery.language; 4package tools.refinery.language;
5 5
6import org.eclipse.emf.ecore.EPackage; 6import org.eclipse.emf.ecore.resource.Resource;
7import org.eclipse.xtext.resource.IResourceFactory;
8import org.eclipse.xtext.resource.IResourceServiceProvider;
7 9
10import com.google.inject.Guice;
8import com.google.inject.Injector; 11import com.google.inject.Injector;
9 12
10import tools.refinery.language.model.problem.ProblemPackage; 13import tools.refinery.language.model.ProblemEMFSetup;
11 14
12/** 15/**
13 * Initialization support for running Xtext languages without Equinox extension 16 * Initialization support for running Xtext languages without Equinox extension
@@ -20,15 +23,22 @@ public class ProblemStandaloneSetup extends ProblemStandaloneSetupGenerated {
20 } 23 }
21 24
22 @Override 25 @Override
23 // Here we can't rely on java.util.HashMap#computeIfAbsent, because
24 // org.eclipse.emf.ecore.impl.EPackageRegistryImpl#containsKey is overridden
25 // without also overriding computeIfAbsent. We must make sure to call the
26 // overridden containsKey implementation.
27 @SuppressWarnings("squid:S3824")
28 public Injector createInjectorAndDoEMFRegistration() { 26 public Injector createInjectorAndDoEMFRegistration() {
29 if (!EPackage.Registry.INSTANCE.containsKey(ProblemPackage.eNS_URI)) { 27 ProblemEMFSetup.doEMFRegistration();
30 EPackage.Registry.INSTANCE.put(ProblemPackage.eNS_URI, ProblemPackage.eINSTANCE); 28 var xmiInjector = createXmiInjector();
31 } 29 registerXmiInjector(xmiInjector);
32 return super.createInjectorAndDoEMFRegistration(); 30 return super.createInjectorAndDoEMFRegistration();
33 } 31 }
32
33 protected Injector createXmiInjector() {
34 return Guice.createInjector(new ProblemXmiRuntimeModule());
35 }
36
37 protected void registerXmiInjector(Injector injector) {
38 IResourceFactory resourceFactory = injector.getInstance(IResourceFactory.class);
39 IResourceServiceProvider serviceProvider = injector.getInstance(IResourceServiceProvider.class);
40
41 Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(ProblemEMFSetup.XMI_RESOURCE_EXTENSION, resourceFactory);
42 IResourceServiceProvider.Registry.INSTANCE.getExtensionToFactoryMap().put(ProblemEMFSetup.XMI_RESOURCE_EXTENSION, serviceProvider);
43 }
34} 44}
diff --git a/language/src/main/java/tools/refinery/language/ProblemUtil.java b/language/src/main/java/tools/refinery/language/ProblemUtil.java
deleted file mode 100644
index ae2efc3d..00000000
--- a/language/src/main/java/tools/refinery/language/ProblemUtil.java
+++ /dev/null
@@ -1,94 +0,0 @@
1package tools.refinery.language;
2
3import java.util.ArrayDeque;
4import java.util.Collection;
5import java.util.Deque;
6import java.util.HashSet;
7import java.util.Optional;
8import java.util.Set;
9
10import org.eclipse.emf.ecore.EObject;
11import org.eclipse.emf.ecore.resource.Resource;
12
13import com.google.common.collect.ImmutableList;
14
15import tools.refinery.language.model.problem.ClassDeclaration;
16import tools.refinery.language.model.problem.Node;
17import tools.refinery.language.model.problem.Problem;
18import tools.refinery.language.model.problem.ProblemPackage;
19import tools.refinery.language.model.problem.ReferenceDeclaration;
20import tools.refinery.language.model.problem.Relation;
21import tools.refinery.language.model.problem.Variable;
22import tools.refinery.language.scoping.ProblemGlobalScopeProvider;
23
24public final class ProblemUtil {
25 private ProblemUtil() {
26 throw new IllegalStateException("This is a static utility class and should not be instantiated directly");
27 }
28
29 public static final String NODE_CLASS_NAME = "node";
30
31 public static boolean isSingletonVariable(Variable variable) {
32 return variable.eContainingFeature() == ProblemPackage.Literals.VARIABLE_OR_NODE_ARGUMENT__SINGLETON_VARIABLE;
33 }
34
35 public static boolean isUniqueNode(Node node) {
36 var containingFeature = node.eContainingFeature();
37 return containingFeature == ProblemPackage.Literals.UNIQUE_DECLARATION__NODES
38 || containingFeature == ProblemPackage.Literals.ENUM_DECLARATION__LITERALS;
39 }
40
41 public static boolean isNewNode(Node node) {
42 return node.eContainingFeature() == ProblemPackage.Literals.CLASS_DECLARATION__NEW_NODE;
43 }
44
45 public static Optional<Problem> getBuiltInLibrary(EObject context) {
46 return Optional.ofNullable(context.eResource()).map(Resource::getResourceSet)
47 .map(resourceSet -> resourceSet.getResource(ProblemGlobalScopeProvider.BULTIN_LIBRARY_URI, true))
48 .map(Resource::getContents).filter(contents -> !contents.isEmpty()).map(contents -> contents.get(0))
49 .filter(Problem.class::isInstance).map(Problem.class::cast);
50 }
51
52 public static boolean isBuiltIn(EObject eObject) {
53 if (eObject != null) {
54 var eResource = eObject.eResource();
55 if (eResource != null) {
56 return ProblemGlobalScopeProvider.BULTIN_LIBRARY_URI.equals(eResource.getURI());
57 }
58 }
59 return false;
60 }
61
62 public static Optional<ClassDeclaration> getNodeClassDeclaration(EObject context) {
63 return getBuiltInLibrary(context).flatMap(problem -> problem.getStatements().stream()
64 .filter(ClassDeclaration.class::isInstance).map(ClassDeclaration.class::cast)
65 .filter(declaration -> NODE_CLASS_NAME.equals(declaration.getName())).findFirst());
66 }
67
68 public static Collection<ClassDeclaration> getSuperclassesAndSelf(ClassDeclaration classDeclaration) {
69 Set<ClassDeclaration> found = new HashSet<>();
70 getNodeClassDeclaration(classDeclaration).ifPresent(found::add);
71 Deque<ClassDeclaration> queue = new ArrayDeque<>();
72 queue.addLast(classDeclaration);
73 while (!queue.isEmpty()) {
74 ClassDeclaration current = queue.removeFirst();
75 if (!found.contains(current)) {
76 found.add(current);
77 for (Relation superType : current.getSuperTypes()) {
78 if (superType instanceof ClassDeclaration superDeclaration) {
79 queue.addLast(superDeclaration);
80 }
81 }
82 }
83 }
84 return found;
85 }
86
87 public static Collection<ReferenceDeclaration> getAllReferenceDeclarations(ClassDeclaration classDeclaration) {
88 ImmutableList.Builder<ReferenceDeclaration> builder = ImmutableList.builder();
89 for (ClassDeclaration superclass : getSuperclassesAndSelf(classDeclaration)) {
90 builder.addAll(superclass.getReferenceDeclarations());
91 }
92 return builder.build();
93 }
94}
diff --git a/language/src/main/java/tools/refinery/language/ProblemXmiRuntimeModule.java b/language/src/main/java/tools/refinery/language/ProblemXmiRuntimeModule.java
new file mode 100644
index 00000000..03a33bee
--- /dev/null
+++ b/language/src/main/java/tools/refinery/language/ProblemXmiRuntimeModule.java
@@ -0,0 +1,35 @@
1package tools.refinery.language;
2
3import org.eclipse.xtext.naming.IQualifiedNameConverter;
4import org.eclipse.xtext.resource.IDefaultResourceDescriptionStrategy;
5import org.eclipse.xtext.resource.IResourceFactory;
6import org.eclipse.xtext.resource.generic.AbstractGenericResourceRuntimeModule;
7
8import tools.refinery.language.model.ProblemEMFSetup;
9import tools.refinery.language.naming.ProblemQualifiedNameConverter;
10import tools.refinery.language.resource.ProblemResourceDescriptionStrategy;
11import tools.refinery.language.resource.ProblemXmiResourceFactory;
12
13public class ProblemXmiRuntimeModule extends AbstractGenericResourceRuntimeModule {
14 @Override
15 protected String getLanguageName() {
16 return "tools.refinery.language.ProblemXmi";
17 }
18
19 @Override
20 protected String getFileExtensions() {
21 return ProblemEMFSetup.XMI_RESOURCE_EXTENSION;
22 }
23
24 public Class<? extends IResourceFactory> bindIResourceFactory() {
25 return ProblemXmiResourceFactory.class;
26 }
27
28 public Class<? extends IQualifiedNameConverter> bindIQualifiedNameConverter() {
29 return ProblemQualifiedNameConverter.class;
30 }
31
32 public Class<? extends IDefaultResourceDescriptionStrategy> bindIDefaultResourceDescriptionStrategy() {
33 return ProblemResourceDescriptionStrategy.class;
34 }
35}
diff --git a/language/src/main/java/tools/refinery/language/resource/ProblemLocationInFileProvider.java b/language/src/main/java/tools/refinery/language/resource/ProblemLocationInFileProvider.java
index f6a3ec75..b51de05d 100644
--- a/language/src/main/java/tools/refinery/language/resource/ProblemLocationInFileProvider.java
+++ b/language/src/main/java/tools/refinery/language/resource/ProblemLocationInFileProvider.java
@@ -4,7 +4,7 @@ import org.eclipse.emf.ecore.EObject;
4import org.eclipse.xtext.resource.DefaultLocationInFileProvider; 4import org.eclipse.xtext.resource.DefaultLocationInFileProvider;
5import org.eclipse.xtext.util.ITextRegion; 5import org.eclipse.xtext.util.ITextRegion;
6 6
7import tools.refinery.language.ProblemUtil; 7import tools.refinery.language.model.ProblemUtil;
8import tools.refinery.language.model.problem.ImplicitVariable; 8import tools.refinery.language.model.problem.ImplicitVariable;
9import tools.refinery.language.model.problem.Node; 9import tools.refinery.language.model.problem.Node;
10 10
diff --git a/language/src/main/java/tools/refinery/language/resource/ProblemResourceDescriptionStrategy.java b/language/src/main/java/tools/refinery/language/resource/ProblemResourceDescriptionStrategy.java
index c5dea671..e745b6a5 100644
--- a/language/src/main/java/tools/refinery/language/resource/ProblemResourceDescriptionStrategy.java
+++ b/language/src/main/java/tools/refinery/language/resource/ProblemResourceDescriptionStrategy.java
@@ -12,7 +12,7 @@ import org.eclipse.xtext.util.IAcceptor;
12import com.google.inject.Inject; 12import com.google.inject.Inject;
13import com.google.inject.Singleton; 13import com.google.inject.Singleton;
14 14
15import tools.refinery.language.ProblemUtil; 15import tools.refinery.language.model.ProblemUtil;
16import tools.refinery.language.model.problem.NamedElement; 16import tools.refinery.language.model.problem.NamedElement;
17import tools.refinery.language.model.problem.Node; 17import tools.refinery.language.model.problem.Node;
18import tools.refinery.language.model.problem.Problem; 18import tools.refinery.language.model.problem.Problem;
diff --git a/language/src/main/java/tools/refinery/language/resource/ProblemXmiResourceFactory.java b/language/src/main/java/tools/refinery/language/resource/ProblemXmiResourceFactory.java
new file mode 100644
index 00000000..68aa6016
--- /dev/null
+++ b/language/src/main/java/tools/refinery/language/resource/ProblemXmiResourceFactory.java
@@ -0,0 +1,16 @@
1package tools.refinery.language.resource;
2
3import org.eclipse.emf.common.util.URI;
4import org.eclipse.emf.ecore.resource.Resource;
5import org.eclipse.xtext.resource.IResourceFactory;
6
7import tools.refinery.language.model.problem.util.ProblemResourceFactoryImpl;
8
9public class ProblemXmiResourceFactory implements IResourceFactory {
10 private Resource.Factory problemResourceFactory = new ProblemResourceFactoryImpl();
11
12 @Override
13 public Resource createResource(URI uri) {
14 return problemResourceFactory.createResource(uri);
15 }
16}
diff --git a/language/src/main/java/tools/refinery/language/scoping/ProblemGlobalScopeProvider.java b/language/src/main/java/tools/refinery/language/scoping/ProblemGlobalScopeProvider.java
index a21c3bd2..b582d16b 100644
--- a/language/src/main/java/tools/refinery/language/scoping/ProblemGlobalScopeProvider.java
+++ b/language/src/main/java/tools/refinery/language/scoping/ProblemGlobalScopeProvider.java
@@ -6,20 +6,13 @@ import org.eclipse.emf.common.util.URI;
6import org.eclipse.emf.ecore.resource.Resource; 6import org.eclipse.emf.ecore.resource.Resource;
7import org.eclipse.xtext.scoping.impl.ImportUriGlobalScopeProvider; 7import org.eclipse.xtext.scoping.impl.ImportUriGlobalScopeProvider;
8 8
9public class ProblemGlobalScopeProvider extends ImportUriGlobalScopeProvider { 9import tools.refinery.language.model.ProblemUtil;
10 public static final String BUILTIN_LIBRARY_NAME = "builtin";
11
12 public static final URI BULTIN_LIBRARY_URI = getLibraryUri(BUILTIN_LIBRARY_NAME);
13 10
11public class ProblemGlobalScopeProvider extends ImportUriGlobalScopeProvider {
14 @Override 12 @Override
15 protected LinkedHashSet<URI> getImportedUris(Resource resource) { 13 protected LinkedHashSet<URI> getImportedUris(Resource resource) {
16 LinkedHashSet<URI> importedUris = new LinkedHashSet<>(); 14 LinkedHashSet<URI> importedUris = new LinkedHashSet<>();
17 importedUris.add(BULTIN_LIBRARY_URI); 15 importedUris.add(ProblemUtil.BUILTIN_LIBRARY_URI);
18 return importedUris; 16 return importedUris;
19 } 17 }
20
21 private static URI getLibraryUri(String libraryName) {
22 return URI.createURI(ProblemGlobalScopeProvider.class.getClassLoader()
23 .getResource("tools/refinery/" + libraryName + ".problem").toString());
24 }
25} 18}
diff --git a/language/src/main/java/tools/refinery/language/scoping/ProblemLocalScopeProvider.java b/language/src/main/java/tools/refinery/language/scoping/ProblemLocalScopeProvider.java
index 05a3bcf9..85797025 100644
--- a/language/src/main/java/tools/refinery/language/scoping/ProblemLocalScopeProvider.java
+++ b/language/src/main/java/tools/refinery/language/scoping/ProblemLocalScopeProvider.java
@@ -13,9 +13,11 @@ import org.eclipse.xtext.scoping.impl.ImportedNamespaceAwareLocalScopeProvider;
13 13
14import com.google.inject.Inject; 14import com.google.inject.Inject;
15 15
16import tools.refinery.language.model.ProblemUtil;
17
16public class ProblemLocalScopeProvider extends ImportedNamespaceAwareLocalScopeProvider { 18public class ProblemLocalScopeProvider extends ImportedNamespaceAwareLocalScopeProvider {
17 private static final QualifiedName BUILTIN_LIBRARY_QUALIFIED_NAME = QualifiedName 19 private static final QualifiedName BUILTIN_LIBRARY_QUALIFIED_NAME = QualifiedName
18 .create(ProblemGlobalScopeProvider.BUILTIN_LIBRARY_NAME); 20 .create(ProblemUtil.BUILTIN_LIBRARY_NAME);
19 21
20 @Inject 22 @Inject
21 private IResourceDescriptionsProvider resourceDescriptionsProvider; 23 private IResourceDescriptionsProvider resourceDescriptionsProvider;
diff --git a/language/src/main/java/tools/refinery/language/scoping/ProblemScopeProvider.java b/language/src/main/java/tools/refinery/language/scoping/ProblemScopeProvider.java
index 61a3c8f9..86b39dbc 100644
--- a/language/src/main/java/tools/refinery/language/scoping/ProblemScopeProvider.java
+++ b/language/src/main/java/tools/refinery/language/scoping/ProblemScopeProvider.java
@@ -12,7 +12,7 @@ import org.eclipse.xtext.EcoreUtil2;
12import org.eclipse.xtext.scoping.IScope; 12import org.eclipse.xtext.scoping.IScope;
13import org.eclipse.xtext.scoping.Scopes; 13import org.eclipse.xtext.scoping.Scopes;
14 14
15import tools.refinery.language.ProblemUtil; 15import tools.refinery.language.model.ProblemUtil;
16import tools.refinery.language.model.problem.ClassDeclaration; 16import tools.refinery.language.model.problem.ClassDeclaration;
17import tools.refinery.language.model.problem.ExistentialQuantifier; 17import tools.refinery.language.model.problem.ExistentialQuantifier;
18import tools.refinery.language.model.problem.PredicateDefinition; 18import tools.refinery.language.model.problem.PredicateDefinition;
diff --git a/language/src/main/resources/tools/refinery/builtin.problem b/language/src/main/resources/tools/refinery/builtin.problem
deleted file mode 100644
index 7c4f6685..00000000
--- a/language/src/main/resources/tools/refinery/builtin.problem
+++ /dev/null
@@ -1,21 +0,0 @@
1problem builtin.
2
3abstract class node {
4 node[] equals opposite equals
5}
6
7pred exists(node node).
8
9abstract class domain extends node.
10
11abstract class data extends node.
12
13enum bool {
14 true, false
15}
16
17class real extends data.
18
19class int extends data.
20
21class string extends data.
diff --git a/language/src/test/java/tools/refinery/language/tests/ProblemParsingTest.xtend b/language/src/test/java/tools/refinery/language/tests/ProblemParsingTest.xtend
index 9bd728d6..99cf0a86 100644
--- a/language/src/test/java/tools/refinery/language/tests/ProblemParsingTest.xtend
+++ b/language/src/test/java/tools/refinery/language/tests/ProblemParsingTest.xtend
@@ -10,6 +10,7 @@ import org.eclipse.xtext.testing.util.ParseHelper
10import org.junit.jupiter.api.Test 10import org.junit.jupiter.api.Test
11import org.junit.jupiter.api.^extension.ExtendWith 11import org.junit.jupiter.api.^extension.ExtendWith
12import tools.refinery.language.model.problem.Problem 12import tools.refinery.language.model.problem.Problem
13import tools.refinery.language.model.tests.ProblemTestUtil
13 14
14import static org.hamcrest.MatcherAssert.assertThat 15import static org.hamcrest.MatcherAssert.assertThat
15import static org.hamcrest.Matchers.* 16import static org.hamcrest.Matchers.*
@@ -19,10 +20,10 @@ import static org.hamcrest.Matchers.*
19class ProblemParsingTest { 20class ProblemParsingTest {
20 @Inject 21 @Inject
21 ParseHelper<Problem> parseHelper 22 ParseHelper<Problem> parseHelper
22 23
23 @Inject 24 @Inject
24 extension ProblemTestUtil 25 extension ProblemTestUtil
25 26
26 @Test 27 @Test
27 def void exampleTest() { 28 def void exampleTest() {
28 val it = parseHelper.parse(''' 29 val it = parseHelper.parse('''
diff --git a/language/src/test/java/tools/refinery/language/tests/ProblemTestUtil.xtend b/language/src/test/java/tools/refinery/language/tests/ProblemTestUtil.xtend
deleted file mode 100644
index 46418892..00000000
--- a/language/src/test/java/tools/refinery/language/tests/ProblemTestUtil.xtend
+++ /dev/null
@@ -1,114 +0,0 @@
1package tools.refinery.language.tests
2
3import tools.refinery.language.ProblemUtil
4import tools.refinery.language.model.problem.Argument
5import tools.refinery.language.model.problem.Assertion
6import tools.refinery.language.model.problem.AssertionArgument
7import tools.refinery.language.model.problem.Atom
8import tools.refinery.language.model.problem.ClassDeclaration
9import tools.refinery.language.model.problem.Conjunction
10import tools.refinery.language.model.problem.EnumDeclaration
11import tools.refinery.language.model.problem.Literal
12import tools.refinery.language.model.problem.NegativeLiteral
13import tools.refinery.language.model.problem.Node
14import tools.refinery.language.model.problem.NodeAssertionArgument
15import tools.refinery.language.model.problem.NodeValueAssertion
16import tools.refinery.language.model.problem.PredicateDefinition
17import tools.refinery.language.model.problem.Problem
18import tools.refinery.language.model.problem.UniqueDeclaration
19import tools.refinery.language.model.problem.Variable
20import tools.refinery.language.model.problem.VariableOrNodeArgument
21
22class ProblemTestUtil {
23 def builtin(Problem it) {
24 ProblemUtil.getBuiltInLibrary(it).get
25 }
26
27 def errors(Problem it) {
28 eResource.errors
29 }
30
31 def nodeNames(Problem it) {
32 nodes.map[name]
33 }
34
35 def pred(Problem it, String name) {
36 statements.filter(PredicateDefinition).findFirst[it.name == name]
37 }
38
39 def param(PredicateDefinition it, int i) {
40 parameters.get(i)
41 }
42
43 def conj(PredicateDefinition it, int i) {
44 bodies.get(i)
45 }
46
47 def lit(Conjunction it, int i) {
48 literals.get(i)
49 }
50
51 def negated(Literal it) {
52 (it as NegativeLiteral).atom
53 }
54
55 def relation(Literal it) {
56 (it as Atom).relation
57 }
58
59 def arg(Atom it, int i) {
60 it.arguments.get(i)
61 }
62
63 def arg(Literal it, int i) {
64 (it as Atom).arg(i)
65 }
66
67 def variable(Argument it) {
68 (it as VariableOrNodeArgument).variableOrNode as Variable
69 }
70
71 def node(Argument it) {
72 (it as VariableOrNodeArgument).variableOrNode as Node
73 }
74
75 def assertion(Problem it, int i) {
76 statements.filter(Assertion).get(i)
77 }
78
79 def nodeValueAssertion(Problem it, int i) {
80 statements.filter(NodeValueAssertion).get(i)
81 }
82
83 def arg(Assertion it, int i) {
84 arguments.get(i)
85 }
86
87 def node(AssertionArgument it) {
88 (it as NodeAssertionArgument).node
89 }
90
91 def node(Problem it, String name) {
92 nodes.findFirst[it.name == name]
93 }
94
95 def uniqueNode(Problem it, String name) {
96 statements.filter(UniqueDeclaration).flatMap[nodes].findFirst[it.name == name]
97 }
98
99 def findClass(Problem it, String name) {
100 statements.filter(ClassDeclaration).findFirst[it.name == name]
101 }
102
103 def reference(ClassDeclaration it, String name) {
104 it.referenceDeclarations.findFirst[it.name == name]
105 }
106
107 def findEnum(Problem it, String name) {
108 statements.filter(EnumDeclaration).findFirst[it.name == name]
109 }
110
111 def literal(EnumDeclaration it, String name) {
112 literals.findFirst[it.name == name]
113 }
114}
diff --git a/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.xtend b/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.xtend
index ab3e325f..5ff7a2c9 100644
--- a/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.xtend
+++ b/language/src/test/java/tools/refinery/language/tests/scoping/NodeScopingTest.xtend
@@ -12,8 +12,8 @@ import org.junit.jupiter.params.provider.Arguments
12import org.junit.jupiter.params.provider.MethodSource 12import org.junit.jupiter.params.provider.MethodSource
13import org.junit.jupiter.params.provider.ValueSource 13import org.junit.jupiter.params.provider.ValueSource
14import tools.refinery.language.model.problem.Problem 14import tools.refinery.language.model.problem.Problem
15import tools.refinery.language.model.tests.ProblemTestUtil
15import tools.refinery.language.tests.ProblemInjectorProvider 16import tools.refinery.language.tests.ProblemInjectorProvider
16import tools.refinery.language.tests.ProblemTestUtil
17 17
18import static org.hamcrest.MatcherAssert.assertThat 18import static org.hamcrest.MatcherAssert.assertThat
19import static org.hamcrest.Matchers.* 19import static org.hamcrest.Matchers.*