aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language/src/main/java/tools/refinery/language/naming/ProblemQualifiedNameProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/language/src/main/java/tools/refinery/language/naming/ProblemQualifiedNameProvider.java')
-rw-r--r--subprojects/language/src/main/java/tools/refinery/language/naming/ProblemQualifiedNameProvider.java41
1 files changed, 41 insertions, 0 deletions
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
new file mode 100644
index 00000000..5b682058
--- /dev/null
+++ b/subprojects/language/src/main/java/tools/refinery/language/naming/ProblemQualifiedNameProvider.java
@@ -0,0 +1,41 @@
1/*
2 * SPDX-FileCopyrightText: 2024 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.language.naming;
7
8import com.google.inject.Inject;
9import com.google.inject.name.Named;
10import org.eclipse.emf.ecore.EObject;
11import org.eclipse.xtext.naming.IQualifiedNameProvider;
12import org.eclipse.xtext.naming.QualifiedName;
13import org.eclipse.xtext.util.IResourceScopeCache;
14import org.eclipse.xtext.util.Tuples;
15import tools.refinery.language.resource.ProblemResourceDescriptionStrategy;
16
17public 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
22 @Inject
23 @Named(NAMED_DELEGATE)
24 private IQualifiedNameProvider delegate;
25
26 @Inject
27 private IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE;
28
29 @Override
30 public QualifiedName getFullyQualifiedName(EObject obj) {
31 return cache.get(Tuples.pair(obj, CACHE_KEY), obj.eResource(), () -> computeFullyQualifiedName(obj));
32 }
33
34 public QualifiedName computeFullyQualifiedName(EObject obj) {
35 var qualifiedName = delegate.getFullyQualifiedName(obj);
36 if (qualifiedName != null && ProblemResourceDescriptionStrategy.shouldExport(obj)) {
37 return NamingUtil.addRootPrefix(qualifiedName);
38 }
39 return qualifiedName;
40 }
41}