aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/language/src/main/java/tools/refinery/language/scoping/ShadowingKeyAwareSelectableBasedScope.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/language/src/main/java/tools/refinery/language/scoping/ShadowingKeyAwareSelectableBasedScope.java')
-rw-r--r--subprojects/language/src/main/java/tools/refinery/language/scoping/ShadowingKeyAwareSelectableBasedScope.java52
1 files changed, 52 insertions, 0 deletions
diff --git a/subprojects/language/src/main/java/tools/refinery/language/scoping/ShadowingKeyAwareSelectableBasedScope.java b/subprojects/language/src/main/java/tools/refinery/language/scoping/ShadowingKeyAwareSelectableBasedScope.java
new file mode 100644
index 00000000..cdef13ad
--- /dev/null
+++ b/subprojects/language/src/main/java/tools/refinery/language/scoping/ShadowingKeyAwareSelectableBasedScope.java
@@ -0,0 +1,52 @@
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;
7
8import com.google.common.base.Predicate;
9import org.eclipse.emf.ecore.EClass;
10import org.eclipse.xtext.resource.IEObjectDescription;
11import org.eclipse.xtext.resource.ISelectable;
12import org.eclipse.xtext.scoping.IScope;
13import org.eclipse.xtext.scoping.impl.SelectableBasedScope;
14import tools.refinery.language.resource.ProblemResourceDescriptionStrategy;
15
16import java.util.Objects;
17
18public class ShadowingKeyAwareSelectableBasedScope extends SelectableBasedScope {
19 public static IScope createScope(IScope outer, ISelectable selectable, EClass type, boolean ignoreCase) {
20 return createScope(outer, selectable, null, type, ignoreCase);
21 }
22
23 // {@link com.google.common.base.Predicate} required by Xtext API.
24 @SuppressWarnings("squid:S4738")
25 public static IScope createScope(IScope outer, ISelectable selectable, Predicate<IEObjectDescription> filter,
26 EClass type, boolean ignoreCase) {
27 if (selectable == null || selectable.isEmpty())
28 return outer;
29 return new ShadowingKeyAwareSelectableBasedScope(outer, selectable, filter, type, ignoreCase);
30 }
31
32 // {@link com.google.common.base.Predicate} required by Xtext API.
33 @SuppressWarnings("squid:S4738")
34 protected ShadowingKeyAwareSelectableBasedScope(IScope outer, ISelectable selectable,
35 Predicate<IEObjectDescription> filter,
36 EClass type, boolean ignoreCase) {
37 super(outer, selectable, filter, type, ignoreCase);
38 }
39
40 @Override
41 protected boolean isShadowed(IEObjectDescription input) {
42 var shadowingKey = input.getUserData(ProblemResourceDescriptionStrategy.SHADOWING_KEY);
43 var localElements = getLocalElementsByName(input.getName());
44 for (var localElement : localElements) {
45 var localElementKey = localElement.getUserData(ProblemResourceDescriptionStrategy.SHADOWING_KEY);
46 if (Objects.equals(shadowingKey, localElementKey)) {
47 return true;
48 }
49 }
50 return false;
51 }
52}