| package com.intellij.psi.impl.search; |
| |
| import com.intellij.openapi.application.QueryExecutorBase; |
| import com.intellij.openapi.util.text.StringUtil; |
| import com.intellij.openapi.vfs.VirtualFile; |
| import com.intellij.psi.PsiElement; |
| import com.intellij.psi.PsiFileSystemItem; |
| import com.intellij.psi.PsiNamedElement; |
| import com.intellij.psi.PsiReference; |
| import com.intellij.psi.impl.SyntheticFileSystemItem; |
| import com.intellij.psi.meta.PsiMetaData; |
| import com.intellij.psi.meta.PsiMetaOwner; |
| import com.intellij.psi.search.SearchScope; |
| import com.intellij.psi.search.searches.ReferencesSearch; |
| import com.intellij.util.Processor; |
| import org.jetbrains.annotations.NotNull; |
| |
| /** |
| * @author max |
| */ |
| public class CachesBasedRefSearcher extends QueryExecutorBase<PsiReference, ReferencesSearch.SearchParameters> { |
| public CachesBasedRefSearcher() { |
| super(true); |
| } |
| |
| @Override |
| public void processQuery(@NotNull ReferencesSearch.SearchParameters p, @NotNull Processor<PsiReference> consumer) { |
| final PsiElement refElement = p.getElementToSearch(); |
| |
| String text = null; |
| if (refElement instanceof PsiFileSystemItem && !(refElement instanceof SyntheticFileSystemItem)) { |
| final VirtualFile vFile = ((PsiFileSystemItem)refElement).getVirtualFile(); |
| if (vFile != null) { |
| text = vFile.getNameWithoutExtension(); |
| } |
| } |
| else if (refElement instanceof PsiNamedElement) { |
| text = ((PsiNamedElement)refElement).getName(); |
| if (refElement instanceof PsiMetaOwner) { |
| final PsiMetaData metaData = ((PsiMetaOwner)refElement).getMetaData(); |
| if (metaData != null) text = metaData.getName(); |
| } |
| } |
| |
| if (text == null && refElement instanceof PsiMetaOwner) { |
| final PsiMetaData metaData = ((PsiMetaOwner)refElement).getMetaData(); |
| if (metaData != null) text = metaData.getName(); |
| } |
| if (StringUtil.isNotEmpty(text)) { |
| final SearchScope searchScope = p.getEffectiveSearchScope(); |
| p.getOptimizer().searchWord(text, searchScope, refElement.getLanguage().isCaseSensitive(), refElement); |
| } |
| } |
| } |