From d29b440879406f035f85ec6ba9472cf10a5af7e3 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sun, 18 Feb 2024 23:13:00 +0100 Subject: fix(language): type hash colors Make sure type hashes can be computed with the updated scoping rules. --- .../ide/syntaxcoloring/TypeHashProvider.java | 49 +++++++++++++++++++--- 1 file changed, 43 insertions(+), 6 deletions(-) (limited to 'subprojects/language-ide/src') diff --git a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/TypeHashProvider.java b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/TypeHashProvider.java index f75ecdb2..dd9f1053 100644 --- a/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/TypeHashProvider.java +++ b/subprojects/language-ide/src/main/java/tools/refinery/language/ide/syntaxcoloring/TypeHashProvider.java @@ -11,10 +11,13 @@ import com.google.inject.Singleton; import org.eclipse.xtext.EcoreUtil2; import org.eclipse.xtext.naming.IQualifiedNameConverter; import org.eclipse.xtext.naming.IQualifiedNameProvider; +import org.eclipse.xtext.resource.IResourceDescription; import org.eclipse.xtext.scoping.IScopeProvider; +import org.eclipse.xtext.scoping.impl.GlobalResourceDescriptionProvider; import org.eclipse.xtext.util.IResourceScopeCache; import tools.refinery.language.model.problem.*; import tools.refinery.language.resource.ProblemResourceDescriptionStrategy; +import tools.refinery.language.scoping.imports.ImportCollector; import tools.refinery.language.utils.ProblemUtil; import java.util.*; @@ -36,6 +39,12 @@ public class TypeHashProvider { @Inject private IQualifiedNameConverter qualifiedNameConverter; + @Inject + private ImportCollector importCollector; + + @Inject + private GlobalResourceDescriptionProvider globalResourceDescriptionProvider; + public String getTypeHash(Relation relation) { if (!(relation instanceof ClassDeclaration || relation instanceof EnumDeclaration) || ProblemUtil.isBuiltIn(relation)) { @@ -55,13 +64,15 @@ public class TypeHashProvider { } private Map computeHashes(Problem problem) { + var resourceDescriptions = getResourceDescriptions(problem); var qualifiedNameStrings = new TreeSet(); - var scope = scopeProvider.getScope(problem, ProblemPackage.Literals.ASSERTION__RELATION); - for (var description : scope.getAllElements()) { - if (ProblemResourceDescriptionStrategy.COLOR_RELATION_TRUE.equals( - description.getUserData(ProblemResourceDescriptionStrategy.COLOR_RELATION))) { - var qualifiedNameString = qualifiedNameConverter.toString(description.getQualifiedName()); - qualifiedNameStrings.add(qualifiedNameString); + for (var resourceDescription : resourceDescriptions) { + for (var description : resourceDescription.getExportedObjectsByType(ProblemPackage.Literals.RELATION)) { + if (ProblemResourceDescriptionStrategy.COLOR_RELATION_TRUE.equals( + description.getUserData(ProblemResourceDescriptionStrategy.COLOR_RELATION))) { + var qualifiedNameString = qualifiedNameConverter.toString(description.getQualifiedName()); + qualifiedNameStrings.add(qualifiedNameString); + } } } var stringList = new ArrayList<>(qualifiedNameStrings); @@ -90,4 +101,30 @@ public class TypeHashProvider { } return mapBuilder.build(); } + + private List getResourceDescriptions(Problem problem) { + var resource = problem.eResource(); + if (resource == null) { + return List.of(); + } + var resourceDescriptions = new ArrayList(); + var resourceDescription = globalResourceDescriptionProvider.getResourceDescription(resource); + if (resourceDescription != null) { + resourceDescriptions.add(resourceDescription); + } + var resourceSet = resource.getResourceSet(); + if (resourceSet != null) { + for (var importedUri : importCollector.getAllImports(resource).toUriSet()) { + var importedResource = resourceSet.getResource(importedUri, false); + if (importedResource != null) { + var importedResourceDescription = globalResourceDescriptionProvider.getResourceDescription( + importedResource); + if (importedResourceDescription != null) { + resourceDescriptions.add(importedResourceDescription); + } + } + } + } + return resourceDescriptions; + } } -- cgit v1.2.3-54-g00ecf