is() public method

Check if a property is set directly on this context and not its parent context.
public is ( string $type ) : boolean
$type string Example: $c->is('method') or $c->is('class')
return boolean
 /**
  * @param array $properties
  */
 public function __construct($properties)
 {
     if (isset($properties['_context'])) {
         $this->_context = $properties['_context'];
         unset($properties['_context']);
     } elseif (Analyser::$context) {
         $this->_context = Analyser::$context;
     } else {
         $this->_context = Context::detect(1);
     }
     if ($this->_context->is('annotations') === false) {
         $this->_context->annotations = [];
     }
     $this->_context->annotations[] = $this;
     $nestedContext = new Context(['nested' => $this], $this->_context);
     foreach ($properties as $property => $value) {
         if (property_exists($this, $property)) {
             $this->{$property} = $value;
             if (is_array($value)) {
                 foreach ($value as $key => $annotation) {
                     if (is_object($annotation) && $annotation instanceof AbstractAnnotation) {
                         $this->{$property}[$key] = $this->nested($annotation, $nestedContext);
                     }
                 }
             }
         } elseif ($property !== 'value') {
             $this->{$property} = $value;
         } elseif (is_array($value)) {
             $annotations = [];
             foreach ($value as $annotation) {
                 if (is_object($annotation) && $annotation instanceof AbstractAnnotation) {
                     $annotations[] = $annotation;
                 } else {
                     Logger::notice('Unexpected field in ' . $this->identity() . ' in ' . $this->_context);
                 }
             }
             $this->merge($annotations);
         } elseif (is_object($value)) {
             $this->merge([$value]);
         } else {
             Logger::notice('Unexpected parameter in ' . $this->identity());
         }
     }
 }
Example #2
0
 /**
  * Use doctrine to parse the comment block and return the detected annotations.
  *
  * @param string $comment a T_DOC_COMMENT.
  * @param Context $context
  * @return array Annotations
  */
 public function fromComment($comment, $context = null)
 {
     if ($context === null) {
         $context = new Context(['comment' => $comment]);
     } else {
         $context->comment = $comment;
     }
     try {
         self::$context = $context;
         if ($context->is('annotations') === false) {
             $context->annotations = [];
         }
         $comment = preg_replace_callback('/^[\\t ]*\\*[\\t ]+/m', function ($match) {
             // Replace leading tabs with spaces.
             // Workaround for http://www.doctrine-project.org/jira/browse/DCOM-255
             return str_replace("\t", ' ', $match[0]);
         }, $comment);
         $annotations = $this->docParser->parse($comment, $context);
         self::$context = null;
         return $annotations;
     } catch (Exception $e) {
         self::$context = null;
         if (preg_match('/^(.+) at position ([0-9]+) in ' . preg_quote($context, '/') . '\\.$/', $e->getMessage(), $matches)) {
             $errorMessage = $matches[1];
             $errorPos = $matches[2];
             $atPos = strpos($comment, '@');
             $context->line += substr_count($comment, "\n", 0, $atPos + $errorPos);
             $lines = explode("\n", substr($comment, $atPos, $errorPos));
             $context->character = strlen(array_pop($lines)) + 1;
             // position starts at 0 character starts at 1
             Logger::warning(new Exception($errorMessage . ' in ' . $context, $e->getCode(), $e));
         } else {
             Logger::warning($e);
         }
         return [];
     }
 }