Bundle/BusinessEntityBundle/Annotation/AnnotationDriver.php
protected function loadBusinessProperties(\ReflectionClass $class)
    {
        $businessProperties = [];
        $properties = $class->getProperties();
        $traits = $class->getTraits();
        $className = $class->getName();
        // if the class is translatable, then parse annotations on it's translation class
        if (array_key_exists(Translatable::class, $traits)) {
            $translation = new \ReflectionClass($className::getTranslationEntityClass());
            $translationProperties = $translation->getProperties();
            $properties = array_merge($properties, $translationProperties);
        }

        foreach ($properties as $property) {
            $annotations = $this->reader->getPropertyAnnotations($property);
            foreach ($annotations as $key => $annotationObj) {
                if ($annotationObj instanceof BusinessProperty && !in_array($class, $businessProperties)) {
                    if (!$annotations[$key]->getTypes()) {
                        $message = $class->name.':$'.$property->name.'" field';

                        throw AnnotationException::requiredError('type', 'BusinessProperty annotation', $message, 'array or string');
                    }
                    foreach ($annotations[$key]->getTypes() as $type) {
                        $businessProperties[$type][] = $property->name;
                    }
                }
            }
        }
        // we load business properties of parents recursively
        // because they are defined by an annotation not by the property type(private, protected, public)
        $parentClass = $class->getParentClass();
        if ($parentClass) {
            //load parent properties recursively
            $parentProperties = $this->loadBusinessProperties(new \ReflectionClass($parentClass->getName()));
            foreach ($parentProperties as $key => $parentProperty) {
                if (array_key_exists($key, $businessProperties)) {
                    //if parent and current have a same business property type we merge the properties and remove
                    //duplicates if properties are the same;
                    $businessProperties[$key] = array_unique(array_merge($parentProperty, $businessProperties[$key]));
                } else {
                    //else we had a business property type for the parent properties
                    $businessProperties[$key] = $parentProperty;
                }
            }
        }

        return $businessProperties;
    }
protected function loadBusinessProperties(\ReflectionClass $class)
    {
        $businessProperties = [];
        $properties = $class->getProperties();
        $traits = $class->getTraits();
        $className = $class->getName();
        // if the class is translatable, then parse annotations on it's translation class
        if (array_key_exists(Translatable::class, $traits)) {
            $translation = new \ReflectionClass($className::getTranslationEntityClass());
            $translationProperties = $translation->getProperties();
            $properties = array_merge($properties, $translationProperties);
        }

        foreach ($properties as $property) {
            $annotations = $this->reader->getPropertyAnnotations($property);
            foreach ($annotations as $key => $annotationObj) {
                if ($annotationObj instanceof BusinessProperty && !in_array($class, $businessProperties)) {
                    if (!$annotations[$key]->getTypes()) {
                        $message = $class->name.':$'.$property->name.'" field';

                        throw AnnotationException::requiredError('type', 'BusinessProperty annotation', $message, 'array or string');
                    }
                    foreach ($annotations[$key]->getTypes() as $type) {
                        $businessProperties[$type][] = $property->name;
                    }
                }
            }
        }
        // we load business properties of parents recursively
        // because they are defined by an annotation not by the property type(private, protected, public)
        $parentClass = $class->getParentClass();
        if ($parentClass) {
            //load parent properties recursively
            $parentProperties = $this->loadBusinessProperties(new \ReflectionClass($parentClass->getName()));
            foreach ($parentProperties as $key => $parentProperty) {
                if (array_key_exists($key, $businessProperties)) {
                    //if parent and current have a same business property type we merge the properties and remove
                    //duplicates if properties are the same;
                    $businessProperties[$key] = array_unique(array_merge($parentProperty, $businessProperties[$key]));
                } else {
                    //else we had a business property type for the parent properties
                    $businessProperties[$key] = $parentProperty;
                }
            }
        }

        return $businessProperties;
    }
protected function loadBusinessProperties ( \ ReflectionClass $ class ) { $ businessProperties = [ ] ; $ properties = $ class -> getProperties ( ) ; $ traits = $ class -> getTraits ( ) ; $ className = $ class -> getName ( ) ; // if the class is translatable, then parse annotations on it's translation class if ( array_key_exists ( Translatable :: class , $ traits ) ) { $ translation = new \ ReflectionClass ( $ className :: getTranslationEntityClass ( ) ) ; $ translationProperties = $ translation -> getProperties ( ) ; $ properties = array_merge ( $ properties , $ translationProperties ) ; } foreach ( $ properties as $ property ) { $ annotations = $ this -> reader -> getPropertyAnnotations ( $ property ) ; foreach ( $ annotations as $ key => $ annotationObj ) { if ( $ annotationObj instanceof BusinessProperty && ! in_array ( $ class , $ businessProperties ) ) { if ( ! $ annotations [ $ key ] -> getTypes ( ) ) { $ message = $ class -> name . ':$' . $ property -> name . '" field' ; throw AnnotationException :: requiredError ( 'type' , 'BusinessProperty annotation' , $ message , 'array or string' ) ; } foreach ( $ annotations [ $ key ] -> getTypes ( ) as $ type ) { $ businessProperties [ $ type ] [ ] = $ property -> name ; } } } } // we load business properties of parents recursively // because they are defined by an annotation not by the property type(private, protected, public) $ parentClass = $ class -> getParentClass ( ) ; if ( $ parentClass ) { //load parent properties recursively $ parentProperties = $ this -> loadBusinessProperties ( new \ ReflectionClass ( $ parentClass -> getName ( ) ) ) ; foreach ( $ parentProperties as $ key => $ parentProperty ) { if ( array_key_exists ( $ key , $ businessProperties ) ) { //if parent and current have a same business property type we merge the properties and remove //duplicates if properties are the same; $ businessProperties [ $ key ] = array_unique ( array_merge ( $ parentProperty , $ businessProperties [ $ key ] ) ) ; } else { //else we had a business property type for the parent properties $ businessProperties [ $ key ] = $ parentProperty ; } } } return $ businessProperties ; }
load business properties from ReflectionClass.

@return array
load business properties from ReflectionClass .