public void processQuery()

in src/org/jetbrains/plugins/ipnb/psi/IpnbSearchExecutor.java [25:55]


  public void processQuery(@NotNull final ReferencesSearch.SearchParameters queryParameters, @NotNull final Processor<? super PsiReference> consumer) {
    final SearchScope scope = queryParameters.getEffectiveSearchScope();
    if (scope instanceof LocalSearchScope) return;
    final PsiElement element = queryParameters.getElementToSearch();
    if (!(element instanceof IpnbPyTargetExpression) && !(element instanceof IpnbPyFunction)) {
      return;
    }
    final PsiFile file = element.getContainingFile();
    if (file instanceof IpnbPyFragment) {
      final IpnbFilePanel panel = ((IpnbPyFragment)file).getFilePanel();
      final List<IpnbEditablePanel> panels = panel.getIpnbPanels();

      for (IpnbEditablePanel editablePanel : panels) {
        if (!(editablePanel instanceof IpnbCodePanel)) continue;
        final Editor editor = ((IpnbCodePanel)editablePanel).getEditor();
        final IpnbPyFragment psiFile = (IpnbPyFragment)PsiDocumentManager.getInstance(element.getProject()).getPsiFile(editor.getDocument());
        if (psiFile == null) continue;
        psiFile.accept(new PyRecursiveElementVisitor() {
          @Override
          public void visitPyElement(PyElement node) {
            super.visitElement(node);
            final PsiReference reference = node.getReference();
            if (reference == null) return;
            if (element.equals(reference.resolve())) {
              consumer.process(reference);
            }
          }
        });
      }
    }
  }