package jetbrains.mps.ide.platform.dependencyViewer; /*Generated by MPS */ import java.util.Map; import org.jetbrains.mps.openapi.model.SModel; import java.util.List; import org.jetbrains.mps.openapi.model.SReference; import java.util.HashMap; import jetbrains.mps.ide.findusages.model.SearchResults; import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.mps.openapi.util.ProgressMonitor; import java.util.Set; import java.util.HashSet; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.ide.findusages.model.SearchResult; import org.jetbrains.mps.openapi.language.SConcept; import jetbrains.mps.internal.collections.runtime.Sequence; public class ReferencesFinder { private Map<SModel, List<SReference>> myModelsRefsCache = new HashMap<SModel, List<SReference>>(); public ReferencesFinder() { } public SearchResults findRefsFromScopeToOuter(Iterable<SNode> nodes, DependencyViewerScope scope, ProgressMonitor monitor) { SearchResults results = new SearchResults(); Set<SNode> targets = new HashSet<SNode>(); for (SNode node : nodes) { for (SReference ref : SNodeOperations.getReferences(((SNode) node))) { SNode target = jetbrains.mps.util.SNodeOperations.getTargetNodeSilently(ref); if (target == null) { continue; } if (scope.contains(target)) { continue; } if (targets.add(target)) { results.getSearchResults().add(new SearchResult(target, "target")); } } monitor.advance(1); if (monitor.isCanceled()) { return results; } } return results; } public SearchResults getUsedConcepts(Iterable<SNode> nodes, DependencyViewerScope scope, ProgressMonitor monitor) { SearchResults results = new SearchResults(); Set<SConcept> concepts = new HashSet<SConcept>(); for (SNode node : nodes) { SConcept concept = node.getConcept(); if (concepts.add(concept)) { results.getSearchResults().add(new SearchResult(concept.getDeclarationNode(), "concept")); } monitor.advance(1); if (monitor.isCanceled()) { return results; } } return results; } public SearchResults getRefsBetweenScopes(Iterable<SNode> references, DependencyViewerScope from, DependencyViewerScope to, ProgressMonitor monitor) { SearchResults<SNode> results = new SearchResults<SNode>(); for (SNode node : Sequence.fromIterable(references)) { for (SReference ref : SNodeOperations.getReferences(((SNode) node))) { SNode targetNode = jetbrains.mps.util.SNodeOperations.getTargetNodeSilently(ref); if (targetNode == null) { continue; } if (from.contains(targetNode)) { continue; } if (!(to.contains(targetNode))) { continue; } results.getSearchResults().add(new SearchResult(node, "references")); break; } if (monitor.isCanceled()) { return results; } monitor.advance(1); } return results; } public SearchResults getLanguageUsagesSearchResults(Iterable<SNode> nodes, DependencyViewerScope sourceScope, DependencyViewerScope targetScope, ProgressMonitor monitor) { SearchResults<SNode> results = new SearchResults<SNode>(); for (SNode node : Sequence.fromIterable(nodes)) { SConcept concept = node.getConcept(); // todo replace targetScope.contains with SConcept check if (concept.isValid() && targetScope.contains(concept.getDeclarationNode())) { results.getSearchResults().add(new SearchResult(node, "language")); } if (monitor.isCanceled()) { return results; } monitor.advance(1); } return results; } }