private String getSourceCategory(ResultSourceInfo sourceInfo) {
    if (sourceInfo.getSource().containsInvokeExpr()) {
      InvokeExpr invExpr = sourceInfo.getSource().getInvokeExpr();

      for (SourceSinkDefinition meth : sources) {
        AndroidMethod am = (AndroidMethod) meth.getMethod();
        if (am.getSignature().equals(invExpr.getMethod().getSignature())) {
          return am.getCategory().toString();
        }
      }
    } else if (isSourceInfoParameter(sourceInfo)) {
      return unknownCategory;
    } else throw new RuntimeException("Currently not supported");

    return null;
  }
  /**
   * This method iterates over all sources from the FlowDroid-results and extracts the category of
   * the specific source. If there is no category found, it will return an empty set, otherwise the
   * correct categories will be added.
   *
   * @param sourcesInfo: all possible sources from which we try to identify the category
   * @return: set of categories for specific sink
   */
  private Set<String> getDataIdList(Set<ResultSourceInfo> sourcesInfo) {
    Set<String> dataIdList = new HashSet<String>();
    for (ResultSourceInfo sInfo : sourcesInfo) {
      if (sInfo.getSource().containsInvokeExpr()) {
        InvokeExpr invExpr = sInfo.getSource().getInvokeExpr();

        for (SourceSinkDefinition meth : sources) {
          AndroidMethod am = (AndroidMethod) meth.getMethod();
          if (am.getSignature().equals(invExpr.getMethod().getSignature())) {
            dataIdList.add(am.getCategory().toString());
          }
        }
      } else if (isSourceInfoParameter(sInfo)) {
        dataIdList.add(unknownCategory);
      } else throw new RuntimeException("Currently not supported");
    }

    return dataIdList;
  }