diff --git a/src/Naneau/Obfuscator/Node/Visitor/ScrambleUse.php b/src/Naneau/Obfuscator/Node/Visitor/ScrambleUse.php index 4c8239a..758f41f 100644 --- a/src/Naneau/Obfuscator/Node/Visitor/ScrambleUse.php +++ b/src/Naneau/Obfuscator/Node/Visitor/ScrambleUse.php @@ -156,9 +156,23 @@ public function enterNode(Node $node) } } + if ($node instanceof Param && $node->type instanceof Node\NullableType && $node->type->type instanceof Name) { + // Name + $name = $node->type->type->toString(); + + // Has it been renamed? + if ($this->isRenamed($name)) { + $node->type->type = $this->getNewName($name); + return $node; + } elseif ($this->isRenamed($node->type->type->getFirst())) { + reset($node->type->type->parts); + $node->type->type->parts[key($node->type->type->parts)] = $this->getNewName($node->type->type->getFirst()); + return $node; + } + } + // Param rename if ($node instanceof Param && $node->type instanceof Name) { - // Name $name = $node->type->toString(); diff --git a/tests/before/Namespaces.php b/tests/before/Namespaces.php index 48d8116..04b4c40 100644 --- a/tests/before/Namespaces.php +++ b/tests/before/Namespaces.php @@ -35,7 +35,7 @@ public function __construct() { class classE extends namespaceDAlias\classD implements namespaceDAlias\interfaceA { - public function method(namespaceDAlias\classD $objectD) : ?namespaceDAlias\classD { + public function method(?namespaceDAlias\classD $objectD) : ?namespaceDAlias\classD { } } \ No newline at end of file diff --git a/tests/expected/Namespaces.php b/tests/expected/Namespaces.php index 5ee9558..69fa6e2 100644 --- a/tests/expected/Namespaces.php +++ b/tests/expected/Namespaces.php @@ -1,2 +1,2 @@ spa26210 = new spf0f507(); $this->sp2e1034 = new sp63627e\classD(); } } class classE extends sp63627e\classD implements sp63627e\interfaceA { public function method(sp63627e\classD $spc1ac55) : ?sp63627e\classD { } } \ No newline at end of file +namespace namespaceA; class classA { } namespace namespaceC\namespaceD; class classD { } interface interfaceA { } namespace namespaceB; use namespaceA\classA as spf0f507; use namespaceC\namespaceD as sp63627e; class classB { private $spa26210; private $sp2e1034; public function __construct() { $this->spa26210 = new spf0f507(); $this->sp2e1034 = new sp63627e\classD(); } } class classE extends sp63627e\classD implements sp63627e\interfaceA { public function method(?sp63627e\classD $spc1ac55) : ?sp63627e\classD { } } \ No newline at end of file