diff --git a/src/main/php/PDepend/Source/Language/PHP/AbstractPHPParser.php b/src/main/php/PDepend/Source/Language/PHP/AbstractPHPParser.php index 80002ad79..7e15696aa 100644 --- a/src/main/php/PDepend/Source/Language/PHP/AbstractPHPParser.php +++ b/src/main/php/PDepend/Source/Language/PHP/AbstractPHPParser.php @@ -3409,13 +3409,22 @@ private function parseForeachStatement() if ($this->tokenizer->peek() === Tokens::T_BITWISE_AND) { $foreach->addChild($this->parseVariableOrMemberByReference()); } else { - $foreach->addChild($this->parseVariableOrConstantOrPrimaryPrefix()); + if ($this->tokenizer->peek() == Tokens::T_LIST) { + $foreach->addChild($this->parseListExpression()); + } else { + $foreach->addChild($this->parseVariableOrConstantOrPrimaryPrefix()); - if ($this->tokenizer->peek() === Tokens::T_DOUBLE_ARROW) { - $this->consumeToken(Tokens::T_DOUBLE_ARROW); - $foreach->addChild( - $this->parseVariableOrMemberOptionalByReference() - ); + if ($this->tokenizer->peek() === Tokens::T_DOUBLE_ARROW) { + $this->consumeToken(Tokens::T_DOUBLE_ARROW); + + if ($this->tokenizer->peek() == Tokens::T_LIST) { + $foreach->addChild($this->parseListExpression()); + } else { + $foreach->addChild( + $this->parseVariableOrMemberOptionalByReference() + ); + } + } } } diff --git a/src/test/php/PDepend/Source/AST/ASTForeachStatementTest.php b/src/test/php/PDepend/Source/AST/ASTForeachStatementTest.php index b6a8318e3..9c3a27f4c 100644 --- a/src/test/php/PDepend/Source/AST/ASTForeachStatementTest.php +++ b/src/test/php/PDepend/Source/AST/ASTForeachStatementTest.php @@ -295,6 +295,28 @@ public function testForeachStatementTerminatedByPhpCloseTag() $this->assertEquals(9, $stmt->getEndColumn()); } + /** + * testForeachStatementWithList + * + * @return void + */ + public function testForeachStatementWithList() + { + $stmt = $this->_getFirstForeachStatementInFunction(__METHOD__); + $this->assertInstanceOf('PDepend\\Source\\AST\\ASTListExpression', $stmt->getChild(1)); + } + + /** + * testForeachStatementWithKeyAndList + * + * @return void + */ + public function testForeachStatementWithKeyAndList() + { + $stmt = $this->_getFirstForeachStatementInFunction(__METHOD__); + $this->assertInstanceOf('PDepend\\Source\\AST\\ASTListExpression', $stmt->getChild(2)); + } + /** * Returns a node instance for the currently executed test case. * diff --git a/src/test/resources/files/Source/AST/ASTForeachStatement/testForeachStatementWithKeyAndList.php b/src/test/resources/files/Source/AST/ASTForeachStatement/testForeachStatementWithKeyAndList.php new file mode 100644 index 000000000..545495c97 --- /dev/null +++ b/src/test/resources/files/Source/AST/ASTForeachStatement/testForeachStatementWithKeyAndList.php @@ -0,0 +1,5 @@ + list($a, $b)) {} +} diff --git a/src/test/resources/files/Source/AST/ASTForeachStatement/testForeachStatementWithList.php b/src/test/resources/files/Source/AST/ASTForeachStatement/testForeachStatementWithList.php new file mode 100644 index 000000000..c56bfcfe2 --- /dev/null +++ b/src/test/resources/files/Source/AST/ASTForeachStatement/testForeachStatementWithList.php @@ -0,0 +1,5 @@ +