aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language/src/main/java/tools/refinery/language/scoping/imports/ImportAdapterProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/language/src/main/java/tools/refinery/language/scoping/imports/ImportAdapterProvider.java')
-rw-r--r--subprojects/language/src/main/java/tools/refinery/language/scoping/imports/ImportAdapterProvider.java68
1 files changed, 68 insertions, 0 deletions
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 */
6package tools.refinery.language.scoping.imports;
7
8import com.google.inject.Inject;
9import com.google.inject.Provider;
10import com.google.inject.Singleton;
11import org.eclipse.emf.ecore.EObject;
12import org.eclipse.emf.ecore.resource.Resource;
13import org.eclipse.emf.ecore.resource.ResourceSet;
14import org.eclipse.emf.ecore.util.EcoreUtil;
15import org.jetbrains.annotations.NotNull;
16import tools.refinery.language.expressions.TermInterpreter;
17import tools.refinery.language.utils.BuiltinSymbols;
18
19@Singleton
20public 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}