1818use PhpParser \Node \Expr \Variable ;
1919use PhpParser \Node \Scalar \String_ ;
2020use PhpParser \Node \Stmt \Class_ ;
21+ use PhpParser \Node \Stmt \Expression ;
2122use PhpParser \Node \Stmt \Function_ ;
2223use PhpParser \Node \Stmt \Namespace_ ;
2324
@@ -94,9 +95,15 @@ public function filterNamespaces(array $statements)
9495 */
9596 public function filterAssignments (array $ statements )
9697 {
97- return array_filter ($ statements , function ($ statement ) {
98- return $ statement instanceof Assign;
98+ $ stmts = array_filter ($ statements , function ($ statement ) {
99+ // Since php-parser 4.0, expression statements are enclosed into
100+ // new Stmt\Expression node, confirm our Assignment is there.
101+ return $ statement instanceof Expression && $ statement ->expr instanceof Assign;
99102 });
103+ // Return the Assignments only.
104+ return array_map (function ($ statement ) {
105+ return $ statement ->expr ;
106+ }, $ stmts );
100107 }
101108
102109 /**
@@ -111,7 +118,7 @@ public function filterAssignments(array $statements)
111118 public function findFirstVariableAssignment (array $ statements , $ name , $ notFoundError = null )
112119 {
113120 foreach ($ this ->filterAssignments ($ statements ) as $ assign ) {
114- if ($ assign ->var instanceof Variable && $ assign ->var ->name === $ name ) {
121+ if ($ assign ->var instanceof Variable && ( string ) $ assign ->var ->name === $ name ) {
115122 return $ assign ;
116123 }
117124 }
@@ -137,11 +144,11 @@ public function findFirstPropertyFetchAssignment(array $statements, $variable, $
137144 if (!$ assign ->var instanceof PropertyFetch) {
138145 continue ;
139146 }
140- if ($ assign ->var ->name !== $ property ) {
147+ if (( string ) $ assign ->var ->name !== $ property ) {
141148 continue ;
142149 }
143150 $ var = $ assign ->var ->var ;
144- if ($ var instanceof Variable && $ var ->name === $ variable ) {
151+ if ($ var instanceof Variable && ( string ) $ var ->name === $ variable ) {
145152 return $ assign ;
146153 }
147154 }
0 commit comments