Skip to content

Commit 19d48f9

Browse files
authored
Merge pull request #10 from Cheburon/fix-return-typehint-use
fix
2 parents 633518d + 301684a commit 19d48f9

File tree

3 files changed

+35
-2
lines changed

3 files changed

+35
-2
lines changed

src/Naneau/Obfuscator/Node/Visitor/ScrambleUse.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,39 @@ public function enterNode(Node $node)
123123
return $node;
124124
}
125125

126+
if ($node instanceof Node\Stmt\ClassMethod) {
127+
128+
if ($node->returnType instanceof Name) {
129+
// Name
130+
$name = $node->returnType->toString();
131+
132+
// Has it been renamed?
133+
if ($this->isRenamed($name)) {
134+
$node->returnType = $this->getNewName($name);
135+
return $node;
136+
} elseif ($this->isRenamed($node->returnType->getFirst())) {
137+
reset($node->returnType->parts);
138+
$node->returnType->parts[key($node->returnType->parts)] = $this->getNewName($node->returnType->getFirst());
139+
return $node;
140+
}
141+
}
142+
143+
if ($node->returnType instanceof Node\NullableType && $node->returnType->type instanceof Name) {
144+
// Name
145+
$name = $node->returnType->type->toString();
146+
147+
// Has it been renamed?
148+
if ($this->isRenamed($name)) {
149+
$node->returnType->type = $this->getNewName($name);
150+
return $node;
151+
} elseif ($this->isRenamed($node->returnType->type->getFirst())) {
152+
reset($node->returnType->type->parts);
153+
$node->returnType->type->parts[key($node->returnType->type->parts)] = $this->getNewName($node->returnType->type->getFirst());
154+
return $node;
155+
}
156+
}
157+
}
158+
126159
// Param rename
127160
if ($node instanceof Param && $node->type instanceof Name) {
128161

tests/before/Namespaces.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public function __construct() {
3535

3636
class classE extends namespaceDAlias\classD implements namespaceDAlias\interfaceA {
3737

38-
public function method(namespaceDAlias\classD $objectD) {
38+
public function method(namespaceDAlias\classD $objectD) : ?namespaceDAlias\classD {
3939

4040
}
4141
}

tests/expected/Namespaces.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
<?php
2-
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) { } }
2+
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 { } }

0 commit comments

Comments
 (0)