protected function createPropertyImplementation($propertyName, $propertyOptions, ClassTypeImplementation $classImplementation) { $propertyImplementation = new PropertyImplementation($propertyName); $targetPropertyName = $propertyName; if (isset($propertyOptions['as'])) { $propertyImplementation->setTargetPropertyName($propertyOptions['as']); $targetPropertyName = $propertyOptions['as']; } // accessors enabled $accessorsEnabled = $classImplementation->isAccessorsEnabled(); if (isset($propertyOptions['accessors']['enabled'])) { $accessorsEnabled = (bool) $propertyOptions['accessors']['enabled']; } // accessors names if (array_key_exists('setter', $propertyOptions)) { $propertyImplementation->setSetter($propertyOptions['setter']); } else { if ($accessorsEnabled) { $style = $classImplementation->getAccessorsStyle(); if (!$style) { $msg = 'Cannot generate setter name for property "' . $propertyName . '". Define that name or naming style of setters and getters'; throw new \BadMethodCallException($msg); } $propertyImplementation->setSetter($style->generateSetterName($targetPropertyName)); } } if (array_key_exists('getter', $propertyOptions)) { $propertyImplementation->setGetter($propertyOptions['getter']); } elseif ($accessorsEnabled) { $style = $classImplementation->getAccessorsStyle(); if (!$style) { $msg = 'Cannot generate getter name for property "' . $propertyName . '". Define that name or naming style of setters and getters'; throw new \BadMethodCallException($msg); } $propertyImplementation->setGetter($style->generateGetterName($targetPropertyName)); } return $propertyImplementation; }