Program: 91194
Project: 91194
Buggy source:
public Symbol<?> findSymbol(String name,SymbolType scope,SymbolType[] args,ReferenceType... referenceType){
  Symbol<?> result=null;
  if (args == null) {
    return findSymbol(name,referenceType);
  }
 else {
    List<Symbol<?>> values=symbols.get(name);
    if (values != null) {
      Iterator<Symbol<?>> it=values.iterator();
      Map<Integer,Executable> execs=new HashMap<Integer,Executable>();
      int i=0;
      while (it.hasNext()) {
        Symbol<?> symbol=it.next();
        if (symbol instanceof MethodSymbol) {
          MethodSymbol aux=(MethodSymbol)symbol;
          Executable m=aux.getReferencedMethod();
          if (m == null) {
            m=aux.getReferencedConstructor();
          }
          if (m != null) {
            execs.put(i,m);
          }
        }
        i++;
      }
      if (execs.isEmpty()) {
        result=null;
      }
 else       if (execs.size() == 1) {
        result=values.get(execs.keySet().iterator().next());
      }
 else {
        Executable[] methods=new Executable[execs.size()];
        List<Executable> sortedMethods=sorter.sort(execs.values().toArray(methods),SymbolType.toClassArray(args));
        ArrayFilter<Executable> filter=new ArrayFilter<Executable>(sortedMethods.toArray(methods));
        CompatibleArgsPredicate<Executable> cap=new CompatibleArgsPredicate<Executable>(args);
        cap.setTypeMapping(getTypeParams());
        filter.appendPredicate(cap);
        Executable exec=null;
        ;
        try {
          exec=filter.filterOne();
        }
 catch (        Exception e) {
          throw new RuntimeException(e);
        }
        Set<Integer> keys=execs.keySet();
        Iterator<Integer> itKeys=keys.iterator();
        while (itKeys.hasNext() && result == null) {
          Integer key=itKeys.next();
          if (execs.get(key) == exec) {
            result=values.get(key);
          }
        }
      }
    }
    if (result == null) {
      values=symbols.get("String_Node_Str");
      if (values != null) {
        Scope innerScope=values.get(0).getInnerScope();
        if (innerScope != null) {
          result=innerScope.findSymbol(name,scope,args,referenceType);
        }
      }
    }
    if (result != null) {
      MethodSymbol sm=(MethodSymbol)result;
      result=sm.buildTypeParameters(typeParams);
    }
  }
  return result;
}

Fixed version (ground truth):
public Symbol<?> findSymbol(String name,SymbolType scope,SymbolType[] args,List<Predicate<?>> predicates,ReferenceType... referenceType){
  Symbol<?> result=null;
  if (args == null) {
    return findSymbol(name,referenceType);
  }
 else {
    List<Symbol<?>> values=symbols.get(name);
    if (values != null) {
      Iterator<Symbol<?>> it=values.iterator();
      Map<Integer,Executable> execs=new HashMap<Integer,Executable>();
      int i=0;
      while (it.hasNext()) {
        Symbol<?> symbol=it.next();
        if (symbol instanceof MethodSymbol) {
          MethodSymbol aux=(MethodSymbol)symbol;
          Executable m=aux.getReferencedMethod();
          if (m == null) {
            m=aux.getReferencedConstructor();
          }
          if (m != null) {
            execs.put(i,m);
          }
        }
        i++;
      }
      if (execs.isEmpty()) {
        result=null;
      }
 else {
        Executable exec=runPredicates(predicates,execs,args);
        Set<Integer> keys=execs.keySet();
        Iterator<Integer> itKeys=keys.iterator();
        while (itKeys.hasNext() && result == null) {
          Integer key=itKeys.next();
          if (execs.get(key) == exec) {
            result=values.get(key);
          }
        }
      }
    }
    if (result == null) {
      values=symbols.get("String_Node_Str");
      if (values != null) {
        Scope innerScope=values.get(0).getInnerScope();
        if (innerScope != null) {
          result=innerScope.findSymbol(name,scope,args,predicates,referenceType);
        }
      }
    }
    if (result != null) {
      MethodSymbol sm=(MethodSymbol)result;
      result=sm.buildTypeParameters(typeParams);
    }
  }
  return result;
}