Explorar el Código

[all] type hinting for object managers and classmetada

Gediminas Morkevicius hace 14 años
padre
commit
674ef1ceec

+ 7 - 4
lib/Gedmo/Mapping/Driver.php

@@ -2,6 +2,9 @@
 
 namespace Gedmo\Mapping;
 
+
+use Doctrine\Common\Persistence\Mapping\ClassMetadata;
+
 /**
  * The mapping driver abstract class, defines the
  * metadata extraction function common among
@@ -19,20 +22,20 @@ interface Driver
      * Read extended metadata configuration for
      * a single mapped class
      * 
-     * @param object $meta - ClassMetadata
+     * @param ClassMetadata $meta
      * @param array $config
      * @return void
      */
-    public function readExtendedMetadata($meta, array &$config);
+    public function readExtendedMetadata(ClassMetadata $meta, array &$config);
     
     /**
      * Callback triggered from driver then metadata is
      * fully formed from inherited classes if there were
      * any.
      * 
-     * @param object $meta - ClassMetadata
+     * @param ClassMetadata $meta
      * @param array $config
      * @return void
      */
-    public function validateFullMetadata($meta, array $config);
+    public function validateFullMetadata(ClassMetadata $meta, array $config);
 }

+ 4 - 3
lib/Gedmo/Mapping/Driver/Chain.php

@@ -2,7 +2,8 @@
 
 namespace Gedmo\Mapping\Driver;
 
-use Gedmo\Mapping\Driver;
+use Gedmo\Mapping\Driver,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata;
 
 /**
  * The chain mapping driver enables chained
@@ -46,12 +47,12 @@ class Chain implements Driver
     /**
      * {@inheritDoc}
      */
-    public function validateFullMetadata($meta, array $config) {}
+    public function validateFullMetadata(ClassMetadata $meta, array $config) {}
     
     /**
      * {@inheritDoc}
      */
-    public function readExtendedMetadata($meta, array &$config)
+    public function readExtendedMetadata(ClassMetadata $meta, array &$config)
     {
         foreach ($this->_drivers as $namespace => $driver) {
             if (strpos($meta->name, $namespace) === 0) {

+ 7 - 4
lib/Gedmo/Mapping/ExtensionMetadataFactory.php

@@ -2,6 +2,9 @@
 
 namespace Gedmo\Mapping;
 
+use Doctrine\Common\Persistence\ObjectManager,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata;
+
 /**
  * The extension metadata factory is responsible for extension driver
  * initialization and fully reading the extension metadata
@@ -36,10 +39,10 @@ class ExtensionMetadataFactory
     /**
      * Initializes extension driver
      * 
-     * @param object $objectManager
+     * @param ObjectManager $objectManager
      * @param string $extensionNamespace
      */
-    public function __construct($objectManager, $extensionNamespace)
+    public function __construct(ObjectManager $objectManager, $extensionNamespace)
     {
         $this->objectManager = $objectManager;
         $this->extensionNamespace = $extensionNamespace;
@@ -50,10 +53,10 @@ class ExtensionMetadataFactory
     /**
      * Reads extension metadata
      * 
-     * @param object $meta
+     * @param ClassMetadata $meta
      * @return array - the metatada configuration
      */
-    public function getExtensionMetadata($meta)
+    public function getExtensionMetadata(ClassMetadata $meta)
     {
         if ($meta->isMappedSuperclass) {
             return; // ignore mappedSuperclasses for now

+ 9 - 7
lib/Gedmo/Mapping/MappedEventSubscriber.php

@@ -4,6 +4,8 @@ namespace Gedmo\Mapping;
 
 use Gedmo\Mapping\ExtensionMetadataFactory,
     Doctrine\Common\EventSubscriber,
+    Doctrine\Common\Persistence\ObjectManager,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata,
     Doctrine\Common\EventArgs;
 
 /**
@@ -42,11 +44,11 @@ abstract class MappedEventSubscriber implements EventSubscriber
      * Get the configuration for specific object class
      * if cache driver is present it scans it also
      * 
-     * @param object $objectManager
+     * @param ObjectManager $objectManager
      * @param string $class
      * @return array
      */
-    public function getConfiguration($objectManager, $class) {
+    public function getConfiguration(ObjectManager $objectManager, $class) {
         $config = array();
         if (isset($this->configurations[$class])) {
             $config = $this->configurations[$class];
@@ -64,10 +66,10 @@ abstract class MappedEventSubscriber implements EventSubscriber
     /**
      * Get extended metadata mapping reader
      * 
-     * @param object $objectManager
+     * @param ObjectManager $objectManager
      * @return Gedmo\Mapping\ExtensionMetadataFactory
      */
-    public function getExtensionMetadataFactory($objectManager)
+    public function getExtensionMetadataFactory(ObjectManager $objectManager)
     {
         if (null === $this->extensionMetadataFactory) {
             $this->extensionMetadataFactory = new ExtensionMetadataFactory(
@@ -82,11 +84,11 @@ abstract class MappedEventSubscriber implements EventSubscriber
      * Scans the objects for extended annotations
      * event subscribers must subscribe to loadClassMetadata event
      * 
-     * @param object $objectManager
-     * @param object $metadata
+     * @param ObjectManager $objectManager
+     * @param ClassMetadata $metadata
      * @return void
      */
-    public function loadMetadataForObjectClass($objectManager, $metadata)
+    public function loadMetadataForObjectClass(ObjectManager $objectManager, ClassMetadata $metadata)
     {
         $factory = $this->getExtensionMetadataFactory($objectManager);
         $config = $factory->getExtensionMetadata($metadata);

+ 61 - 63
lib/Gedmo/Sluggable/AbstractSluggableListener.php

@@ -3,6 +3,8 @@
 namespace Gedmo\Sluggable;
 
 use Doctrine\Common\EventArgs,
+    Doctrine\Common\Persistence\ObjectManager,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata,
     Gedmo\Mapping\MappedEventSubscriber;
 
 /**
@@ -48,60 +50,6 @@ abstract class AbstractSluggableListener extends MappedEventSubscriber
         $this->transliterator = $callable;
     }
     
-    /**
-     * Get the ObjectManager from EventArgs
-     *
-     * @param EventArgs $args
-     * @return object
-     */
-    abstract public function getObjectManager(EventArgs $args);
-    
-    /**
-     * Get the Object from EventArgs
-     *
-     * @param EventArgs $args
-     * @return object
-     */
-    abstract public function getObject(EventArgs $args);
-    
-    /**
-     * Get the object changeset from a UnitOfWork
-     *
-     * @param UnitOfWork $uow
-     * @param Object $object
-     * @return array
-     */
-    abstract public function getObjectChangeSet($uow, $object);
-    
-    /**
-     * Recompute the single object changeset from a UnitOfWork
-     *
-     * @param UnitOfWork $uow
-     * @param Object $object
-     * @return void
-     */
-    abstract public function recomputeSingleObjectChangeSet($uow, $meta, $object);
-    
-    /**
-     * Get the scheduled object updates from a UnitOfWork
-     *
-     * @param UnitOfWork $uow
-     * @return array
-     */
-    abstract public function getScheduledObjectUpdates($uow);
-    
-    /**
-     * Loads the similar slugs
-     * 
-     * @param object $om
-     * @param object $object
-     * @param ClassMetadata $meta
-     * @param array $config
-     * @param string $preferedSlug
-     * @return array
-     */
-    abstract protected function getUniqueSlugResult($om, $object, $meta, array $config, $preferedSlug);
-    
     /**
      * Mapps additional metadata
      * 
@@ -165,7 +113,7 @@ abstract class AbstractSluggableListener extends MappedEventSubscriber
     /**
      * Creates the slug for object being flushed
      * 
-     * @param object $om
+     * @param ObjectManager $om
      * @param object $object
      * @param mixed $changeSet
      *      case array: the change set array
@@ -174,7 +122,7 @@ abstract class AbstractSluggableListener extends MappedEventSubscriber
      *      or invalid
      * @return void
      */
-    protected function generateSlug($om, $object, $changeSet)
+    protected function generateSlug(ObjectManager $om, $object, $changeSet)
     {
         $meta = $om->getClassMetadata(get_class($object));
         $uow = $om->getUnitOfWork();
@@ -241,12 +189,12 @@ abstract class AbstractSluggableListener extends MappedEventSubscriber
     /**
      * Generates the unique slug
      * 
-     * @param object $om
+     * @param ObjectManager $om
      * @param object $object
      * @param string $preferedSlug
      * @return string - unique slug
      */
-    protected function makeUniqueSlug($om, $object, $preferedSlug)
+    protected function makeUniqueSlug(ObjectManager $om, $object, $preferedSlug)
     {   
         $meta = $om->getClassMetadata(get_class($object));
         $config = $this->getConfiguration($om, $meta->name);
@@ -267,22 +215,72 @@ abstract class AbstractSluggableListener extends MappedEventSubscriber
             } while (in_array($generatedSlug, $sameSlugs));
 
             $mapping = $meta->getFieldMapping($config['slug']);
-            $needRecursion = false;
             if (isset($mapping['length']) && strlen($generatedSlug) > $mapping['length']) {
-                $needRecursion = true;
                 $generatedSlug = substr(
                     $generatedSlug, 
                     0, 
                     $mapping['length'] - (strlen($i) + strlen($config['separator']))
                 );
                 $this->exponent = strlen($i) - 1;
-            }
-            
-            if ($needRecursion) {
                 $generatedSlug = $this->makeUniqueSlug($om, $object, $generatedSlug);
             }
             $preferedSlug = $generatedSlug;
         }
         return $preferedSlug;
     }
+    
+    /**
+     * Get the ObjectManager from EventArgs
+     *
+     * @param EventArgs $args
+     * @return ObjectManager
+     */
+    abstract protected function getObjectManager(EventArgs $args);
+    
+    /**
+     * Get the Object from EventArgs
+     *
+     * @param EventArgs $args
+     * @return object
+     */
+    abstract protected function getObject(EventArgs $args);
+    
+    /**
+     * Get the object changeset from a UnitOfWork
+     *
+     * @param UnitOfWork $uow
+     * @param Object $object
+     * @return array
+     */
+    abstract protected function getObjectChangeSet($uow, $object);
+    
+    /**
+     * Recompute the single object changeset from a UnitOfWork
+     *
+     * @param UnitOfWork $uow
+     * @param ClassMetadata $meta
+     * @param Object $object
+     * @return void
+     */
+    abstract protected function recomputeSingleObjectChangeSet($uow, ClassMetadata $meta, $object);
+    
+    /**
+     * Get the scheduled object updates from a UnitOfWork
+     *
+     * @param UnitOfWork $uow
+     * @return array
+     */
+    abstract protected function getScheduledObjectUpdates($uow);
+    
+    /**
+     * Loads the similar slugs
+     * 
+     * @param ObjectManager $om
+     * @param object $object
+     * @param ClassMetadata $meta
+     * @param array $config
+     * @param string $preferedSlug
+     * @return array
+     */
+    abstract protected function getUniqueSlugResult(ObjectManager $om, $object, ClassMetadata $meta, array $config, $preferedSlug);
 }

+ 8 - 7
lib/Gedmo/Sluggable/Mapping/Driver/Annotation.php

@@ -4,6 +4,7 @@ namespace Gedmo\Sluggable\Mapping\Driver;
 
 use Gedmo\Mapping\Driver,
     Doctrine\Common\Annotations\AnnotationReader,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata,
     Gedmo\Exception\InvalidMappingException;
 
 /**
@@ -36,14 +37,14 @@ class Annotation implements Driver
      * 
      * @var array
      */
-    private $_validTypes = array(
+    private $validTypes = array(
         'string'
     );
     
     /**
      * {@inheritDoc}
      */
-    public function validateFullMetadata($meta, array $config)
+    public function validateFullMetadata(ClassMetadata $meta, array $config)
     {
         if ($config && !isset($config['fields'])) {
             throw new InvalidMappingException("Unable to find any sluggable fields specified for Sluggable entity - {$meta->name}");
@@ -53,7 +54,7 @@ class Annotation implements Driver
     /**
      * {@inheritDoc}
      */
-    public function readExtendedMetadata($meta, array &$config) {
+    public function readExtendedMetadata(ClassMetadata $meta, array &$config) {
         require_once __DIR__ . '/../Annotations.php';
         $reader = new AnnotationReader();
         $reader->setAnnotationNamespaceAlias('Gedmo\Sluggable\Mapping\\', 'gedmo');
@@ -73,7 +74,7 @@ class Annotation implements Driver
                 if (!$meta->hasField($field)) {
                     throw new InvalidMappingException("Unable to find sluggable [{$field}] as mapped property in entity - {$meta->name}");
                 }
-                if (!$this->_isValidField($meta, $field)) {
+                if (!$this->isValidField($meta, $field)) {
                     throw new InvalidMappingException("Cannot slug field - [{$field}] type is not valid and must be 'string' in class - {$meta->name}");
                 }
                 $config['fields'][] = $field;
@@ -84,7 +85,7 @@ class Annotation implements Driver
                 if (!$meta->hasField($field)) {
                     throw new InvalidMappingException("Unable to find slug [{$field}] as mapped property in entity - {$meta->name}");
                 }
-                if (!$this->_isValidField($meta, $field)) {
+                if (!$this->isValidField($meta, $field)) {
                     throw new InvalidMappingException("Cannot use field - [{$field}] for slug storage, type is not valid and must be 'string' in class - {$meta->name}");
                 } 
                 if (isset($config['slug'])) {
@@ -107,9 +108,9 @@ class Annotation implements Driver
      * @param string $field
      * @return boolean
      */
-    protected function _isValidField($meta, $field)
+    protected function isValidField(ClassMetadata $meta, $field)
     {
         $mapping = $meta->getFieldMapping($field);
-        return $mapping && in_array($mapping['type'], $this->_validTypes);
+        return $mapping && in_array($mapping['type'], $this->validTypes);
     }
 }

+ 8 - 7
lib/Gedmo/Sluggable/Mapping/Driver/Yaml.php

@@ -4,6 +4,7 @@ namespace Gedmo\Sluggable\Mapping\Driver;
 
 use Gedmo\Mapping\Driver\File,
     Gedmo\Mapping\Driver,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata,
     Gedmo\Exception\InvalidMappingException;
 
 /**
@@ -31,14 +32,14 @@ class Yaml extends File implements Driver
      * 
      * @var array
      */
-    private $_validTypes = array(
+    private $validTypes = array(
         'string'
     );
     
     /**
      * {@inheritDoc}
      */
-    public function validateFullMetadata($meta, array $config)
+    public function validateFullMetadata(ClassMetadata $meta, array $config)
     {
         if ($config && !isset($config['fields'])) {
             throw new InvalidMappingException("Unable to find any sluggable fields specified for Sluggable entity - {$meta->name}");
@@ -48,7 +49,7 @@ class Yaml extends File implements Driver
     /**
      * {@inheritDoc}
      */
-    public function readExtendedMetadata($meta, array &$config) {
+    public function readExtendedMetadata(ClassMetadata $meta, array &$config) {
         $yaml = $this->_loadMappingFile($this->_findMappingFile($meta->name));
         $mapping = $yaml[$meta->name];
         
@@ -56,13 +57,13 @@ class Yaml extends File implements Driver
             foreach ($mapping['fields'] as $field => $fieldMapping) {
                 if (isset($fieldMapping['gedmo'])) {
                     if (in_array('sluggable', $fieldMapping['gedmo'])) {
-                        if (!$this->_isValidField($meta, $field)) {
+                        if (!$this->isValidField($meta, $field)) {
                             throw new InvalidMappingException("Cannot slug field - [{$field}] type is not valid and must be 'string' in class - {$meta->name}");
                         }
                         $config['fields'][] = $field;
                     } elseif (isset($fieldMapping['gedmo']['slug']) || in_array('slug', $fieldMapping['gedmo'])) {
                         $slug = $fieldMapping['gedmo']['slug'];
-                        if (!$this->_isValidField($meta, $field)) {
+                        if (!$this->isValidField($meta, $field)) {
                             throw new InvalidMappingException("Cannot use field - [{$field}] for slug storage, type is not valid and must be 'string' in class - {$meta->name}");
                         } 
                         if (isset($config['slug'])) {
@@ -102,9 +103,9 @@ class Yaml extends File implements Driver
      * @param string $field
      * @return boolean
      */
-    protected function _isValidField($meta, $field)
+    protected function isValidField(ClassMetadata $meta, $field)
     {
         $mapping = $meta->getFieldMapping($field);
-        return $mapping && in_array($mapping['type'], $this->_validTypes);
+        return $mapping && in_array($mapping['type'], $this->validTypes);
     }
 }

+ 4 - 2
lib/Gedmo/Sluggable/ODM/MongoDB/SluggableListener.php

@@ -4,6 +4,8 @@ namespace Gedmo\Sluggable\ODM\MongoDB;
 
 use Doctrine\ODM\MongoDB\Events,
     Doctrine\Common\EventArgs,
+    Doctrine\Common\Persistence\ObjectManager,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata,
     Doctrine\ODM\MongoDB\Cursor,
     Gedmo\Sluggable\AbstractSluggableListener;
 
@@ -64,7 +66,7 @@ class SluggableListener extends AbstractSluggableListener
     /**
      * {@inheritdoc}
      */
-    public function recomputeSingleObjectChangeSet($uow, $meta, $object)
+    public function recomputeSingleObjectChangeSet($uow, ClassMetadata $meta, $object)
     {
         $uow->recomputeSingleDocumentChangeSet($meta, $object);
     }
@@ -80,7 +82,7 @@ class SluggableListener extends AbstractSluggableListener
     /**
      * {@inheritdoc}
      */
-    protected function getUniqueSlugResult($om, $object, $meta, array $config, $preferedSlug)
+    protected function getUniqueSlugResult(ObjectManager $om, $object, ClassMetadata $meta, array $config, $preferedSlug)
     {
         $qb = $om->createQueryBuilder($meta->name);
         $identifier = $meta->getIdentifierValue($object);

+ 4 - 2
lib/Gedmo/Sluggable/SluggableListener.php

@@ -4,6 +4,8 @@ namespace Gedmo\Sluggable;
 
 use Doctrine\ORM\Events,
     Doctrine\Common\EventArgs,
+    Doctrine\Common\Persistence\ObjectManager,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata,
     Doctrine\ORM\Query;
 
 /**
@@ -63,7 +65,7 @@ class SluggableListener extends AbstractSluggableListener
     /**
      * {@inheritdoc}
      */
-    public function recomputeSingleObjectChangeSet($uow, $meta, $object)
+    public function recomputeSingleObjectChangeSet($uow, ClassMetadata $meta, $object)
     {
         $uow->recomputeSingleEntityChangeSet($meta, $object);
     }
@@ -79,7 +81,7 @@ class SluggableListener extends AbstractSluggableListener
     /**
      * {@inheritdoc}
      */
-    protected function getUniqueSlugResult($om, $object, $meta, array $config, $preferedSlug)
+    protected function getUniqueSlugResult(ObjectManager $om, $object, ClassMetadata $meta, array $config, $preferedSlug)
     {
         $qb = $om->createQueryBuilder();
         $qb->select('rec.' . $config['slug'])

+ 5 - 3
lib/Gedmo/Timestampable/AbstractTimestampableListener.php

@@ -4,6 +4,7 @@ namespace Gedmo\Timestampable;
 
 use Doctrine\Common\EventArgs,
     Gedmo\Mapping\MappedEventSubscriber,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata,
     Doctrine\ORM\Proxy\Proxy;
 
 /**
@@ -146,7 +147,7 @@ abstract class AbstractTimestampableListener extends MappedEventSubscriber
      * Get the ObjectManager from EventArgs
      *
      * @param EventArgs $args
-     * @return object
+     * @return ObjectManager
      */
     abstract protected function getObjectManager(EventArgs $args);
     
@@ -179,10 +180,11 @@ abstract class AbstractTimestampableListener extends MappedEventSubscriber
      * Recompute the single object changeset from a UnitOfWork
      *
      * @param UnitOfWork $uow
+     * @param ClassMetadata $meta
      * @param Object $object
      * @return void
      */
-    abstract protected function recomputeSingleObjectChangeSet($uow, $meta, $object);
+    abstract protected function recomputeSingleObjectChangeSet($uow, ClassMetadata $meta, $object);
     
     /**
      * Get the date value
@@ -191,5 +193,5 @@ abstract class AbstractTimestampableListener extends MappedEventSubscriber
      * @param string $field
      * @return mixed
      */
-    abstract protected function getDateValue($meta, $field);
+    abstract protected function getDateValue(ClassMetadata $meta, $field);
 }

+ 7 - 6
lib/Gedmo/Timestampable/Mapping/Driver/Annotation.php

@@ -3,6 +3,7 @@
 namespace Gedmo\Timestampable\Mapping\Driver;
 
 use Gedmo\Mapping\Driver,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata,
     Doctrine\Common\Annotations\AnnotationReader,
     Gedmo\Exception\InvalidMappingException;
 
@@ -30,7 +31,7 @@ class Annotation implements Driver
      * 
      * @var array
      */
-    private $_validTypes = array(
+    private $validTypes = array(
         'date',
         'time',
         'datetime',
@@ -40,12 +41,12 @@ class Annotation implements Driver
     /**
      * {@inheritDoc}
      */
-    public function validateFullMetadata($meta, array $config) {}
+    public function validateFullMetadata(ClassMetadata $meta, array $config) {}
     
     /**
      * {@inheritDoc}
      */
-    public function readExtendedMetadata($meta, array &$config) {
+    public function readExtendedMetadata(ClassMetadata $meta, array &$config) {
         require_once __DIR__ . '/../Annotations.php';
         $reader = new AnnotationReader();
         $reader->setAnnotationNamespaceAlias('Gedmo\Timestampable\Mapping\\', 'gedmo');
@@ -64,7 +65,7 @@ class Annotation implements Driver
                 if (!$meta->hasField($field)) {
                     throw new InvalidMappingException("Unable to find timestampable [{$field}] as mapped property in entity - {$meta->name}");
                 }
-                if (!$this->_isValidField($meta, $field)) {
+                if (!$this->isValidField($meta, $field)) {
                     throw new InvalidMappingException("Field - [{$field}] type is not valid and must be 'date', 'datetime' or 'time' in class - {$meta->name}");
                 }
                 if (!in_array($timestampable->on, array('update', 'create', 'change'))) {
@@ -93,9 +94,9 @@ class Annotation implements Driver
      * @param string $field
      * @return boolean
      */
-    protected function _isValidField($meta, $field)
+    protected function isValidField(ClassMetadata $meta, $field)
     {
         $mapping = $meta->getFieldMapping($field);
-        return $mapping && in_array($mapping['type'], $this->_validTypes);
+        return $mapping && in_array($mapping['type'], $this->validTypes);
     }
 }

+ 7 - 6
lib/Gedmo/Timestampable/Mapping/Driver/Yaml.php

@@ -4,6 +4,7 @@ namespace Gedmo\Timestampable\Mapping\Driver;
 
 use Gedmo\Mapping\Driver\File,
     Gedmo\Mapping\Driver,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata,
     Gedmo\Exception\InvalidMappingException;
 
 /**
@@ -31,7 +32,7 @@ class Yaml extends File implements Driver
      * 
      * @var array
      */
-    private $_validTypes = array(
+    private $validTypes = array(
         'date',
         'time',
         'datetime',
@@ -41,12 +42,12 @@ class Yaml extends File implements Driver
     /**
      * {@inheritDoc}
      */
-    public function validateFullMetadata($meta, array $config) {}
+    public function validateFullMetadata(ClassMetadata $meta, array $config) {}
     
     /**
      * {@inheritDoc}
      */
-    public function readExtendedMetadata($meta, array &$config) {
+    public function readExtendedMetadata(ClassMetadata $meta, array &$config) {
         $yaml = $this->_loadMappingFile($this->_findMappingFile($meta->name));
         $mapping = $yaml[$meta->name];
         
@@ -54,7 +55,7 @@ class Yaml extends File implements Driver
             foreach ($mapping['fields'] as $field => $fieldMapping) {
                 if (isset($fieldMapping['gedmo']['timestampable'])) {
                     $mappingProperty = $fieldMapping['gedmo']['timestampable'];
-                    if (!$this->_isValidField($meta, $field)) {
+                    if (!$this->isValidField($meta, $field)) {
                         throw new InvalidMappingException("Field - [{$field}] type is not valid and must be 'date', 'datetime' or 'time' in class - {$meta->name}");
                     }
                     if (!isset($mappingProperty['on']) || !in_array($mappingProperty['on'], array('update', 'create', 'change'))) {
@@ -92,9 +93,9 @@ class Yaml extends File implements Driver
      * @param string $field
      * @return boolean
      */
-    protected function _isValidField($meta, $field)
+    protected function isValidField(ClassMetadata $meta, $field)
     {
         $mapping = $meta->getFieldMapping($field);
-        return $mapping && in_array($mapping['type'], $this->_validTypes);
+        return $mapping && in_array($mapping['type'], $this->validTypes);
     }
 }

+ 3 - 2
lib/Gedmo/Timestampable/ODM/MongoDB/TimestampableListener.php

@@ -4,6 +4,7 @@ namespace Gedmo\Timestampable\ODM\MongoDB;
 
 use Doctrine\ODM\MongoDB\Events,
     Doctrine\Common\EventArgs,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata,
     Gedmo\Timestampable\AbstractTimestampableListener;
 
 /**
@@ -67,7 +68,7 @@ class TimestampableListener extends AbstractTimestampableListener
     /**
      * {@inheritdoc}
      */
-    protected function recomputeSingleObjectChangeSet($uow, $meta, $object)
+    protected function recomputeSingleObjectChangeSet($uow, ClassMetadata $meta, $object)
     {
         $uow->recomputeSingleDocumentChangeSet($meta, $object);
     }
@@ -75,7 +76,7 @@ class TimestampableListener extends AbstractTimestampableListener
     /**
      * {@inheritdoc}
      */
-    protected function getDateValue($meta, $field)
+    protected function getDateValue(ClassMetadata $meta, $field)
     {
         $mapping = $meta->getFieldMapping($field);
         if (isset($mapping['type']) && $mapping['type'] === 'timestamp') {

+ 3 - 2
lib/Gedmo/Timestampable/TimestampableListener.php

@@ -3,6 +3,7 @@
 namespace Gedmo\Timestampable;
 
 use Doctrine\ORM\Events,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata,
     Doctrine\Common\EventArgs;
 
 /**
@@ -66,7 +67,7 @@ class TimestampableListener extends AbstractTimestampableListener
     /**
      * {@inheritdoc}
      */
-    public function recomputeSingleObjectChangeSet($uow, $meta, $object)
+    public function recomputeSingleObjectChangeSet($uow, ClassMetadata $meta, $object)
     {
         $uow->recomputeSingleEntityChangeSet($meta, $object);
     }
@@ -74,7 +75,7 @@ class TimestampableListener extends AbstractTimestampableListener
     /**
      * {@inheritdoc}
      */
-    protected function getDateValue($meta, $field)
+    protected function getDateValue(ClassMetadata $meta, $field)
     {
         return new \DateTime();
     }

+ 16 - 13
lib/Gedmo/Translatable/AbstractTranslationListener.php

@@ -3,6 +3,8 @@
 namespace Gedmo\Translatable;
 
 use Doctrine\Common\EventArgs,
+    Doctrine\Common\Persistence\ObjectManager,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata,
     Gedmo\Mapping\MappedEventSubscriber;
 
 /**
@@ -114,7 +116,7 @@ abstract class AbstractTranslationListener extends MappedEventSubscriber
      *         found in entity
      * @return string
      */
-    public function getTranslatableLocale($object, $meta)
+    public function getTranslatableLocale($object, ClassMetadata $meta)
     {
         $locale = $this->locale;
         if (isset($this->configurations[$meta->name]['locale'])) {
@@ -212,6 +214,7 @@ abstract class AbstractTranslationListener extends MappedEventSubscriber
                     );
                     $this->insertTranslationRecord($om, $translation);
                 }
+                unset($this->pendingTranslationInserts[$oid]);
             }
         }
     }
@@ -281,14 +284,14 @@ abstract class AbstractTranslationListener extends MappedEventSubscriber
     /**
      * Creates the translation for object being flushed
      * 
-     * @param object $om - object manager
+     * @param ObjectManager $om
      * @param object $object
      * @param boolean $isInsert
      * @throws UnexpectedValueException - if locale is not valid, or
      *      primary key is composite, missing or invalid
      * @return void
      */
-    protected function handleTranslatableObjectUpdate($om, $object, $isInsert)
+    protected function handleTranslatableObjectUpdate(ObjectManager $om, $object, $isInsert)
     {
         $meta = $om->getClassMetadata(get_class($object));
         // no need cache, metadata is loaded only once in MetadataFactoryClass
@@ -398,7 +401,7 @@ abstract class AbstractTranslationListener extends MappedEventSubscriber
      * Get the ObjectManager from EventArgs
      *
      * @param EventArgs $args
-     * @return object
+     * @return ObjectManager
      */
     abstract protected function getObjectManager(EventArgs $args);
     
@@ -450,38 +453,38 @@ abstract class AbstractTranslationListener extends MappedEventSubscriber
      * @throws MappingException - if identifier is composite
      * @return string
      */
-    abstract protected function getSingleIdentifierFieldName($meta);
+    abstract protected function getSingleIdentifierFieldName(ClassMetadata $meta);
     
     /**
      * Removes all associated translations for given object
      * 
-     * @param object $om - object manager
+     * @param ObjectManager $om
      * @param mixed $objectId
      * @param string $transClass
      * @return void
      */
-    abstract protected function removeAssociatedTranslations($om, $objectId, $transClass);
+    abstract protected function removeAssociatedTranslations(ObjectManager $om, $objectId, $transClass);
     
     /**
      * Inserts the translation record
      * 
-     * @param object $om - object manager
+     * @param ObjectManager $om
      * @param object $translation
      * @return void
      */
-    abstract protected function insertTranslationRecord($om, $translation);
+    abstract protected function insertTranslationRecord(ObjectManager $om, $translation);
     
     /**
      * Search for existing translation record
      * 
-     * @param object $om - object manager
+     * @param ObjectManager $om
      * @param mixed $objectId
      * @param string $objectClass
      * @param string $locale
      * @param string $field
      * @return mixed - null if nothing is found, Translation otherwise
      */
-    abstract protected function findTranslation($om, $objectId, $objectClass, $locale, $field);
+    abstract protected function findTranslation(ObjectManager $om, $objectId, $objectClass, $locale, $field);
     
     /**
      * Sets a property value of the original data array of an object 
@@ -505,9 +508,9 @@ abstract class AbstractTranslationListener extends MappedEventSubscriber
     /**
      * Load the translations for a given object
      * 
-     * @param object $om - object manager
+     * @param ObjectManager $om
      * @param object $object
      * @return array
      */
-    abstract protected function loadTranslations($om, $object);
+    abstract protected function loadTranslations(ObjectManager $om, $object);
 }

+ 8 - 7
lib/Gedmo/Translatable/Mapping/Driver/Annotation.php

@@ -3,6 +3,7 @@
 namespace Gedmo\Translatable\Mapping\Driver;
 
 use Gedmo\Mapping\Driver,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata,
     Doctrine\Common\Annotations\AnnotationReader,
     Gedmo\Exception\InvalidMappingException;
 
@@ -49,7 +50,7 @@ class Annotation implements Driver
      * 
      * @var array
      */
-    protected $_validTypes = array(
+    protected $validTypes = array(
         'string',
         'text'
     );
@@ -57,12 +58,12 @@ class Annotation implements Driver
     /**
      * {@inheritDoc}
      */
-    public function validateFullMetadata($meta, array $config) {}
+    public function validateFullMetadata(ClassMetadata $meta, array $config) {}
     
     /**
      * {@inheritDoc}
      */
-    public function readExtendedMetadata($meta, array &$config) {
+    public function readExtendedMetadata(ClassMetadata $meta, array &$config) {
         require_once __DIR__ . '/../Annotations.php';
         $reader = new AnnotationReader();
         $reader->setAnnotationNamespaceAlias('Gedmo\Translatable\Mapping\\', 'gedmo');
@@ -73,7 +74,7 @@ class Annotation implements Driver
         if (isset($classAnnotations[self::ANNOTATION_ENTITY_CLASS])) {
             $annot = $classAnnotations[self::ANNOTATION_ENTITY_CLASS];
             if (!class_exists($annot->class)) {
-                throw new InvalidMappingException("Translation entity class: {$annot->class} does not exist.");
+                throw new InvalidMappingException("Translation class: {$annot->class} does not exist.");
             }
             $config['translationClass'] = $annot->class;
         }
@@ -92,7 +93,7 @@ class Annotation implements Driver
                 if (!$meta->hasField($field)) {
                     throw new InvalidMappingException("Unable to find translatable [{$field}] as mapped property in entity - {$meta->name}");
                 }
-                if (!$this->_isValidField($meta, $field)) {
+                if (!$this->isValidField($meta, $field)) {
                     throw new InvalidMappingException("Translatable field - [{$field}] type is not valid and must be 'string' or 'text' in class - {$meta->name}");
                 }
                 // fields cannot be overrided and throws mapping exception
@@ -122,9 +123,9 @@ class Annotation implements Driver
      * @param string $field
      * @return boolean
      */
-    protected function _isValidField($meta, $field)
+    protected function isValidField(ClassMetadata $meta, $field)
     {
         $mapping = $meta->getFieldMapping($field);
-        return $mapping && in_array($mapping['type'], $this->_validTypes);
+        return $mapping && in_array($mapping['type'], $this->validTypes);
     }
 }

+ 7 - 6
lib/Gedmo/Translatable/Mapping/Driver/Yaml.php

@@ -4,6 +4,7 @@ namespace Gedmo\Translatable\Mapping\Driver;
 
 use Gedmo\Mapping\Driver\File,
     Gedmo\Mapping\Driver,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata,
     Gedmo\Exception\InvalidMappingException;
 
 /**
@@ -33,7 +34,7 @@ class Yaml extends File implements Driver
      * 
      * @var array
      */
-    protected $_validTypes = array(
+    protected $validTypes = array(
         'string',
         'text'
     );
@@ -41,12 +42,12 @@ class Yaml extends File implements Driver
     /**
      * {@inheritDoc}
      */
-    public function validateFullMetadata($meta, array $config) {}
+    public function validateFullMetadata(ClassMetadata $meta, array $config) {}
     
     /**
      * {@inheritDoc}
      */
-    public function readExtendedMetadata($meta, array &$config) {
+    public function readExtendedMetadata(ClassMetadata $meta, array &$config) {
         $yaml = $this->_loadMappingFile($this->_findMappingFile($meta->name));
         $mapping = $yaml[$meta->name];
         
@@ -69,7 +70,7 @@ class Yaml extends File implements Driver
             foreach ($mapping['fields'] as $field => $fieldMapping) {
                 if (isset($fieldMapping['gedmo'])) {
                     if (in_array('translatable', $fieldMapping['gedmo'])) {
-                        if (!$this->_isValidField($meta, $field)) {
+                        if (!$this->isValidField($meta, $field)) {
                             throw new InvalidMappingException("Translatable field - [{$field}] type is not valid and must be 'string' or 'text' in class - {$meta->name}");
                         }
                         // fields cannot be overrided and throws mapping exception
@@ -95,9 +96,9 @@ class Yaml extends File implements Driver
      * @param string $field
      * @return boolean
      */
-    protected function _isValidField($meta, $field)
+    protected function isValidField(ClassMetadata $meta, $field)
     {
         $mapping = $meta->getFieldMapping($field);
-        return $mapping && in_array($mapping['type'], $this->_validTypes);
+        return $mapping && in_array($mapping['type'], $this->validTypes);
     }
 }

+ 7 - 5
lib/Gedmo/Translatable/ODM/MongoDB/TranslationListener.php

@@ -4,6 +4,8 @@ namespace Gedmo\Translatable\ODM\MongoDB;
 
 use Doctrine\ODM\MongoDB\Events,
     Doctrine\Common\EventArgs,
+    Doctrine\Common\Persistence\ObjectManager,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata,
     Doctrine\ODM\MongoDB\Cursor,
     Gedmo\Translatable\AbstractTranslationListener;
 
@@ -107,7 +109,7 @@ class TranslationListener extends AbstractTranslationListener
     /**
      * {@inheritdoc}
      */
-    protected function getSingleIdentifierFieldName($meta)
+    protected function getSingleIdentifierFieldName(ClassMetadata $meta)
     {
         return $meta->identifier;
     }
@@ -131,7 +133,7 @@ class TranslationListener extends AbstractTranslationListener
     /**
      * {@inheritdoc}
      */
-    protected function removeAssociatedTranslations($om, $objectId, $transClass)
+    protected function removeAssociatedTranslations(ObjectManager $om, $objectId, $transClass)
     {
         $qb = $om->createQueryBuilder($transClass);
         $q = $qb->remove()
@@ -143,7 +145,7 @@ class TranslationListener extends AbstractTranslationListener
     /**
      * {@inheritdoc}
      */
-    protected function insertTranslationRecord($om, $translation)
+    protected function insertTranslationRecord(ObjectManager $om, $translation)
     {
         $meta = $om->getClassMetadata(get_class($translation));        
         $collection = $om->getDocumentCollection($meta->name);
@@ -163,7 +165,7 @@ class TranslationListener extends AbstractTranslationListener
     /**
      * {@inheritdoc}
      */
-    protected function findTranslation($om, $objectId, $objectClass, $locale, $field)
+    protected function findTranslation(ObjectManager $om, $objectId, $objectClass, $locale, $field)
     {
         $translationClass = $this->getTranslationClass($objectClass);
         $qb = $om->createQueryBuilder($translationClass);
@@ -184,7 +186,7 @@ class TranslationListener extends AbstractTranslationListener
     /**
      * {@inheritdoc}
      */
-    protected function loadTranslations($om, $object)
+    protected function loadTranslations(ObjectManager $om, $object)
     {
         $meta = $om->getClassMetadata(get_class($object));
         $locale = strtolower($this->getTranslatableLocale($object, $meta));

+ 7 - 5
lib/Gedmo/Translatable/TranslationListener.php

@@ -4,6 +4,8 @@ namespace Gedmo\Translatable;
 
 use Doctrine\ORM\Events,
     Doctrine\Common\EventArgs,
+    Doctrine\Common\Persistence\ObjectManager,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata,
     Doctrine\ORM\Query;
 
 /**
@@ -107,7 +109,7 @@ class TranslationListener extends AbstractTranslationListener
     /**
      * {@inheritdoc}
      */
-    protected function getSingleIdentifierFieldName($meta)
+    protected function getSingleIdentifierFieldName(ClassMetadata $meta)
     {
         return $meta->getSingleIdentifierFieldName();
     }
@@ -115,7 +117,7 @@ class TranslationListener extends AbstractTranslationListener
     /**
      * {@inheritdoc}
      */
-    protected function removeAssociatedTranslations($om, $objectId, $transClass)
+    protected function removeAssociatedTranslations(ObjectManager $om, $objectId, $transClass)
     {
         $dql = 'DELETE ' . $transClass . ' trans';
         $dql .= ' WHERE trans.foreignKey = :objectId';
@@ -128,7 +130,7 @@ class TranslationListener extends AbstractTranslationListener
     /**
      * {@inheritdoc}
      */
-    protected function insertTranslationRecord($om, $translation)
+    protected function insertTranslationRecord(ObjectManager $om, $translation)
     {
         $meta = $om->getClassMetadata(get_class($translation));        
         $data = array();
@@ -148,7 +150,7 @@ class TranslationListener extends AbstractTranslationListener
     /**
      * {@inheritdoc}
      */
-    protected function findTranslation($om, $objectId, $objectClass, $locale, $field)
+    protected function findTranslation(ObjectManager $om, $objectId, $objectClass, $locale, $field)
     {
         $qb = $om->createQueryBuilder();
         $qb->select('trans')
@@ -190,7 +192,7 @@ class TranslationListener extends AbstractTranslationListener
     /**
      * {@inheritdoc}
      */
-    protected function loadTranslations($om, $object)
+    protected function loadTranslations(ObjectManager $om, $object)
     {
         $meta = $om->getClassMetadata(get_class($object));
         $locale = strtolower($this->getTranslatableLocale($object, $meta));

+ 3 - 2
lib/Gedmo/Tree/AbstractTreeListener.php

@@ -3,6 +3,7 @@
 namespace Gedmo\Tree;
 
 use Doctrine\Common\EventArgs,
+    Doctrine\Common\Persistence\ObjectManager,
     Gedmo\Mapping\MappedEventSubscriber;
 
 /**
@@ -33,11 +34,11 @@ abstract class AbstractTreeListener extends MappedEventSubscriber
     /**
      * Get the used strategy for tree processing
      * 
-     * @param object $om - object manager
+     * @param ObjectManager $om
      * @param string $class
      * @return StrategyInterface
      */
-    public function getStrategy($om, $class)
+    public function getStrategy(ObjectManager $om, $class)
     {
         if (!isset($this->strategies[$class])) {
             $config = $this->getConfiguration($om, $class);

+ 7 - 6
lib/Gedmo/Tree/Mapping/Driver/Annotation.php

@@ -4,6 +4,7 @@ namespace Gedmo\Tree\Mapping\Driver;
 
 use Gedmo\Mapping\Driver,
     Doctrine\Common\Annotations\AnnotationReader,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata,
     Gedmo\Exception\InvalidMappingException;
 
 /**
@@ -73,7 +74,7 @@ class Annotation implements Driver
     /**
      * {@inheritDoc}
      */
-    public function validateFullMetadata($meta, array $config)
+    public function validateFullMetadata(ClassMetadata $meta, array $config)
     {        
         if (isset($config['strategy'])) {
             $method = 'validate' . ucfirst($config['strategy']) . 'TreeMetadata';
@@ -86,7 +87,7 @@ class Annotation implements Driver
     /**
      * {@inheritDoc}
      */
-    public function readExtendedMetadata($meta, array &$config) {
+    public function readExtendedMetadata(ClassMetadata $meta, array &$config) {
         require_once __DIR__ . '/../Annotations.php';
         $reader = new AnnotationReader();
         $reader->setAnnotationNamespaceAlias('Gedmo\Tree\Mapping\\', 'gedmo');
@@ -168,11 +169,11 @@ class Annotation implements Driver
     /**
      * Checks if $field type is valid
      * 
-     * @param ClassMetadataInfo $meta
+     * @param ClassMetadata $meta
      * @param string $field
      * @return boolean
      */
-    protected function isValidField($meta, $field)
+    protected function isValidField(ClassMetadata $meta, $field)
     {
         $mapping = $meta->getFieldMapping($field);
         return $mapping && in_array($mapping['type'], $this->validTypes);
@@ -181,12 +182,12 @@ class Annotation implements Driver
     /**
      * Validates metadata for nested type tree
      * 
-     * @param ClassMetadataInfo $meta
+     * @param ClassMetadata $meta
      * @param array $config
      * @throws InvalidMappingException
      * @return void
      */
-    private function validateNestedTreeMetadata($meta, array $config)
+    private function validateNestedTreeMetadata(ClassMetadata $meta, array $config)
     {
         $missingFields = array();
         if (!isset($config['parent'])) {

+ 12 - 11
lib/Gedmo/Tree/Mapping/Driver/Yaml.php

@@ -4,6 +4,7 @@ namespace Gedmo\Tree\Mapping\Driver;
 
 use Gedmo\Mapping\Driver\File,
     Gedmo\Mapping\Driver,
+    Doctrine\Common\Persistence\Mapping\ClassMetadata,
     Gedmo\Exception\InvalidMappingException;
 
 /**
@@ -31,7 +32,7 @@ class Yaml extends File implements Driver
      * 
      * @var array
      */
-    private $_validTypes = array(
+    private $validTypes = array(
         'integer',
         'smallint',
         'bigint'
@@ -49,7 +50,7 @@ class Yaml extends File implements Driver
     /**
      * {@inheritDoc}
      */
-    public function validateFullMetadata($meta, array $config)
+    public function validateFullMetadata(ClassMetadata $meta, array $config)
     {
         if (isset($config['strategy'])) {
             $method = 'validate' . ucfirst($config['strategy']) . 'TreeMetadata';
@@ -62,7 +63,7 @@ class Yaml extends File implements Driver
     /**
      * {@inheritDoc}
      */
-    public function readExtendedMetadata($meta, array &$config) {
+    public function readExtendedMetadata(ClassMetadata $meta, array &$config) {
         $yaml = $this->_loadMappingFile($this->_findMappingFile($meta->name));
         $mapping = $yaml[$meta->name];
         
@@ -80,22 +81,22 @@ class Yaml extends File implements Driver
             foreach ($mapping['fields'] as $field => $fieldMapping) {
                 if (isset($fieldMapping['gedmo'])) {
                     if (in_array('treeLeft', $fieldMapping['gedmo'])) {
-                        if (!$this->_isValidField($meta, $field)) {
+                        if (!$this->isValidField($meta, $field)) {
                             throw new InvalidMappingException("Tree left field - [{$field}] type is not valid and must be 'integer' in class - {$meta->name}");
                         }
                         $config['left'] = $field;
                     } elseif (in_array('treeRight', $fieldMapping['gedmo'])) {
-                        if (!$this->_isValidField($meta, $field)) {
+                        if (!$this->isValidField($meta, $field)) {
                             throw new InvalidMappingException("Tree right field - [{$field}] type is not valid and must be 'integer' in class - {$meta->name}");
                         }
                         $config['right'] = $field;
                     } elseif (in_array('treeLevel', $fieldMapping['gedmo'])) {
-                        if (!$this->_isValidField($meta, $field)) {
+                        if (!$this->isValidField($meta, $field)) {
                             throw new InvalidMappingException("Tree level field - [{$field}] type is not valid and must be 'integer' in class - {$meta->name}");
                         }
                         $config['level'] = $field;
                     } elseif (in_array('treeRoot', $fieldMapping['gedmo'])) {
-                        if (!$this->_isValidField($meta, $field)) {
+                        if (!$this->isValidField($meta, $field)) {
                             throw new InvalidMappingException("Tree root field - [{$field}] type is not valid and must be 'integer' in class - {$meta->name}");
                         }
                         $config['root'] = $field;
@@ -132,21 +133,21 @@ class Yaml extends File implements Driver
      * @param string $field
      * @return boolean
      */
-    protected function _isValidField($meta, $field)
+    protected function isValidField(ClassMetadata $meta, $field)
     {
         $mapping = $meta->getFieldMapping($field);
-        return $mapping && in_array($mapping['type'], $this->_validTypes);
+        return $mapping && in_array($mapping['type'], $this->validTypes);
     }
     
     /**
      * Validates metadata for nested type tree
      * 
-     * @param ClassMetadataInfo $meta
+     * @param ClassMetadata $meta
      * @param array $config
      * @throws InvalidMappingException
      * @return void
      */
-    private function validateNestedTreeMetadata($meta, array $config)
+    private function validateNestedTreeMetadata(ClassMetadata $meta, array $config)
     {
         $missingFields = array();
         if (!isset($config['parent'])) {