Loading src/ClassCamouflage.php +10 −1 Original line number Diff line number Diff line Loading @@ -128,7 +128,7 @@ final class ClassCamouflage { // statement. $classes_in_use_statements = array_merge( [ClassCamouflageTokenParser::getName($camouflage_tokens)], [$name = ClassCamouflageTokenParser::getName($camouflage_tokens)], ClassCamouflageTokenParser::getClassNamesFromUseStatements($camouflage_tokens) ); $classes_with_direct_usage = ClassCamouflageTokenParser::getClassNamesWithDirectUsage($camouflage_tokens); Loading Loading @@ -195,6 +195,14 @@ final class ClassCamouflage { ); } // Replace every occurrence of the original relative self class name with a // fully qualified class name. foreach ($classes_with_direct_usage as $key => $cn) { if ($cn === $name) { $camouflage_tokens[$key] = '\\' . $original_namespace . '\\' . $name; } } // If there are classes in the file, then we must ensure they are declared // as abstract. if ($class_index = ClassCamouflageTokenParser::getNameIndex($camouflage_tokens, T_CLASS)) { Loading @@ -211,6 +219,7 @@ final class ClassCamouflage { 'abstract', ]; } $remaining_tokens = ClassCamouflageTokenParser::getTokensBetween($remaining_tokens, $class_index + 1); } while ($class_index = ClassCamouflageTokenParser::getNameIndex($remaining_tokens, T_CLASS)); } Loading src/Utility/ClassCamouflageTokenParser.php +3 −3 Original line number Diff line number Diff line Loading @@ -266,15 +266,15 @@ class ClassCamouflageTokenParser { } if (self::mayBeRelativeClassNameReference($tokens, $key)) { $du_classnames[$token[1]] = $token[1]; $du_classnames[$key] = $token[1]; } elseif (($tokens[$key - 2][0] ?? NULL) === T_INSTANCEOF) { // Token is used in an instanceof check. $du_classnames[$token[1]] = $token[1]; $du_classnames[$key] = $token[1]; } // Token is a single type declaration (in function argument). elseif (self::tokenIsRelativeTypeDeclaration($tokens, $key)) { $du_classnames[$token[1]] = $token[1]; $du_classnames[$key] = $token[1]; } } Loading tests/modules/crema_interface_override_test/crema_interface_override_test.info.yml 0 → 100644 +6 −0 Original line number Diff line number Diff line name: Crema Interface Override Test type: module package: Testing class_replacements: 'Drupal\user\Entity\User': 'src/user/User.php' 'Drupal\user\UserInterface': 'src/user/UserInterface.php' tests/modules/crema_interface_override_test/src/user/User.php 0 → 100644 +19 −0 Original line number Diff line number Diff line <?php namespace Crema\user\Entity; use Drupal\user\Entity\User as OriginalUser; /** * Class override. */ class User extends OriginalUser { /** * {@inheritdoc} */ public function forgetInitialEmail(): void { $this->set('init', $this->getEmail()); } } tests/modules/crema_interface_override_test/src/user/UserInterface.php 0 → 100644 +17 −0 Original line number Diff line number Diff line <?php namespace Crema\user; use Drupal\user\UserInterface as OriginalUserInterface; /** * Interface override. */ interface UserInterface extends OriginalUserInterface { /** * User forgets initial email. */ public function forgetInitialEmail(): void; } Loading
src/ClassCamouflage.php +10 −1 Original line number Diff line number Diff line Loading @@ -128,7 +128,7 @@ final class ClassCamouflage { // statement. $classes_in_use_statements = array_merge( [ClassCamouflageTokenParser::getName($camouflage_tokens)], [$name = ClassCamouflageTokenParser::getName($camouflage_tokens)], ClassCamouflageTokenParser::getClassNamesFromUseStatements($camouflage_tokens) ); $classes_with_direct_usage = ClassCamouflageTokenParser::getClassNamesWithDirectUsage($camouflage_tokens); Loading Loading @@ -195,6 +195,14 @@ final class ClassCamouflage { ); } // Replace every occurrence of the original relative self class name with a // fully qualified class name. foreach ($classes_with_direct_usage as $key => $cn) { if ($cn === $name) { $camouflage_tokens[$key] = '\\' . $original_namespace . '\\' . $name; } } // If there are classes in the file, then we must ensure they are declared // as abstract. if ($class_index = ClassCamouflageTokenParser::getNameIndex($camouflage_tokens, T_CLASS)) { Loading @@ -211,6 +219,7 @@ final class ClassCamouflage { 'abstract', ]; } $remaining_tokens = ClassCamouflageTokenParser::getTokensBetween($remaining_tokens, $class_index + 1); } while ($class_index = ClassCamouflageTokenParser::getNameIndex($remaining_tokens, T_CLASS)); } Loading
src/Utility/ClassCamouflageTokenParser.php +3 −3 Original line number Diff line number Diff line Loading @@ -266,15 +266,15 @@ class ClassCamouflageTokenParser { } if (self::mayBeRelativeClassNameReference($tokens, $key)) { $du_classnames[$token[1]] = $token[1]; $du_classnames[$key] = $token[1]; } elseif (($tokens[$key - 2][0] ?? NULL) === T_INSTANCEOF) { // Token is used in an instanceof check. $du_classnames[$token[1]] = $token[1]; $du_classnames[$key] = $token[1]; } // Token is a single type declaration (in function argument). elseif (self::tokenIsRelativeTypeDeclaration($tokens, $key)) { $du_classnames[$token[1]] = $token[1]; $du_classnames[$key] = $token[1]; } } Loading
tests/modules/crema_interface_override_test/crema_interface_override_test.info.yml 0 → 100644 +6 −0 Original line number Diff line number Diff line name: Crema Interface Override Test type: module package: Testing class_replacements: 'Drupal\user\Entity\User': 'src/user/User.php' 'Drupal\user\UserInterface': 'src/user/UserInterface.php'
tests/modules/crema_interface_override_test/src/user/User.php 0 → 100644 +19 −0 Original line number Diff line number Diff line <?php namespace Crema\user\Entity; use Drupal\user\Entity\User as OriginalUser; /** * Class override. */ class User extends OriginalUser { /** * {@inheritdoc} */ public function forgetInitialEmail(): void { $this->set('init', $this->getEmail()); } }
tests/modules/crema_interface_override_test/src/user/UserInterface.php 0 → 100644 +17 −0 Original line number Diff line number Diff line <?php namespace Crema\user; use Drupal\user\UserInterface as OriginalUserInterface; /** * Interface override. */ interface UserInterface extends OriginalUserInterface { /** * User forgets initial email. */ public function forgetInitialEmail(): void; }