diff options
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.java | 68 |
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 | */ | ||
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 | } | ||