@NotNull
  public List<RPackage> getContainingPackages(String functionName) {
    List<RPackage> funPackages = Lists.newArrayList();

    for (RPackage rPackage : getPackages()) {
      if (rPackage.hasFunction(functionName)) {
        funPackages.add(rPackage);
      }
    }

    return funPackages;
  }
  public static List<Function> getFunctionByName(
      String funName, @Nullable Collection<RPackage> importedPackages) {

    RPackageService packageService = RPackageService.getInstance();

    if (packageService == null) return Collections.emptyList();

    // if the user didn't import anything do a global search todo: does this make sense???
    if (importedPackages == null) {
      importedPackages = packageService.getPackages();
    } else {
      importedPackages = addImportDependencies(importedPackages);
    }

    List<Function> funs = new ArrayList<Function>();
    for (RPackage importedPackage : importedPackages) {
      if (importedPackage.hasFunction(funName)) funs.add(importedPackage.getFunction(funName));
    }

    return funs;
  }