From 0b7b1b2b5a136e157b733e9d9c7e1d250efae15d Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sun, 11 Feb 2024 22:28:36 +0100 Subject: feat(language): filter content assist for imports --- .../ProblemCrossrefProposalProvider.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'subprojects/language-ide/src/main') 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.*; import tools.refinery.language.naming.NamingUtil; import tools.refinery.language.naming.ProblemQualifiedNameConverter; import tools.refinery.language.resource.ProblemResourceDescriptionStrategy; +import tools.refinery.language.scoping.imports.ImportCollector; import tools.refinery.language.utils.BuiltinSymbols; import tools.refinery.language.utils.ProblemDesugarer; import tools.refinery.language.utils.ProblemUtil; @@ -44,6 +45,9 @@ public class ProblemCrossrefProposalProvider extends IdeCrossrefProposalProvider @Inject private ProblemDesugarer desugarer; + @Inject + private ImportCollector importCollector; + @Override protected Iterable queryScope(IScope scope, CrossReference crossReference, ContentAssistContext context) { @@ -110,6 +114,10 @@ public class ProblemCrossrefProposalProvider extends IdeCrossrefProposalProvider return true; } + if (eReference == ProblemPackage.Literals.IMPORT_STATEMENT__IMPORTED_MODULE) { + return importedModuleShouldBeVisible(candidate, context); + } + var candidateEObjectOrProxy = candidate.getEObjectOrProxy(); if (eReference.equals(ProblemPackage.Literals.REFERENCE_DECLARATION__OPPOSITE) && @@ -127,6 +135,20 @@ public class ProblemCrossrefProposalProvider extends IdeCrossrefProposalProvider candidateEObjectOrProxy); } + private boolean importedModuleShouldBeVisible(IEObjectDescription candidate, ContentAssistContext context) { + var moduleKind = candidate.getUserData(ProblemResourceDescriptionStrategy.MODULE_KIND); + if (!ModuleKind.MODULE.getName().equals(moduleKind)) { + return false; + } + var resource = context.getResource(); + var candidateResourceUri = candidate.getEObjectURI().trimFragment(); + if (candidateResourceUri.equals(resource.getURI())) { + return false; + } + var imports = importCollector.getDirectImports(resource); + return !imports.toUriSet().contains(candidateResourceUri); + } + private static boolean oppositeShouldBeVisible(ReferenceDeclaration candidateReferenceDeclaration, ContentAssistContext context) { var referenceDeclaration = EcoreUtil2.getContainerOfType(context.getCurrentModel(), -- cgit v1.2.3-54-g00ecf