Program: 60118
Project: 60118
Buggy source:
private void testEqualsUsing(final Invokable<?,?> factory) throws ParameterNotInstantiableException, ParameterHasNoDistinctValueException, IllegalAccessException, InvocationTargetException, FactoryMethodReturnsNullException {
  List<Parameter> params=factory.getParameters();
  List<FreshValueGenerator> argGenerators=Lists.newArrayListWithCapacity(params.size());
  List<Object> args=Lists.newArrayListWithCapacity(params.size());
  for (  Parameter param : params) {
    FreshValueGenerator generator=newFreshValueGenerator();
    argGenerators.add(generator);
    args.add(generateDummyArg(param,generator));
  }
  Object instance=createInstance(factory,args);
  List<Object> equalArgs=generateEqualFactoryArguments(factory,params,args);
  final List<List<List<Object>>> argGroups=Lists.newArrayList();
  argGroups.add(ImmutableList.of(args,equalArgs));
  EqualsTester tester=new EqualsTester(new ItemReporter(){
    @Override String reportItem(    Item<?> item){
      List<Object> factoryArgs=argGroups.get(item.groupNumber).get(item.itemNumber);
      return factory.getName() + "String_Node_Str" + Joiner.on("String_Node_Str").useForNull("String_Node_Str").join(factoryArgs)+ "String_Node_Str";
    }
  }
);
  tester.addEqualityGroup(instance,createInstance(factory,equalArgs));
  for (int i=0; i < params.size(); i++) {
    List<Object> newArgs=Lists.newArrayList(args);
    Object newArg=argGenerators.get(i).generate(params.get(i).getType());
    if (newArg == null || Objects.equal(args.get(i),newArg)) {
      if (params.get(i).getType().getRawType().isEnum()) {
        continue;
      }
      throw new ParameterHasNoDistinctValueException(params.get(i));
    }
    newArgs.set(i,newArg);
    tester.addEqualityGroup(createInstance(factory,newArgs));
    argGroups.add(ImmutableList.of(newArgs));
  }
  tester.testEquals();
}

Fixed version (ground truth):
private void testEqualsUsing(final Invokable<?,?> factory) throws ParameterNotInstantiableException, ParameterHasNoDistinctValueException, IllegalAccessException, InvocationTargetException, FactoryMethodReturnsNullException {
  List<Parameter> params=factory.getParameters();
  List<FreshValueGenerator> argGenerators=Lists.newArrayListWithCapacity(params.size());
  List<Object> args=Lists.newArrayListWithCapacity(params.size());
  for (  Parameter param : params) {
    FreshValueGenerator generator=newFreshValueGenerator();
    argGenerators.add(generator);
    args.add(generateDummyArg(param,generator));
  }
  Object instance=createInstance(factory,args);
  List<Object> equalArgs=generateEqualFactoryArguments(factory,params,args);
  final List<List<List<Object>>> argGroups=Lists.newArrayList();
  argGroups.add(ImmutableList.of(args,equalArgs));
  EqualsTester tester=new EqualsTester(new ItemReporter(){
    @Override String reportItem(    Item<?> item){
      List<Object> factoryArgs=argGroups.get(item.groupNumber).get(item.itemNumber);
      return factory.getName() + "String_Node_Str" + Joiner.on("String_Node_Str").useForNull("String_Node_Str").join(factoryArgs)+ "String_Node_Str";
    }
  }
);
  tester.addEqualityGroup(instance,createInstance(factory,equalArgs));
  for (int i=0; i < params.size(); i++) {
    List<Object> newArgs=Lists.newArrayList(args);
    Object newArg=argGenerators.get(i).generateFresh(params.get(i).getType());
    if (newArg == null || Objects.equal(args.get(i),newArg)) {
      if (params.get(i).getType().getRawType().isEnum()) {
        continue;
      }
      throw new ParameterHasNoDistinctValueException(params.get(i));
    }
    newArgs.set(i,newArg);
    tester.addEqualityGroup(createInstance(factory,newArgs));
    argGroups.add(ImmutableList.of(newArgs));
  }
  tester.testEquals();
}