/** * @param Type $type * @return Result */ public function compile(Type $type) { if ($type->isAbstract()) { return null; } foreach ($this->matchers as $matcher) { if (!$matcher->matches($type)) { continue; } foreach ($matcher->getModules() as $module) { $module->onBeforeGenerate($this, $matcher, $type); } $file = new PhpFile(); $class = $this->createMetaClass($type, $file); foreach ($matcher->getModules() as $module) { $module->onGenerate($this, $matcher, $type, $class); } return new Result($file, $class); } return null; }