/**
   * Adds the specified method binding to the search results.
   *
   * @param calledMethodBinding
   * @param node
   */
  protected void addMethodCall(IMethodBinding calledMethodBinding, ASTNode node) {
    try {
      if (calledMethodBinding != null) {
        fProgressMonitor.worked(1);

        ITypeBinding calledTypeBinding = calledMethodBinding.getDeclaringClass();
        IType calledType = null;

        if (!calledTypeBinding.isAnonymous()) {
          calledType = (IType) calledTypeBinding.getJavaElement();
        } else {
          if (!"java.lang.Object"
              .equals(calledTypeBinding.getSuperclass().getQualifiedName())) { // $NON-NLS-1$
            calledType = (IType) calledTypeBinding.getSuperclass().getJavaElement();
          } else {
            calledType = (IType) calledTypeBinding.getInterfaces()[0].getJavaElement();
          }
        }

        IMethod calledMethod =
            findIncludingSupertypes(calledMethodBinding, calledType, fProgressMonitor);

        IMember referencedMember = null;
        if (calledMethod == null) {
          if (calledMethodBinding.isConstructor()
              && calledMethodBinding.getParameterTypes().length == 0) {
            referencedMember = calledType;
          }
        } else {
          if (calledType.isInterface()) {
            calledMethod = findImplementingMethods(calledMethod);
          }

          if (!isIgnoredBySearchScope(calledMethod)) {
            referencedMember = calledMethod;
          }
        }
        final int position = node.getStartPosition();
        final int number = fCompilationUnit.getLineNumber(position);
        fSearchResults.addMember(
            fMember,
            referencedMember,
            position,
            position + node.getLength(),
            number < 1 ? 1 : number);
      }
    } catch (JavaModelException jme) {
      JavaPlugin.log(jme);
    }
  }
  @Override
  public void acceptSearchMatch(SearchMatch match) {
    if (fRequireExactMatch && (match.getAccuracy() != SearchMatch.A_ACCURATE)) {
      return;
    }

    if (match.isInsideDocComment()) {
      return;
    }

    if (match.getElement() != null && match.getElement() instanceof IMember) {
      IMember member = (IMember) match.getElement();
      switch (member.getElementType()) {
        case IJavaElement.METHOD:
        case IJavaElement.TYPE:
        case IJavaElement.FIELD:
        case IJavaElement.INITIALIZER:
          fSearchResults.addMember(
              member, member, match.getOffset(), match.getOffset() + match.getLength());
          break;
      }
    }
  }
 public Map<String, MethodCall> getCallers() {
   return fSearchResults.getCallers();
 }
 /** @return a map from handle identifier ({@link String}) to {@link MethodCall} */
 public Map getCallees() {
   return fSearchResults.getCallers();
 }