code: public static void checkWave(final Wave wave) {
          if (CoreParameters.DEVELOPER_MODE.get()) {
              if (wave.waveType() != null) {
  
                  // List missing wave items not held by WaveData wrapper
                  final List<WaveItem<?>> missingWaveItems = new ArrayList<>();
                  for (final WaveItem<?> item : wave.waveType().items()) {
  
                      if (!wave.contains(item)) {
                          missingWaveItems.add(item);
                      }
  
                  }
  
                  // Check provided WaveBean (if any) EXPERIMENTAL FIXME
                  // if (wave.waveBean() != null) {
                  //
                  // // Check that WaveItem not present into WaveData wrapper are available into available WaveBean
                  // for (int i = missingWaveItems.size() - 1; i >= 0; i--) {
                  // final WaveItem<?> missing = missingWaveItems.get(i);
                  //
                  // if (missing.getName() != null && !missing.getName().isEmpty()) {
                  //
                  // final Field property = ClassUtility.findProperty(wave.waveBean().getClass(), missing.getName(), (Class<?>) missing.getItemType());
                  //
                  // if (property != null) {
                  // missingWaveItems.remove(missing);
                  // }
                  // }
                  // }
                  // }
  
                  // Log informative message and throw an error
                  if (!missingWaveItems.isEmpty()) {
  
                      LOGGER.log(BROKEN_WAVE_SENT, wave.toString());
  
                      // List all missing wave items
                      final StringBuilder sb = new StringBuilder();
                      for (final WaveItem<?> missing : missingWaveItems) {
                          sb.append(missing.toString());
                      }
  
                      LOGGER.log(BROKEN_WAVE_BAD_ITEM_LIST, sb.toString());
  
                      throw new CoreRuntimeException(BROKEN_WAVE_BAD_ITEM_LIST.getText(sb.toString()));
                  }
              }
          }
      }
docs: Check that wave has all data required by the WaveType contract (if any).
  
  Data can be stored into WaveData wrapper or WaveBean
  
  @param wave the wave to check