@Override protected Set<String> getStringsToSearch(final PsiElement element) { if (element instanceof PsiDirectory) { // normalize a directory to a corresponding package return getStringsToSearch( JavaDirectoryService.getInstance().getPackage((PsiDirectory) element)); } final Set<String> result = new HashSet<String>(); ApplicationManager.getApplication() .runReadAction( new Runnable() { @Override public void run() { if (element instanceof PsiPackage) { ContainerUtil.addIfNotNull(result, ((PsiPackage) element).getQualifiedName()); } else if (element instanceof PsiClass) { final String qname = ((PsiClass) element).getQualifiedName(); if (qname != null) { result.add(qname); PsiClass topLevelClass = PsiUtil.getTopLevelClass(element); if (topLevelClass != null) { String topName = topLevelClass.getQualifiedName(); assert topName != null; result.add(topName + qname.substring(topName.length()).replace('.', '$')); } } } else if (element instanceof PsiMethod) { ContainerUtil.addIfNotNull(result, ((PsiMethod) element).getName()); } else if (element instanceof PsiVariable) { ContainerUtil.addIfNotNull(result, ((PsiVariable) element).getName()); } else if (element instanceof PsiMetaOwner) { final PsiMetaData metaData = ((PsiMetaOwner) element).getMetaData(); if (metaData != null) { ContainerUtil.addIfNotNull(result, metaData.getName()); } } else if (element instanceof PsiNamedElement) { ContainerUtil.addIfNotNull(result, ((PsiNamedElement) element).getName()); } else if (element instanceof XmlAttributeValue) { ContainerUtil.addIfNotNull(result, ((XmlAttributeValue) element).getValue()); } else { LOG.error("Unknown element type: " + element); } } }); return result; }