/** * Builds the class documentation block for the specified class keeping doc comments and vital annotations * * @return string $methodDocumentation DocComment for the given method */ protected function buildClassDocumentation() { $classDocumentation = "/**\n"; $classReflection = new \TYPO3\Flow\Reflection\ClassReflection($this->fullOriginalClassName); $classDescription = $classReflection->getDescription(); $classDocumentation .= ' * ' . str_replace("\n", "\n * ", $classDescription) . "\n"; foreach ($this->reflectionService->getClassAnnotations($this->fullOriginalClassName) as $annotation) { $classDocumentation .= ' * ' . \TYPO3\Flow\Object\Proxy\Compiler::renderAnnotation($annotation) . "\n"; } $classDocumentation .= " */\n"; return $classDocumentation; }
/** * Checks if the specified class matches with the class tag filter pattern * * @param string $className Name of the class to check against * @param string $methodName Name of the method - not used here * @param string $methodDeclaringClassName Name of the class the method was originally declared in - not used here * @param mixed $pointcutQueryIdentifier Some identifier for this query - must at least differ from a previous identifier. Used for circular reference detection. * @return boolean TRUE if the class matches, otherwise FALSE */ public function matches($className, $methodName, $methodDeclaringClassName, $pointcutQueryIdentifier) { $designatedAnnotations = $this->reflectionService->getClassAnnotations($className, $this->annotation); if ($designatedAnnotations !== array() || $this->annotationValueConstraints === array()) { $matches = $designatedAnnotations !== array(); } else { // It makes no sense to check property values for an annotation that is used multiple times, we shortcut and check the value against the first annotation found. $firstFoundAnnotation = $designatedAnnotations; $annotationProperties = $this->reflectionService->getClassPropertyNames($this->annotation); foreach ($this->annotationValueConstraints as $propertyName => $expectedValue) { if (!array_key_exists($propertyName, $annotationProperties)) { $this->systemLogger->log('The property "' . $propertyName . '" declared in pointcut does not exist in annotation ' . $this->annotation, LOG_NOTICE); return FALSE; } if ($firstFoundAnnotation->{$propertyName} === $expectedValue) { $matches = TRUE; } else { return FALSE; } } } return $matches; }
/** * Checks if the specified class matches with the class tag filter pattern * * @param string $className Name of the class to check against * @param string $methodName Name of the method - not used here * @param string $methodDeclaringClassName Name of the class the method was originally declared in - not used here * @param mixed $pointcutQueryIdentifier Some identifier for this query - must at least differ from a previous identifier. Used for circular reference detection. * @return boolean TRUE if the class matches, otherwise FALSE */ public function matches($className, $methodName, $methodDeclaringClassName, $pointcutQueryIdentifier) { return $this->reflectionService->getClassAnnotations($className, $this->annotation) !== array(); }