Program: 303
Project: 303
Buggy source:
/** 
 * Objects for the following classes must be available in the context: <ul> <li>  {@link ModuleEnvironment}</li> <li>  {@link NetworkSystem}</li> <li>  {@link ReflectFactory}</li> <li>  {@link CopyStrategyLibrary}</li> <li>  {@link org.terasology.persistence.typeHandling.TypeSerializationLibrary}</li> </ul> <p> The method will make objects for the following classes available in the context: <ul> <li>  {@link EngineEntityManager}</li> <li>  {@link ComponentLibrary}</li> <li>  {@link EventLibrary}</li> <li>  {@link PrefabManager}</li> <li>  {@link EventSystem}</li> </ul>
 */
public static void addEntityManagementRelatedClasses(Context context){
  ModuleEnvironment environment=context.get(ModuleManager.class).getEnvironment();
  NetworkSystem networkSystem=context.get(NetworkSystem.class);
  PojoEntityManager entityManager=new PojoEntityManager();
  context.put(EntityManager.class,entityManager);
  context.put(EngineEntityManager.class,entityManager);
  TypeSerializationLibrary typeSerializationLibrary=context.get(TypeSerializationLibrary.class);
  typeSerializationLibrary.add(EntityRef.class,new EntityRefTypeHandler(entityManager));
  entityManager.setTypeSerializerLibrary(typeSerializationLibrary);
  PrefabManager prefabManager=new PojoPrefabManager(context);
  entityManager.setPrefabManager(prefabManager);
  context.put(PrefabManager.class,prefabManager);
  EntitySystemLibrary library=context.get(EntitySystemLibrary.class);
  entityManager.setComponentLibrary(library.getComponentLibrary());
  RecordAndReplayUtils recordAndReplayUtils=context.get(RecordAndReplayUtils.class);
  RecordedEventStore recordedEventStore=new RecordedEventStore();
  EntityIdMap entityIdMap=new EntityIdMap();
  context.put(EntityIdMap.class,entityIdMap);
  RecordAndReplaySerializer recordAndReplaySerializer=new RecordAndReplaySerializer(entityManager,recordedEventStore,entityIdMap,recordAndReplayUtils);
  context.put(RecordAndReplaySerializer.class,recordAndReplaySerializer);
  EventSystem eventSystem=createEventSystem(networkSystem,entityManager,library,recordedEventStore,entityIdMap,recordAndReplaySerializer,recordAndReplayUtils);
  entityManager.setEventSystem(eventSystem);
  context.put(EventSystem.class,eventSystem);
  context.put(OneOfProviderFactory.class,new OneOfProviderFactory());
  registerComponents(library.getComponentLibrary(),environment);
  registerEvents(entityManager.getEventSystem(),environment);
}

Fixed version (ground truth):
/** 
 * Objects for the following classes must be available in the context: <ul> <li>  {@link ModuleEnvironment}</li> <li>  {@link NetworkSystem}</li> <li>  {@link ReflectFactory}</li> <li>  {@link CopyStrategyLibrary}</li> <li>  {@link org.terasology.persistence.typeHandling.TypeSerializationLibrary}</li> </ul> <p> The method will make objects for the following classes available in the context: <ul> <li>  {@link EngineEntityManager}</li> <li>  {@link ComponentLibrary}</li> <li>  {@link EventLibrary}</li> <li>  {@link PrefabManager}</li> <li>  {@link EventSystem}</li> </ul>
 */
public static void addEntityManagementRelatedClasses(Context context){
  ModuleEnvironment environment=context.get(ModuleManager.class).getEnvironment();
  NetworkSystem networkSystem=context.get(NetworkSystem.class);
  PojoEntityManager entityManager=new PojoEntityManager();
  context.put(EntityManager.class,entityManager);
  context.put(EngineEntityManager.class,entityManager);
  TypeSerializationLibrary typeSerializationLibrary=context.get(TypeSerializationLibrary.class);
  typeSerializationLibrary.add(EntityRef.class,new EntityRefTypeHandler(entityManager));
  entityManager.setTypeSerializerLibrary(typeSerializationLibrary);
  PrefabManager prefabManager=new PojoPrefabManager(context);
  entityManager.setPrefabManager(prefabManager);
  context.put(PrefabManager.class,prefabManager);
  EntitySystemLibrary library=context.get(EntitySystemLibrary.class);
  entityManager.setComponentLibrary(library.getComponentLibrary());
  RecordAndReplayUtils recordAndReplayUtils=context.get(RecordAndReplayUtils.class);
  CharacterStateEventPositionMap characterStateEventPositionMap=context.get(CharacterStateEventPositionMap.class);
  RecordedEventStore recordedEventStore=new RecordedEventStore();
  EntityIdMap entityIdMap=new EntityIdMap();
  context.put(EntityIdMap.class,entityIdMap);
  RecordAndReplaySerializer recordAndReplaySerializer=new RecordAndReplaySerializer(entityManager,recordedEventStore,entityIdMap,recordAndReplayUtils,characterStateEventPositionMap);
  context.put(RecordAndReplaySerializer.class,recordAndReplaySerializer);
  EventSystem eventSystem=createEventSystem(networkSystem,entityManager,library,recordedEventStore,entityIdMap,recordAndReplaySerializer,recordAndReplayUtils);
  entityManager.setEventSystem(eventSystem);
  context.put(EventSystem.class,eventSystem);
  context.put(OneOfProviderFactory.class,new OneOfProviderFactory());
  registerComponents(library.getComponentLibrary(),environment);
  registerEvents(entityManager.getEventSystem(),environment);
}