/**
  * @param $modelToReportAdapter
  * @param $modelAttributeToDataProviderAdapter
  * @param string $modelClassName
  * @param string $realAttributeName
  */
 protected function resolveCastingHintForAttribute($modelToReportAdapter, $modelAttributeToDataProviderAdapter, $modelClassName, $realAttributeName)
 {
     assert('$modelToReportAdapter instanceof ModelRelationsAndAttributesToReportAdapter');
     if ($this->isDisplayAttributeMadeViaSelect()) {
         return parent::resolveCastingHintForAttribute($modelToReportAdapter, $modelAttributeToDataProviderAdapter, $modelClassName, $realAttributeName);
     }
 }
 /**
  * In the event $modelToReportAdapter is summable and is a calculated group by modifier, unlike
  * DisplayAttributeReportItemQueryBuilder->makeModelAttributeToDataProviderAdapter, we do not need to
  * resolve the relatedAttribute when creating the RedBeanModelAttributeToDataProviderAdapter since currently
  * the attributes can only be date or dateTime.
  * @param $modelToReportAdapter
  * @param string $attribute
  * @return DerivedRelationViaCastedUpRedBeanModelAttributeToDataProviderAdapter |
  * ReadOptimizationDerivedAttributeToDataProviderAdapter | RedBeanModelAttributeToDataProviderAdapter
  */
 protected function makeModelAttributeToDataProviderAdapter($modelToReportAdapter, $attribute)
 {
     assert('$modelToReportAdapter instanceof ModelRelationsAndAttributesToReportAdapter');
     assert('is_string($attribute)');
     if ($modelToReportAdapter->isAttributeReadOptimization($attribute)) {
         return new ReadOptimizationDerivedAttributeToDataProviderAdapter($modelToReportAdapter->getModelClassName(), null);
     }
     if ($modelToReportAdapter instanceof ModelRelationsAndAttributesToSummableReportAdapter && $modelToReportAdapter->isAttributeACalculatedGroupByModifier($attribute)) {
         return new RedBeanModelAttributeToDataProviderAdapter($modelToReportAdapter->getModelClassName(), $modelToReportAdapter->resolveRealAttributeName($attribute));
     }
     return parent::makeModelAttributeToDataProviderAdapter($modelToReportAdapter, $attribute);
 }
 /**
  * @param $modelToReportAdapter
  * @param string $attribute
  * @return DerivedRelationViaCastedUpRedBeanModelAttributeToDataProviderAdapter |
  * RedBeanModelAttributeToDataProviderAdapter
  */
 protected function makeModelAttributeToDataProviderAdapter($modelToReportAdapter, $attribute)
 {
     assert('$modelToReportAdapter instanceof ModelRelationsAndAttributesToReportAdapter');
     assert('is_string($attribute)');
     if ($modelToReportAdapter instanceof ModelRelationsAndAttributesToSummableReportAdapter && $modelToReportAdapter->isAttributeACalculationOrModifier($attribute)) {
         $relatedAttribute = static::resolveRelatedAttributeForMakingAdapter($modelToReportAdapter, $attribute);
         return new RedBeanModelAttributeToDataProviderAdapter($modelToReportAdapter->getModelClassName(), $modelToReportAdapter->resolveRealAttributeName($attribute), $relatedAttribute);
     }
     return parent::makeModelAttributeToDataProviderAdapter($modelToReportAdapter, $attribute);
 }