Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

[ClassMapGeneratot] Filter out non php code

Otherwise files like https://github.com/propelorm/Propel/blob/master/generator/lib/behavior/i18n/templates/queryUseI18nQuery.php
would fail ("class" keyword would not be filtered out by php_strip_whitespace())
  • Loading branch information...
commit 86bb1be61f03897c0a3a39533bed7e71be1e7271 1 parent ab48114
@vicb vicb authored
View
16 src/Composer/Autoload/ClassMapGenerator.php
@@ -107,21 +107,27 @@ private static function findClasses($path)
throw new \RuntimeException('Could not scan for classes inside '.$path.": \n".$e->getMessage(), 0, $e);
}
- if (!preg_match('{\b(?:class|interface'.$traits.')\b}i', $contents)) {
- return array();
- }
-
// strip heredocs/nowdocs
$contents = preg_replace('{<<<\'?(\w+)\'?(?:\r\n|\n|\r)(?:.*?)(?:\r\n|\n|\r)\\1(?=\r\n|\n|\r|;)}s', 'null', $contents);
// strip strings
$contents = preg_replace('{"[^"\\\\]*(\\\\.[^"\\\\]*)*"|\'[^\'\\\\]*(\\\\.[^\'\\\\]*)*\'}', 'null', $contents);
+ // keep only php code
+ $phpContents = preg_match_all('{<\?(?:php)?(.*)\?>}s', $contents, $m) ? join($m[1], ' ') : '';
+ $contents = preg_replace('{<\?(php)?.*\?>}s', '', $contents);
+ if (preg_match('{<\?(?:php)?(.*)}s', $contents, $m)) {
+ $phpContents .= ' ' . $m[1];
+ }
+
+ if (!preg_match('{\b(?:class|interface'.$traits.')\b}i', $phpContents)) {
+ return array();
+ }
preg_match_all('{
(?:
\b(?<![\$:>])(?<type>class|interface'.$traits.') \s+ (?<name>\S+)
| \b(?<![\$:>])(?<ns>namespace) (?<nsname>\s+[^\s;{}\\\\]+(?:\s*\\\\\s*[^\s;{}\\\\]+)*)? \s*[\{;]
)
- }ix', $contents, $matches);
+ }ix', $phpContents, $matches);
$classes = array();
$namespace = '';
View
1  tests/Composer/Test/Autoload/ClassMapGeneratorTest.php
@@ -53,6 +53,7 @@ public function getTestCreateMapTests()
'ClassMap\\SomeParent' => realpath(__DIR__).'/Fixtures/classmap/SomeParent.php',
'ClassMap\\SomeClass' => realpath(__DIR__).'/Fixtures/classmap/SomeClass.php',
)),
+ array(__DIR__.'/Fixtures/template', array()),
);
if (version_compare(PHP_VERSION, '5.4', '>=')) {
View
6 tests/Composer/Test/Autoload/Fixtures/template/template_1.php
@@ -0,0 +1,6 @@
+/*
+ * class templateClass_1
+ * interface templateInterface_1
+ * trait temlpateTrait_1
+ */
+<?php echo $code
View
8 tests/Composer/Test/Autoload/Fixtures/template/template_2.php
@@ -0,0 +1,8 @@
+/*
+ * class templateClass_2
+ * interface templateInterface_2
+ * trait temlpateTrait_2
+ */
+<?php
+ echo $code
+?>
Please sign in to comment.
Something went wrong with that request. Please try again.