diff --git a/src/Naneau/Obfuscator/Node/Visitor/ScrambleUse.php b/src/Naneau/Obfuscator/Node/Visitor/ScrambleUse.php index b95bd64..a1f4609 100644 --- a/src/Naneau/Obfuscator/Node/Visitor/ScrambleUse.php +++ b/src/Naneau/Obfuscator/Node/Visitor/ScrambleUse.php @@ -123,6 +123,39 @@ public function enterNode(Node $node) return $node; } + if ($node instanceof Node\Stmt\ClassMethod) { + + if ($node->returnType instanceof Name) { + // Name + $name = $node->returnType->toString(); + + // Has it been renamed? + if ($this->isRenamed($name)) { + $node->returnType = $this->getNewName($name); + return $node; + } elseif ($this->isRenamed($node->returnType->getFirst())) { + reset($node->returnType->parts); + $node->returnType->parts[key($node->returnType->parts)] = $this->getNewName($node->returnType->getFirst()); + return $node; + } + } + + if ($node->returnType instanceof Node\NullableType && $node->returnType->type instanceof Name) { + // Name + $name = $node->returnType->type->toString(); + + // Has it been renamed? + if ($this->isRenamed($name)) { + $node->returnType->type = $this->getNewName($name); + return $node; + } elseif ($this->isRenamed($node->returnType->type->getFirst())) { + reset($node->returnType->type->parts); + $node->returnType->type->parts[key($node->returnType->type->parts)] = $this->getNewName($node->returnType->type->getFirst()); + return $node; + } + } + } + // Param rename if ($node instanceof Param && $node->type instanceof Name) { diff --git a/tests/before/Namespaces.php b/tests/before/Namespaces.php index 13248d0..48d8116 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) { + 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 dd690db..5ee9558 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) { } } \ 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