Skip to content

Commit

Permalink
Merge pull request naneau#8 from Cheburon/fix-obfuscator-use-extends
Browse files Browse the repository at this point in the history
fix use extends and implements
  • Loading branch information
Cheburon committed Apr 6, 2017
2 parents 81c8f31 + d4e351f commit 1777fdc
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 2 deletions.
9 changes: 8 additions & 1 deletion src/Naneau/Obfuscator/Node/Visitor/ScrambleUse.php
Original file line number Diff line number Diff line change
Expand Up @@ -88,13 +88,16 @@ public function enterNode(Node $node)
$extends = $node->extends->toString();
if ($this->isRenamed($extends)) {
$node->extends = new Name($this->getNewName($extends));
} elseif ($this->isRenamed($node->extends->getFirst())) {
reset($node->extends->parts);
$node->extends->parts[key($node->extends->parts)] = $this->getNewName($node->extends->getFirst());
}
}

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

$implements = array();
$implements = [];

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

Expand All @@ -104,6 +107,10 @@ public function enterNode(Node $node)
if ($this->isRenamed($oldName)) {
// If renamed, set new one
$implements[] = new Name($this->getNewName($oldName));
} elseif ($this->isRenamed($implementsName->getFirst())) {
reset($implementsName->parts);
$implementsName->parts[key($node->extends->parts)] = $this->getNewName($implementsName->getFirst());
$implements[] = $implementsName;
} else {
// If not renamed, pass old one
$implements[] = $implementsName;
Expand Down
7 changes: 7 additions & 0 deletions tests/before/Namespaces.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ class classD {

}

interface interfaceA {

}

namespace namespaceB;

use namespaceA\classA as classC;
Expand All @@ -29,3 +33,6 @@ public function __construct() {
}
}

class classE extends namespaceDAlias\classD implements namespaceDAlias\interfaceA {

}
2 changes: 1 addition & 1 deletion tests/expected/Namespaces.php
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
<?php
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(); } }
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 comments on commit 1777fdc

Please sign in to comment.