Merge branch '3.2' into 3.3

This commit is contained in:
Daniel Hensby 2016-07-07 10:27:25 +01:00
commit ce47f8112b
No known key found for this signature in database
GPG Key ID: B00D1E9767F0B06E
3 changed files with 34 additions and 0 deletions

View File

@ -242,6 +242,19 @@ class SS_ConfigStaticManifest_Parser {
$type = ($token === (array)$token) ? $token[0] : $token; $type = ($token === (array)$token) ? $token[0] : $token;
if($type == T_CLASS) { if($type == T_CLASS) {
// Fetch the last token
$pos = $this->pos - 1; // Subtract 1 as the pointer is always 1 place ahead of the current token
do {
$pos--;
$prev = $this->tokens[$pos];
} while ($pos > 0 && is_array($prev) && $prev[0] == T_WHITESPACE);
// Ignore class keyword if it's being used for class name resolution: ClassName::class
$lastType = ($prev === (array)$prev) ? $prev[0] : $prev;
if ($lastType === T_PAAMAYIM_NEKUDOTAYIM) {
continue;
}
$next = $this->nextString(); $next = $this->nextString();
if($next === null) { if($next === null) {
user_error("Couldn\'t parse {$this->path} when building config static manifest", E_USER_ERROR); user_error("Couldn\'t parse {$this->path} when building config static manifest", E_USER_ERROR);

View File

@ -257,6 +257,16 @@ DOC;
$this->assertEquals($expected, $statics[':ss:test2']); $this->assertEquals($expected, $statics[':ss:test2']);
} }
public function testParsingClassKeyword() {
$parser = new SS_ConfigStaticManifest_Parser(__DIR__ .
'/ConfigStaticManifestTest/ConfigStaticManifestTestClassKeyword.php');
$parser->parse();
$statics = $parser->getStatics();
$this->assertEquals('bar', $statics['ConfigStaticManifestTestClassKeyword']['foo']['value']);
}
} }
class ConfigStaticManifestTest_Parser extends SS_ConfigStaticManifest_Parser implements TestOnly { class ConfigStaticManifestTest_Parser extends SS_ConfigStaticManifest_Parser implements TestOnly {

View File

@ -0,0 +1,11 @@
<?php
class ConfigStaticManifestTestClassKeyword implements TestOnly {
private static $foo = 'bar';
public function __construct() {
$this->inst = Injector::inst()->get(static::class);
}
}