Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Uncaught exception 'Doctrine\Common\Annotations\AnnotationException' #292

Closed
cedrictailly opened this issue Aug 20, 2013 · 3 comments
Closed

Comments

@cedrictailly
Copy link

Hi,

I found a bug on a this call :

$reader = $em->getConfiguration()->getMetadataDriverImpl()->getReader();

(...)

$reader->getClassMetadata($classname)

...were $em is the EntityManager and $classname a string, here is the error :

[Semantical Error] The class "Annotation" is not annotated with @annotation. Are you sure this class can be used as annotation? If so, then you need to add @annotation to the class doc comment of "Annotation". If it is indeed no annotation, then you need to add @IgnoreAnnotation("Annotation") to the class doc comment of class @doctrine\ORM\Mapping\Entity.

The context is too complex to reproduce but after a session of debugging, it seems there is a miss on a condition in class Doctrine\Common\Annotations\DocParser, in :

if (self::$annotationMetadata[$name]['is_annotation'] === false) {
    if ($this->ignoreNotImportedAnnotations || isset($this->ignoredAnnotationNames[$originalName])) {
        return false;
    }

...replacing :

isset($this->ignoredAnnotationNames[$originalName])

...by :

$this->ignoreNotImportedAnnotations || isset($this->ignoredAnnotationNames[$originalName])

...should correct the problem.

@songokas
Copy link

songokas commented Apr 1, 2015

Is anyone dealing with this ? I have the same issue

use Doctrine\Common\Annotations\DocParser;

require_once 'vendor/autoload.php';

/**
 * @Annotation
 * @Target({"METHOD"})
 */
class CacheMe {}

class FailMe {}

class ReadMe
{
    /**
     * @CacheMe
     */
    public function testMe1()
    {
        echo "It works";
    }

    /**
     * @MissMe
     */
    public function testMe2()
    {
        echo "It works";
    }

    /**
     * @FailMe
     */
    public function testMe3()
    {
        echo "It works";
    }
}

$parser = new DocParser();
$parser->setIgnoreNotImportedAnnotations(true);
$method1 = new ReflectionMethod('ReadMe', 'testMe1');
$method2 = new ReflectionMethod('ReadMe', 'testMe2');
$method3 = new ReflectionMethod('ReadMe', 'testMe3');
var_dump($parser->parse($method1->getDocComment()));
var_dump($parser->parse($method2->getDocComment()));
var_dump($parser->parse($method3->getDocComment()));

Output:

array(1) {
  [0] =>
  class CacheMe#11 (0) {
  }
}
array(0) {
}
PHP Fatal error:  Uncaught exception 'Doctrine\Common\Annotations\AnnotationException' with message '[Semantical Error] The class "FailMe" is not annotated with @Annotation. Are you sure this class can be used as annotation? If so, then you need to add @Annotation to the _class_ doc comment of "FailMe". If it is indeed no annotation, then you need to add @IgnoreAnnotation("FailMe") to the _class_ doc comment of .' in /workspace/vagrant/csms/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php:54
Stack trace:
#0 /workspace/vagrant/csms/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php(727): Doctrine\Common\Annotations\AnnotationException::semanticalError('The class "Fail...')
#1 /workspace/vagrant/csms/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php(641): Doctrine\Common\Annotations\DocParser->Annotation()
#2 /workspace/vagrant/csms/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php(334): Doctrine\Common\Annotations\DocParser in /workspace/vagrant/csms/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php on line 54

Expected behaviour:

var_dump($parser->parse($method3->getDocComment()));

should not throw exception and return empty list

@Ocramius
Copy link
Member

Ocramius commented Apr 1, 2015

Convert it to a test case and it can be debugged/fixed

@guilhermeblanco
Copy link
Member

This issue was moved to doctrine/annotations#80

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants