public static function getPropertiesToInitialize($properties, $annotationReader)
    {
        $propertiesValues = array();

        foreach ($properties as $propertyName => $property) {
            $initializeAnnotation = $annotationReader->getPropertyAnnotation($property, self::$initializeAnnotationClass);
            $initializeObjectAnnotation = $annotationReader->getPropertyAnnotation($property, self::$initializeObjectAnnotationClass);

            if ($initializeAnnotation !== null && $initializeObjectAnnotation !== null) {
                throw new \LogicException("Two initial values are given for property $propertyName.");
            }

            if ($initializeAnnotation !== null) {
                $propertiesValues[$propertyName] = array(
                    'type' => 'initialize',
                    'value' => $initializeAnnotation->getValue()
                );
            } else if ($initializeObjectAnnotation !== null) {
                $propertiesValues[$propertyName] = array(
                    'type' => 'initializeObject',
                    'value' => $initializeObjectAnnotation->getClassName()
                );
            }
        }

        return $propertiesValues;
    }