package jetbrains.mps.ide.findusages.findalgorithm.finders; /*Generated by MPS */ import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.annotations.Nullable; import org.jetbrains.mps.openapi.model.SNodeReference; import org.jetbrains.mps.openapi.model.SModelReference; import jetbrains.mps.smodel.SNodePointer; import org.jetbrains.mps.openapi.persistence.PersistenceFacade; import org.jetbrains.mps.openapi.module.SearchScope; import java.util.List; import org.jetbrains.mps.openapi.util.ProgressMonitor; import jetbrains.mps.ide.findusages.model.SearchResults; import jetbrains.mps.ide.findusages.model.SearchQuery; import org.jetbrains.mps.openapi.language.SAbstractConcept; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import jetbrains.mps.ide.findusages.model.SearchResult; public abstract class GeneratedFinder implements IInterfacedFinder { private static final Logger LOG = LogManager.getLogger(GeneratedFinder.class); public GeneratedFinder() { } @Override public boolean isApplicable(SNode node) { return true; } @Override public boolean isVisible(SNode node) { return true; } @Override public boolean isUsedByDefault(SNode node) { return false; } @Override public String getLongDescription() { return ""; } @Nullable public SNodeReference getDeclarationNode() { return null; } protected SNodeReference buildNodePointer(SModelReference modelRef, String nodeId) { // auxiliary method to help generated code deal with string node id values return new SNodePointer(modelRef, PersistenceFacade.getInstance().createNodeId(nodeId)); } @Override public boolean canNavigate() { return true; } protected abstract void doFind(SNode node, SearchScope scope, List<SNode> _results, ProgressMonitor monitor); public void getSearchedNodes(SNode node, SearchScope scope, List<SNode> _results) { _results.add(node); } public String getNodeCategory(SNode node) { return "Uncategorized"; } @Override public SearchResults<SNode> find(SearchQuery query, ProgressMonitor monitor) { SearchResults<SNode> results = new SearchResults<SNode>(); Object value = query.getObjectHolder().getObject(); SNode node = null; if (value instanceof SNodeReference) { node = query.getSearchObjectResolver().resolve((SNodeReference) value); } else if (value instanceof SNode) { node = (SNode) value; } if (node == null) { return results; } SAbstractConcept c = getSConcept(); if (node.getConcept().isSubConceptOf(c) && isApplicable(node)) { List<SNode> resSN = ListSequence.fromList(new ArrayList<SNode>()); getSearchedNodes(node, query.getScope(), resSN); for (SNode resnode : resSN) { results.getSearchedNodes().add(resnode); } List<SNode> res = new ArrayList<SNode>(); doFind(node, query.getScope(), res, monitor); for (SNode resnode : res) { results.getSearchResults().add(new SearchResult<SNode>(resnode, getNodeCategory(resnode))); } } else { LOG.debug("Trying to use finder that is not applicable to the concept. Returning empty results.[finder: \"" + getDescription() + "\"; " + "concept: " + node.getConcept().getQualifiedName()); } return results; } }