/**
  * @param string $entityClass
  * @param string $field
  * @param bool   $allowExtendedFields
  *
  * @return bool
  *
  * @SuppressWarnings(PHPMD.NPathComplexity)
  */
 protected function isApplicableField($entityClass, $field, $allowExtendedFields)
 {
     if (!$this->dataAccessor->hasGetter($entityClass, $field)) {
         return false;
     }
     $fieldModel = $this->configManager->getConfigFieldModel($entityClass, $field);
     if (!$fieldModel) {
         // this serializer works with non configurable entities as well
         return true;
     }
     if ($fieldModel->getMode() === ConfigModelManager::MODE_HIDDEN) {
         // exclude hidden fields
         return false;
     }
     $extendConfigProvider = $this->configManager->getProvider('extend');
     $extendConfig = $extendConfigProvider->getConfig($entityClass, $field);
     if (!$allowExtendedFields && $extendConfig->is('is_extend')) {
         // exclude extended fields if it is requested
         return false;
     }
     if ($extendConfig->is('is_deleted') || $extendConfig->is('state', ExtendScope::STATE_NEW)) {
         // exclude deleted and not created yet fields
         return false;
     }
     if ($extendConfig->has('target_entity') && $extendConfigProvider->getConfig($extendConfig->get('target_entity'))->is('is_deleted')) {
         // exclude associations with deleted custom entities
         return false;
     }
     return true;
 }