Program: 180301
Project: 180301
Buggy source:
@Override protected SpawnedResult spawnTrajectories(Configuration configuration,Trajectory trajectory,Trajectory neighbor,Distance distance){
  Trajectory newPrimary=neighbor;
  int diffDimension=-1;
  for (int dim=0; dim < trajectory.getDimension(); dim++) {
    if (trajectory.getFirstPoint().getValue(dim) != neighbor.getFirstPoint().getValue(dim)) {
      if (diffDimension != -1) {
        throw new IllegalStateException("String_Node_Str");
      }
      diffDimension=dim;
    }
  }
  float radius=Math.abs(trajectory.getFirstPoint().getValue(diffDimension) - neighbor.getFirstPoint().getValue(diffDimension)) / 2;
  List<Trajectory> neighborTrajectories=new ArrayList<>();
  List<Trajectory> spawnedSecondaryTrajectories=new ArrayList<>();
  for (int dim=0; dim < trajectory.getDimension(); dim++) {
    for (int sign=-1; sign <= 1; sign+=2) {
      float[] newPointData=newPrimary.getFirstPoint().toArrayCopy();
      newPointData[dim]+=sign * radius;
      Trajectory newTrajectory=new PointTrajectory(trajectory.getFirstPoint().getTime(),newPointData);
      if (!configuration.getInitialSpace().isIn(newTrajectory.getFirstPoint())) {
        continue;
      }
synchronized (alreadySpawnedCollisionTrajectories) {
        if (alreadySpawnedCollisionTrajectories.containsKey(newTrajectory.getFirstPoint())) {
          WeakReference<Trajectory> reference=alreadySpawnedCollisionTrajectories.get(newTrajectory.getFirstPoint());
          if (reference.get() != null) {
            newTrajectory=reference.get() instanceof TrajectoryWithNeighborhood ? ((TrajectoryWithNeighborhood)reference.get()).withoutNeighbors() : reference.get();
          }
 else {
            alreadySpawnedCollisionTrajectories.put(newTrajectory.getFirstPoint(),new WeakReferenceWithEquals<>(newTrajectory));
          }
        }
 else {
          alreadySpawnedCollisionTrajectories.put(newTrajectory.getFirstPoint(),new WeakReferenceWithEquals<>(newTrajectory));
          spawnedSecondaryTrajectories.add(newTrajectory);
        }
      }
      neighborTrajectories.add(newTrajectory);
    }
  }
  Collection<TrajectoryWithNeighborhood> spawnedCol=new ArrayList<>();
synchronized (alreadySpawnedPrimaryTrajectories) {
    if (!alreadySpawnedPrimaryTrajectories.containsKey(newPrimary.getFirstPoint())) {
      spawnedCol.add(TrajectoryWithNeighborhoodWrapper.createAndUpdateReference(newPrimary,new ListDataBlock<>(neighborTrajectories)));
      alreadySpawnedPrimaryTrajectories.put(newPrimary.getFirstPoint(),new WeakReferenceWithEquals<>(newPrimary));
    }
  }
  return new SpawnedResult(spawnedCol,spawnedCol.isEmpty() ? Collections.EMPTY_LIST : spawnedSecondaryTrajectories);
}

Fixed version (ground truth):
@Override protected SpawnedResult spawnTrajectories(Configuration configuration,Trajectory trajectory,Trajectory neighbor,Distance distance){
  Trajectory newPrimary=neighbor;
  int diffDimension=-1;
  for (int dim=0; dim < trajectory.getDimension(); dim++) {
    if (trajectory.getFirstPoint().getValue(dim) != neighbor.getFirstPoint().getValue(dim)) {
      if (diffDimension != -1) {
        throw new IllegalStateException("String_Node_Str");
      }
      diffDimension=dim;
    }
  }
  float radius=Math.abs(trajectory.getFirstPoint().getValue(diffDimension) - neighbor.getFirstPoint().getValue(diffDimension)) / 2;
  List<Trajectory> neighborTrajectories=new ArrayList<>();
  List<Trajectory> spawnedSecondaryTrajectories=new ArrayList<>();
  for (int dim=0; dim < trajectory.getDimension(); dim++) {
    for (int sign=-1; sign <= 1; sign+=2) {
      float[] newPointData=newPrimary.getFirstPoint().toArrayCopy();
      newPointData[dim]+=sign * radius;
      Trajectory newTrajectory=new PointTrajectory(trajectory.getFirstPoint().getTime(),newPointData);
      if (!configuration.getInitialSpace().isIn(newTrajectory.getFirstPoint())) {
        continue;
      }
synchronized (alreadySpawnedCollisionTrajectories) {
        if (alreadySpawnedCollisionTrajectories.containsKey(newTrajectory.getFirstPoint())) {
          Trajectory cachedTrajectory=alreadySpawnedCollisionTrajectories.get(newTrajectory.getFirstPoint());
          if (cachedTrajectory != null) {
            newTrajectory=cachedTrajectory.getReference().getTrajectory() instanceof TrajectoryWithNeighborhood ? ((TrajectoryWithNeighborhood)cachedTrajectory.getReference().getTrajectory()).withoutNeighbors() : cachedTrajectory.getReference().getTrajectory();
          }
 else {
            alreadySpawnedCollisionTrajectories.put(newTrajectory.getFirstPoint(),newTrajectory);
          }
        }
 else {
          alreadySpawnedCollisionTrajectories.put(newTrajectory.getFirstPoint(),newTrajectory);
        }
      }
      spawnedSecondaryTrajectories.add(newTrajectory);
      neighborTrajectories.add(newTrajectory);
    }
  }
  Collection<TrajectoryWithNeighborhood> spawnedCol=new ArrayList<>();
synchronized (alreadySpawnedPrimaryTrajectories) {
    if (!alreadySpawnedPrimaryTrajectories.containsKey(newPrimary.getFirstPoint())) {
      spawnedCol.add(TrajectoryWithNeighborhoodWrapper.createAndUpdateReference(newPrimary,new ListDataBlock<>(neighborTrajectories)));
      alreadySpawnedPrimaryTrajectories.put(newPrimary.getFirstPoint(),newPrimary);
    }
  }
  return new SpawnedResult(spawnedCol,spawnedCol.isEmpty() ? Collections.EMPTY_LIST : spawnedSecondaryTrajectories);
}