Program: 144058
Project: 144058
Buggy source:
private void performIterationUpdates(){
  previousPoint=currentPoint;
  previousGradient=currentGradient;
  previousObjectiveValue=currentObjectiveValue;
  Vector variableCopiesSum=Vectors.build(currentPoint.size(),currentPoint.type());
  List<Callable<Object>> subProblemTasks=new ArrayList<>();
  for (int subProblemIndex=0; subProblemIndex < objective.getNumberOfTerms(); subProblemIndex++) {
    int[] variableIndexes=objective.getTermVariables(subProblemIndex);
    final int currentSubProblemIndex=subProblemIndex;
    subProblemTasks.add(Executors.callable(() -> solveSubProblem(currentSubProblemIndex,variableIndexes,variableCopiesSum)));
  }
  for (int constraintIndex=0; constraintIndex < constraints.size(); constraintIndex++) {
    int[] variableIndexes=constraintsVariablesIndexes.get(constraintIndex);
    final int currentConstraintIndex=constraintIndex;
    subProblemTasks.add(Executors.callable(() -> projectOnConstraint(currentConstraintIndex,variableIndexes,variableCopiesSum)));
  }
  try {
    taskExecutor.invokeAll(subProblemTasks);
  }
 catch (  InterruptedException e) {
    logger.error("String_Node_Str");
  }
  currentPoint=variableCopiesSum.divElementwise(variableCopiesCounts);
  for (int variableIndex=0; variableIndex < currentPoint.size(); variableIndex++)   if (currentPoint.get(variableIndex) < 0)   currentPoint.set(variableIndex,0);
 else   if (currentPoint.get(variableIndex) > 1)   currentPoint.set(variableIndex,1);
  currentGradient=objective.getGradient(currentPoint);
  currentObjectiveValue=objective.getValue(currentPoint);
}

Fixed version (ground truth):
private void performIterationUpdates(){
  previousPoint=currentPoint;
  previousGradient=currentGradient;
  previousObjectiveValue=currentObjectiveValue;
  Vector variableCopiesSum=Vectors.build(currentPoint.size(),currentPoint.type());
  List<Callable<Object>> subProblemTasks=new ArrayList<>();
  for (int subProblemIndex=0; subProblemIndex < objective.getNumberOfTerms(); subProblemIndex++) {
    int[] variableIndexes=objective.getTermVariables(subProblemIndex);
    final int currentSubProblemIndex=subProblemIndex;
    subProblemTasks.add(Executors.callable(() -> solveSubProblem(currentSubProblemIndex,variableIndexes,variableCopiesSum)));
  }
  final int numberOfObjectiveTerms=objective.getNumberOfTerms();
  for (int constraintIndex=0; constraintIndex < constraints.size(); constraintIndex++) {
    int[] variableIndexes=constraintsVariablesIndexes.get(constraintIndex);
    final int currentConstraintIndex=constraintIndex;
    subProblemTasks.add(Executors.callable(() -> projectOnConstraint(currentConstraintIndex,numberOfObjectiveTerms,variableIndexes,variableCopiesSum)));
  }
  try {
    taskExecutor.invokeAll(subProblemTasks);
  }
 catch (  InterruptedException e) {
    logger.error("String_Node_Str");
  }
  currentPoint=variableCopiesSum.divElementwise(variableCopiesCounts);
  for (int variableIndex=0; variableIndex < currentPoint.size(); variableIndex++)   if (currentPoint.get(variableIndex) < 0)   currentPoint.set(variableIndex,0);
 else   if (currentPoint.get(variableIndex) > 1)   currentPoint.set(variableIndex,1);
  currentGradient=objective.getGradient(currentPoint);
  currentObjectiveValue=objective.getValue(currentPoint);
}