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.java56
1 files changed, 32 insertions, 24 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
index 5b682058..2a4df4d0 100644
--- a/subprojects/language/src/main/java/tools/refinery/language/naming/ProblemQualifiedNameProvider.java
+++ b/subprojects/language/src/main/java/tools/refinery/language/naming/ProblemQualifiedNameProvider.java
@@ -6,36 +6,44 @@
6package tools.refinery.language.naming; 6package tools.refinery.language.naming;
7 7
8import com.google.inject.Inject; 8import com.google.inject.Inject;
9import com.google.inject.name.Named; 9import com.google.inject.Singleton;
10import org.eclipse.emf.ecore.EObject; 10import org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider;
11import org.eclipse.xtext.naming.IQualifiedNameProvider; 11import org.eclipse.xtext.naming.IQualifiedNameConverter;
12import org.eclipse.xtext.naming.QualifiedName; 12import org.eclipse.xtext.naming.QualifiedName;
13import org.eclipse.xtext.util.IResourceScopeCache; 13import tools.refinery.language.model.problem.Problem;
14import org.eclipse.xtext.util.Tuples; 14import tools.refinery.language.scoping.imports.ImportAdapterProvider;
15import tools.refinery.language.resource.ProblemResourceDescriptionStrategy; 15import tools.refinery.language.utils.ProblemUtil;
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 16
17@Singleton
18public class ProblemQualifiedNameProvider extends DefaultDeclarativeQualifiedNameProvider {
22 @Inject 19 @Inject
23 @Named(NAMED_DELEGATE) 20 private IQualifiedNameConverter qualifiedNameConverter;
24 private IQualifiedNameProvider delegate;
25 21
26 @Inject 22 @Inject
27 private IResourceScopeCache cache = IResourceScopeCache.NullImpl.INSTANCE; 23 private ImportAdapterProvider importAdapterProvider;
28
29 @Override
30 public QualifiedName getFullyQualifiedName(EObject obj) {
31 return cache.get(Tuples.pair(obj, CACHE_KEY), obj.eResource(), () -> computeFullyQualifiedName(obj));
32 }
33 24
34 public QualifiedName computeFullyQualifiedName(EObject obj) { 25 protected QualifiedName qualifiedName(Problem problem) {
35 var qualifiedName = delegate.getFullyQualifiedName(obj); 26 var qualifiedNameString = problem.getName();
36 if (qualifiedName != null && ProblemResourceDescriptionStrategy.shouldExport(obj)) { 27 if (qualifiedNameString != null) {
37 return NamingUtil.addRootPrefix(qualifiedName); 28 return NamingUtil.stripRootPrefix(qualifiedNameConverter.toQualifiedName(qualifiedNameString));
29 }
30 if (!ProblemUtil.isModule(problem)) {
31 return null;
32 }
33 var resource = problem.eResource();
34 if (resource == null) {
35 return null;
36 }
37 var resourceUri = resource.getURI();
38 if (resourceUri == null) {
39 return null;
40 }
41 var resourceSet = resource.getResourceSet();
42 if (resourceSet == null) {
43 return null;
38 } 44 }
39 return qualifiedName; 45 var adapter = importAdapterProvider.getOrInstall(resourceSet);
46 // If a module has no explicitly specified name, return the qualified name it was resolved under.
47 return adapter.getQualifiedName(resourceUri);
40 } 48 }
41} 49}