package jetbrains.mps.lang.structure.findUsages; /*Generated by MPS */ import jetbrains.mps.ide.findusages.findalgorithm.finders.GeneratedFinder; import org.jetbrains.mps.openapi.language.SAbstractConcept; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.mps.openapi.module.SearchScope; import java.util.List; import org.jetbrains.mps.openapi.util.ProgressMonitor; import java.util.Set; import jetbrains.mps.internal.collections.runtime.SetSequence; import java.util.HashSet; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.internal.collections.runtime.ListSequence; import jetbrains.mps.ide.findusages.view.FindUtils; import jetbrains.mps.internal.collections.runtime.Sequence; import org.jetbrains.mps.openapi.model.SReference; import org.jetbrains.annotations.Nullable; import org.jetbrains.mps.openapi.model.SNodeReference; public class LinkInstances_Finder extends GeneratedFinder { public LinkInstances_Finder() { } @Override public String getDescription() { return "Link Instances"; } @Override public String getLongDescription() { return ""; } @Override public SAbstractConcept getSConcept() { return MetaAdapterFactory.getConcept(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0xf979bd086aL, "jetbrains.mps.lang.structure.structure.LinkDeclaration"); } @Override protected void doFind(SNode node, SearchScope scope, List<SNode> _results, ProgressMonitor monitor) { try { // collect roles Set<String> roles = SetSequence.fromSet(new HashSet<String>()); SNode curNode = node; do { SetSequence.fromSet(roles).addElement(SPropertyOperations.getString(curNode, MetaAdapterFactory.getProperty(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0xf979bd086aL, 0xf98052f333L, "role"))); curNode = SLinkOperations.getTarget(curNode, MetaAdapterFactory.getReferenceLink(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0xf979bd086aL, 0xf98051c244L, "specializedLink")); } while (curNode != null); // find concept SNode conceptDeclaration = SNodeOperations.getNodeAncestor(node, MetaAdapterFactory.getConcept(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0x1103553c5ffL, "jetbrains.mps.lang.structure.structure.AbstractConceptDeclaration"), false, false); if ((conceptDeclaration == null)) { return; } boolean isChild = SPropertyOperations.hasValue(node, MetaAdapterFactory.getProperty(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0xf979bd086aL, 0xf980556927L, "metaClass"), "aggregation", "reference"); // find instances and link examples for (SNode instance : ListSequence.fromList(FindUtils.executeFinder("jetbrains.mps.lang.structure.findUsages.ConceptInstances_Finder", conceptDeclaration, scope, monitor))) { for (String role : roles) { if (isChild) { for (SNode child : Sequence.fromIterable(instance.getChildren(role))) { ListSequence.fromList(_results).addElement(child); } } else { SReference reference = instance.getReference(role); if (reference != null) { ListSequence.fromList(_results).addElement(reference.getSourceNode()); } } } } } finally { monitor.done(); } } @Override public String getNodeCategory(SNode node) { return "Link Instances"; } @Nullable @Override public SNodeReference getDeclarationNode() { return buildNodePointer(FindUsagesDescriptor.DECLARING_MODEL, "1201275992898"); } }