private function verifyParamType(PhpType $type, \PHPParser_Node $node, $paramName)
 {
     if (null === ($commentType = $this->parser->getTypeFromParamAnnotation($node, $paramName))) {
         if ($this->getSetting('ask_for_param_type_annotation')) {
             if ($type->isAllType() || $type->isUnknownType()) {
                 $this->phpFile->addComment($node->getLine(), Comment::warning('php_doc.param_type_all_type_non_commented', 'Please add a ``@param`` annotation for parameter ``$%parameter%`` which defines a more specific range of types; something like ``string|array``, or ``null|MyObject``.', array('parameter' => $paramName))->varyIn(array()));
             } else {
                 if ($this->typeRegistry->getNativeType('array')->isSubtypeOf($type)) {
                     $this->phpFile->addComment($node->getLine(), Comment::warning('php_doc.param_type_array_type_not_inferrable', 'Please add a ``@param`` annotation for parameter ``$%parameter%`` which defines the array type; using ``array<SomeType>``, or ``SomeType[]``.', array('parameter' => $paramName))->varyIn(array()));
                 }
             }
         }
         return;
     }
     if (!$this->getSetting('parameters')) {
         return;
     }
     // If the type is not a subtype of the annotated type, then there is an
     // error somewhere (could also be in the type inference engine).
     if (!$type->isSubtypeOf($commentType)) {
         if ($this->getSetting('suggest_more_specific_types') && $this->typeRegistry->getNativeType('array')->isSubtypeOf($type)) {
             $this->phpFile->addComment($this->getLineOfParam($node, $paramName), Comment::warning('php_doc.param_type_mismatch_with_generic_array', 'Should the type for parameter ``$%parameter%`` not be ``%expected_type%``? Also, consider making the array more specific, something like ``array<String>``, or ``String[]``.', array('parameter' => $paramName, 'expected_type' => $type->getDocType($this->importedNamespaces))));
         } else {
             $this->phpFile->addComment($this->getLineOfParam($node, $paramName), Comment::warning('php_doc.param_type_mismatch', 'Should the type for parameter ``$%parameter%`` not be ``%expected_type%``?', array('parameter' => $paramName, 'expected_type' => $type->getDocType($this->importedNamespaces))));
         }
         return;
     }
     if (!$this->getSetting('suggest_more_specific_types')) {
         return;
     }
     if (!$this->isMoreSpecificType($type, $commentType)) {
         if ($type->isAllType()) {
             $this->phpFile->addComment($this->getLineOfParam($node, $paramName), Comment::warning('php_doc.param_type_all_type_more_specific', 'Please define a more specific type for parameter ``$%parameter%``; consider using a union like ``null|Object``, or ``string|array``.', array('parameter' => $paramName))->varyIn(array()));
         } else {
             if ($this->typeRegistry->getNativeType('array')->isSubtypeOf($type)) {
                 $this->phpFile->addComment($this->getLineOfParam($node, $paramName), Comment::warning('php_doc.param_type_array_element_type', 'Please define the element type for the array of parameter ``$%parameter%`` (using ``array<SomeType>``, or ``SomeType[]``).', array('parameter' => $paramName))->varyIn(array()));
             }
         }
         return;
     }
     $this->phpFile->addComment($this->getLineOfParam($node, $paramName), Comment::warning('php_doc.param_type_more_specific', 'Consider making the type for parameter ``$%parameter%`` a bit more specific; maybe use ``%actual_type%``.', array('parameter' => $paramName, $type->getDocType($this->importedNamespaces))));
 }