private void handleInferenceInitializationResult(CycList data) {
    if (data.size() != 3) {
      throw new RuntimeException("Got wrong number of arguments " + "from inference result (expected 3): " + data);
    }
    Object problemStoreObj = data.get(1);
    Object inferenceObj = data.get(2);
    if ((problemStoreObj == null) || (!(problemStoreObj instanceof Number))) {
      throw new RuntimeException("Got bad inference problem store id: " + problemStoreObj);
    }
    if ((inferenceObj == null) || (!(inferenceObj instanceof Number))) {
      throw new RuntimeException("Got bad inference id: " + inferenceObj);
    }
    problemStoreId = ((Number) problemStoreObj).intValue();
    inferenceId = ((Number) inferenceObj).intValue();
    List<Exception> errors = new ArrayList<Exception>();
    Object[] curListeners = getInferenceListeners();
    for (int i = curListeners.length - 1; i >= 0; i -= 1) {
      try {
        ((InferenceWorkerListener) curListeners[i]).notifyInferenceCreated(this);
      } catch (Exception e) {
        errors.add(e);
      }
    }
    if (errors.size() > 0) {
      throw new RuntimeException(errors.get(0)); // @hack
    }
  }