aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects')
-rw-r--r--subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/ProblemCrossrefProposalProvider.java22
-rw-r--r--subprojects/language/src/main/java/tools/refinery/language/resource/ProblemResourceDescriptionStrategy.java4
2 files changed, 25 insertions, 1 deletions
diff --git a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/ProblemCrossrefProposalProvider.java b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/ProblemCrossrefProposalProvider.java
index fa04a012..a09a475b 100644
--- a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/ProblemCrossrefProposalProvider.java
+++ b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/contentassist/ProblemCrossrefProposalProvider.java
@@ -24,6 +24,7 @@ import tools.refinery.language.model.problem.*;
24import tools.refinery.language.naming.NamingUtil; 24import tools.refinery.language.naming.NamingUtil;
25import tools.refinery.language.naming.ProblemQualifiedNameConverter; 25import tools.refinery.language.naming.ProblemQualifiedNameConverter;
26import tools.refinery.language.resource.ProblemResourceDescriptionStrategy; 26import tools.refinery.language.resource.ProblemResourceDescriptionStrategy;
27import tools.refinery.language.scoping.imports.ImportCollector;
27import tools.refinery.language.utils.BuiltinSymbols; 28import tools.refinery.language.utils.BuiltinSymbols;
28import tools.refinery.language.utils.ProblemDesugarer; 29import tools.refinery.language.utils.ProblemDesugarer;
29import tools.refinery.language.utils.ProblemUtil; 30import tools.refinery.language.utils.ProblemUtil;
@@ -44,6 +45,9 @@ public class ProblemCrossrefProposalProvider extends IdeCrossrefProposalProvider
44 @Inject 45 @Inject
45 private ProblemDesugarer desugarer; 46 private ProblemDesugarer desugarer;
46 47
48 @Inject
49 private ImportCollector importCollector;
50
47 @Override 51 @Override
48 protected Iterable<IEObjectDescription> queryScope(IScope scope, CrossReference crossReference, 52 protected Iterable<IEObjectDescription> queryScope(IScope scope, CrossReference crossReference,
49 ContentAssistContext context) { 53 ContentAssistContext context) {
@@ -110,6 +114,10 @@ public class ProblemCrossrefProposalProvider extends IdeCrossrefProposalProvider
110 return true; 114 return true;
111 } 115 }
112 116
117 if (eReference == ProblemPackage.Literals.IMPORT_STATEMENT__IMPORTED_MODULE) {
118 return importedModuleShouldBeVisible(candidate, context);
119 }
120
113 var candidateEObjectOrProxy = candidate.getEObjectOrProxy(); 121 var candidateEObjectOrProxy = candidate.getEObjectOrProxy();
114 122
115 if (eReference.equals(ProblemPackage.Literals.REFERENCE_DECLARATION__OPPOSITE) && 123 if (eReference.equals(ProblemPackage.Literals.REFERENCE_DECLARATION__OPPOSITE) &&
@@ -127,6 +135,20 @@ public class ProblemCrossrefProposalProvider extends IdeCrossrefProposalProvider
127 candidateEObjectOrProxy); 135 candidateEObjectOrProxy);
128 } 136 }
129 137
138 private boolean importedModuleShouldBeVisible(IEObjectDescription candidate, ContentAssistContext context) {
139 var moduleKind = candidate.getUserData(ProblemResourceDescriptionStrategy.MODULE_KIND);
140 if (!ModuleKind.MODULE.getName().equals(moduleKind)) {
141 return false;
142 }
143 var resource = context.getResource();
144 var candidateResourceUri = candidate.getEObjectURI().trimFragment();
145 if (candidateResourceUri.equals(resource.getURI())) {
146 return false;
147 }
148 var imports = importCollector.getDirectImports(resource);
149 return !imports.toUriSet().contains(candidateResourceUri);
150 }
151
130 private static boolean oppositeShouldBeVisible(ReferenceDeclaration candidateReferenceDeclaration, 152 private static boolean oppositeShouldBeVisible(ReferenceDeclaration candidateReferenceDeclaration,
131 ContentAssistContext context) { 153 ContentAssistContext context) {
132 var referenceDeclaration = EcoreUtil2.getContainerOfType(context.getCurrentModel(), 154 var referenceDeclaration = EcoreUtil2.getContainerOfType(context.getCurrentModel(),
diff --git a/subprojects/language/src/main/java/tools/refinery/language/resource/ProblemResourceDescriptionStrategy.java b/subprojects/language/src/main/java/tools/refinery/language/resource/ProblemResourceDescriptionStrategy.java
index 7d90ea00..3080a78e 100644
--- a/subprojects/language/src/main/java/tools/refinery/language/resource/ProblemResourceDescriptionStrategy.java
+++ b/subprojects/language/src/main/java/tools/refinery/language/resource/ProblemResourceDescriptionStrategy.java
@@ -42,6 +42,7 @@ public class ProblemResourceDescriptionStrategy extends DefaultResourceDescripti
42 public static final String PREFERRED_NAME_TRUE = "true"; 42 public static final String PREFERRED_NAME_TRUE = "true";
43 public static final String IMPORTS = DATA_PREFIX + "IMPORTS"; 43 public static final String IMPORTS = DATA_PREFIX + "IMPORTS";
44 public static final String IMPORTS_SEPARATOR = "|"; 44 public static final String IMPORTS_SEPARATOR = "|";
45 public static final String MODULE_KIND = DATA_PREFIX + "MODULE_KIND";
45 public static final String COLOR_RELATION = DATA_PREFIX + "COLOR_RELATION"; 46 public static final String COLOR_RELATION = DATA_PREFIX + "COLOR_RELATION";
46 public static final String COLOR_RELATION_TRUE = "true"; 47 public static final String COLOR_RELATION_TRUE = "true";
47 48
@@ -135,13 +136,14 @@ public class ProblemResourceDescriptionStrategy extends DefaultResourceDescripti
135 136
136 protected Map<String, String> getUserData(EObject eObject) { 137 protected Map<String, String> getUserData(EObject eObject) {
137 var builder = ImmutableMap.<String, String>builder(); 138 var builder = ImmutableMap.<String, String>builder();
138 if (eObject instanceof Problem) { 139 if (eObject instanceof Problem problem) {
139 builder.put(SHADOWING_KEY, SHADOWING_KEY_PROBLEM); 140 builder.put(SHADOWING_KEY, SHADOWING_KEY_PROBLEM);
140 var explicitImports = importCollector.getDirectImports(eObject.eResource()); 141 var explicitImports = importCollector.getDirectImports(eObject.eResource());
141 var importsString = explicitImports.toList().stream() 142 var importsString = explicitImports.toList().stream()
142 .map(importEntry -> importEntry.uri().toString()) 143 .map(importEntry -> importEntry.uri().toString())
143 .collect(Collectors.joining(IMPORTS_SEPARATOR)); 144 .collect(Collectors.joining(IMPORTS_SEPARATOR));
144 builder.put(IMPORTS, importsString); 145 builder.put(IMPORTS, importsString);
146 builder.put(MODULE_KIND, problem.getKind().getName());
145 } else if (eObject instanceof Node) { 147 } else if (eObject instanceof Node) {
146 builder.put(SHADOWING_KEY, SHADOWING_KEY_NODE); 148 builder.put(SHADOWING_KEY, SHADOWING_KEY_NODE);
147 } else if (eObject instanceof Relation relation) { 149 } else if (eObject instanceof Relation relation) {