Program: 34336
Project: 34336
Buggy source:
/** 
 * handle either a method invocation or a 'new' invocation
 * @param state visitor state
 * @param methodSymbol symbol for invoked method
 * @param actualParams parameters passed at call
 * @return description of error or NO_MATCH if no error
 */
private Description handleInvocation(VisitorState state,Symbol.MethodSymbol methodSymbol,List<? extends ExpressionTree> actualParams){
  ImmutableSet<Integer> nonNullPositions=null;
  if (fromUnannotatedPackage(methodSymbol)) {
    nonNullPositions=handler.onUnannotatedInvocationGetNonNullPositions(this,state,methodSymbol,actualParams,ImmutableSet.of());
  }
  if (nonNullPositions == null) {
    ImmutableSet.Builder<Integer> builder=ImmutableSet.builder();
    List<VarSymbol> formalParams=methodSymbol.getParameters();
    for (int i=0; i < formalParams.size(); i++) {
      if (i == formalParams.size() - 1 && methodSymbol.isVarArgs()) {
        continue;
      }
      VarSymbol param=formalParams.get(i);
      if (param.type.isPrimitive()) {
        Description unboxingCheck=doUnboxingCheck(state,actualParams.get(i));
        if (unboxingCheck != Description.NO_MATCH) {
          return unboxingCheck;
        }
 else {
          continue;
        }
      }
      boolean nullable=Nullness.hasNullableAnnotation(param);
      if (!nullable) {
        builder.add(i);
      }
    }
    nonNullPositions=builder.build();
  }
  if (nonNullPositions.isEmpty()) {
    return Description.NO_MATCH;
  }
  for (  int argPos : nonNullPositions) {
    ExpressionTree actual=actualParams.get(argPos);
    if (mayBeNullExpr(state,actual)) {
      String message="String_Node_Str" + actual.toString() + "String_Node_Str";
      return createErrorDescriptionForNullAssignment(MessageTypes.PASS_NULLABLE,actual,message,actual,state.getPath());
    }
  }
  return Description.NO_MATCH;
}

Fixed version (ground truth):
/** 
 * handle either a method invocation or a 'new' invocation
 * @param state visitor state
 * @param methodSymbol symbol for invoked method
 * @param actualParams parameters passed at call
 * @return description of error or NO_MATCH if no error
 */
private Description handleInvocation(VisitorState state,Symbol.MethodSymbol methodSymbol,List<? extends ExpressionTree> actualParams){
  ImmutableSet<Integer> nonNullPositions=null;
  if (NullabilityUtil.fromUnannotatedPackage(methodSymbol,config)) {
    nonNullPositions=handler.onUnannotatedInvocationGetNonNullPositions(this,state,methodSymbol,actualParams,ImmutableSet.of());
  }
  if (nonNullPositions == null) {
    ImmutableSet.Builder<Integer> builder=ImmutableSet.builder();
    List<VarSymbol> formalParams=methodSymbol.getParameters();
    for (int i=0; i < formalParams.size(); i++) {
      if (i == formalParams.size() - 1 && methodSymbol.isVarArgs()) {
        continue;
      }
      VarSymbol param=formalParams.get(i);
      if (param.type.isPrimitive()) {
        Description unboxingCheck=doUnboxingCheck(state,actualParams.get(i));
        if (unboxingCheck != Description.NO_MATCH) {
          return unboxingCheck;
        }
 else {
          continue;
        }
      }
      boolean nullable=Nullness.hasNullableAnnotation(param);
      if (!nullable) {
        builder.add(i);
      }
    }
    nonNullPositions=builder.build();
  }
  if (nonNullPositions.isEmpty()) {
    return Description.NO_MATCH;
  }
  for (  int argPos : nonNullPositions) {
    ExpressionTree actual=actualParams.get(argPos);
    if (mayBeNullExpr(state,actual)) {
      String message="String_Node_Str" + actual.toString() + "String_Node_Str";
      return createErrorDescriptionForNullAssignment(MessageTypes.PASS_NULLABLE,actual,message,actual,state.getPath());
    }
  }
  return Description.NO_MATCH;
}