public static function expandSchemaClasses(array $classes)
{
$map = array();
$schemas = array();
foreach ($classes as $class) {
$schema = new $class();
// declare schema
if ($refs = $schema->getReferenceSchemas()) {
foreach ($refs as $refClass => $v) {
if (isset($map[$refClass])) {
continue;
}
$schemas[] = new $refClass();
$map[$refClass] = true;
}
}
if ($schema instanceof TemplateSchema) {
$expandedSchemas = $schema->provideSchemas();
foreach ($expandedSchemas as $expandedSchema) {
if (isset($map[get_class($expandedSchema)])) {
continue;
}
$schemas[] = $expandedSchema;
$map[get_class($expandedSchema)] = true;
}
} else {
if (isset($map[$class])) {
continue;
}
$schemas[] = $schema;
$map[$class] = true;
}
}
return $schemas;
}