Skip to content

Commit 1777fdc

Browse files
authored
Merge pull request #8 from Cheburon/fix-obfuscator-use-extends
fix use extends and implements
2 parents 81c8f31 + d4e351f commit 1777fdc

File tree

3 files changed

+16
-2
lines changed

3 files changed

+16
-2
lines changed

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,16 @@ public function enterNode(Node $node)
8888
$extends = $node->extends->toString();
8989
if ($this->isRenamed($extends)) {
9090
$node->extends = new Name($this->getNewName($extends));
91+
} elseif ($this->isRenamed($node->extends->getFirst())) {
92+
reset($node->extends->parts);
93+
$node->extends->parts[key($node->extends->parts)] = $this->getNewName($node->extends->getFirst());
9194
}
9295
}
9396

9497
// Classes that implement an interface
9598
if ($node->implements !== null && count($node->implements) > 0) {
9699

97-
$implements = array();
100+
$implements = [];
98101

99102
foreach($node->implements as $implementsName) {
100103

@@ -104,6 +107,10 @@ public function enterNode(Node $node)
104107
if ($this->isRenamed($oldName)) {
105108
// If renamed, set new one
106109
$implements[] = new Name($this->getNewName($oldName));
110+
} elseif ($this->isRenamed($implementsName->getFirst())) {
111+
reset($implementsName->parts);
112+
$implementsName->parts[key($node->extends->parts)] = $this->getNewName($implementsName->getFirst());
113+
$implements[] = $implementsName;
107114
} else {
108115
// If not renamed, pass old one
109116
$implements[] = $implementsName;

tests/before/Namespaces.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ class classD {
1212

1313
}
1414

15+
interface interfaceA {
16+
17+
}
18+
1519
namespace namespaceB;
1620

1721
use namespaceA\classA as classC;
@@ -29,3 +33,6 @@ public function __construct() {
2933
}
3034
}
3135

36+
class classE extends namespaceDAlias\classD implements namespaceDAlias\interfaceA {
37+
38+
}

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 { } 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(); } }
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 { }

0 commit comments

Comments
 (0)