From f3e708f5e08b184711f586fe18731fea44f2188e Mon Sep 17 00:00:00 2001
From: Daniel Siepmann <coding@daniel-siepmann.de>
Date: Tue, 4 Apr 2017 10:54:41 +0200
Subject: [PATCH] BUGFIX: Allow multiple type hints in php docs

* Respect possible separation by "|" and handle each of them.

Resolves: #48
---
 .../AbstractClassnameChecker.php              |  9 +++++----
 .../LegacyClassnames/DocCommentSniff.php      | 20 ++++++++++++++-----
 .../LegacyClassnames/InlineCommentSniff.php   |  7 ++++---
 .../InstantiationWithMakeInstanceSniff.php    |  7 ++++---
 .../InstantiationWithObjectManagerSniff.php   |  7 ++++---
 .../Sniffs/LegacyClassnames/IsACallSniff.php  |  7 ++++---
 6 files changed, 36 insertions(+), 21 deletions(-)

diff --git a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/AbstractClassnameChecker.php b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/AbstractClassnameChecker.php
index a13fe15..77bd49c 100644
--- a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/AbstractClassnameChecker.php
+++ b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/AbstractClassnameChecker.php
@@ -234,7 +234,7 @@ abstract class AbstractClassnameChecker implements PhpCsSniff
 
         $phpcsFile->fixer->replaceToken(
             $classnamePosition,
-            $this->getTokenForReplacement($prefix . $this->getNewClassname($classname))
+            $this->getTokenForReplacement($prefix . $this->getNewClassname($classname), $classname)
         );
     }
 
@@ -242,12 +242,13 @@ abstract class AbstractClassnameChecker implements PhpCsSniff
      * String to use for replacing / fixing the token.
      * Default is class name itself, can be overwritten in sniff for special behaviour.
      *
-     * @param string $classname
+     * @param string $newClassname
+     * @param string $originalClassname
      * @return string
      */
-    protected function getTokenForReplacement($classname)
+    protected function getTokenForReplacement($newClassname, $originalClassname)
     {
-        return $classname;
+        return $newClassname;
     }
 
     /**
diff --git a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/DocCommentSniff.php b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/DocCommentSniff.php
index 2a85c89..2a540bb 100644
--- a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/DocCommentSniff.php
+++ b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/DocCommentSniff.php
@@ -66,22 +66,32 @@ class Typo3Update_Sniffs_LegacyClassnames_DocCommentSniff extends AbstractClassn
         if ($classnamePosition === false) {
             return;
         }
-        $classname = explode(' ', $tokens[$classnamePosition]['content'])[0];
+        $classnames = explode('|', explode(' ', $tokens[$classnamePosition]['content'])[0]);
 
         $this->originalTokenContent = $tokens[$classnamePosition]['content'];
-        $this->addFixableError($phpcsFile, $classnamePosition, $classname);
+        foreach ($classnames as $classname) {
+            $this->addFixableError($phpcsFile, $classnamePosition, $classname);
+        }
     }
 
     /**
      * As token contains more then just class name, we have to build new content ourself.
      *
-     * @param string $classname
+     * @param string $newClassname
+     * @param string $originalClassname
      * @return string
      */
-    protected function getTokenForReplacement($classname)
+    protected function getTokenForReplacement($newClassname, $originalClassname)
     {
         $token = explode(' ', $this->originalTokenContent);
-        $token[0] = $classname;
+
+        $classNames = explode('|', $token[0]);
+        foreach ($classNames as $position => $classname) {
+            if ($classname === $originalClassname) {
+                $classNames[$position] = $newClassname;
+            }
+        }
+        $token[0] = implode('|', $classNames);
 
         return implode(' ', $token);
     }
diff --git a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InlineCommentSniff.php b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InlineCommentSniff.php
index dc9c17d..4740c0e 100644
--- a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InlineCommentSniff.php
+++ b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InlineCommentSniff.php
@@ -81,13 +81,14 @@ class Typo3Update_Sniffs_LegacyClassnames_InlineCommentSniff extends AbstractCla
     /**
      * As token contains more then just class name, we have to build new content ourself.
      *
-     * @param string $classname
+     * @param string $newClassname
+     * @param string $originalClassname
      * @return string
      */
-    protected function getTokenForReplacement($classname)
+    protected function getTokenForReplacement($newClassname, $originalClassname)
     {
         $token = preg_split('/\s+/', $this->originalTokenContent);
-        $token[$this->getClassnamePosition($token)] = $classname;
+        $token[$this->getClassnamePosition($token)] = $newClassname;
 
         return implode(' ', $token);
     }
diff --git a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithMakeInstanceSniff.php b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithMakeInstanceSniff.php
index 7e06b6b..b25c613 100644
--- a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithMakeInstanceSniff.php
+++ b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithMakeInstanceSniff.php
@@ -73,11 +73,12 @@ class Typo3Update_Sniffs_LegacyClassnames_InstantiationWithMakeInstanceSniff ext
     /**
      * As token contains more then just class name, we have to build new content ourself.
      *
-     * @param string $classname
+     * @param string $newClassname
+     * @param string $originalClassname
      * @return string
      */
-    protected function getTokenForReplacement($classname)
+    protected function getTokenForReplacement($newClassname, $originalClassname)
     {
-        return $this->getTokenReplacementForString($classname);
+        return $this->getTokenReplacementForString($newClassname);
     }
 }
diff --git a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithObjectManagerSniff.php b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithObjectManagerSniff.php
index a3d173f..67014fe 100644
--- a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithObjectManagerSniff.php
+++ b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/InstantiationWithObjectManagerSniff.php
@@ -83,11 +83,12 @@ class Typo3Update_Sniffs_LegacyClassnames_InstantiationWithObjectManagerSniff ex
     /**
      * As token contains more then just class name, we have to build new content ourself.
      *
-     * @param string $classname
+     * @param string $newClassname
+     * @param string $originalClassname
      * @return string
      */
-    protected function getTokenForReplacement($classname)
+    protected function getTokenForReplacement($newClassname, $originalClassname)
     {
-        return $this->getTokenReplacementForString($classname);
+        return $this->getTokenReplacementForString($newClassname);
     }
 }
diff --git a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/IsACallSniff.php b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/IsACallSniff.php
index b4a2f30..89bd2fa 100644
--- a/src/Standards/Typo3Update/Sniffs/LegacyClassnames/IsACallSniff.php
+++ b/src/Standards/Typo3Update/Sniffs/LegacyClassnames/IsACallSniff.php
@@ -72,11 +72,12 @@ class Typo3Update_Sniffs_LegacyClassnames_IsACallSniff extends AbstractClassname
     /**
      * As token contains more then just class name, we have to build new content ourself.
      *
-     * @param string $classname
+     * @param string $newClassname
+     * @param string $originalClassname
      * @return string
      */
-    protected function getTokenForReplacement($classname)
+    protected function getTokenForReplacement($newClassname, $originalClassname)
     {
-        return $this->getTokenReplacementForString($classname);
+        return $this->getTokenReplacementForString($newClassname);
     }
 }
-- 
GitLab