Example #1
0
 public function storeMethod(ParsedMethod $method, ParsedType $type)
 {
     $n = strtolower($type->getName());
     if (empty($this->methods[$n])) {
         $this->methods[$n] = [];
     }
     $this->methods[$n][strtolower($method->getName())] = $method;
 }
Example #2
0
 public function __construct(ParsedType $type, array $fields, array $methods)
 {
     $this->key = strtolower($type->getName());
     $this->type = $type;
     foreach ($fields as $field) {
         $this->fields[$field->getName()] = new ParsedFieldInfo($this, $field);
     }
     foreach ($methods as $method) {
         $this->methods[strtolower($method->getName())] = new ParsedMethodInfo($this, $method);
     }
 }
Example #3
0
 protected function generateSourceCode(ParsedType $type, SourceBuffer $buffer, \SplFileInfo $file)
 {
     $extends = array_map(function ($t) {
         return '\\' . ltrim($t, '\\');
     }, $type->getExtends());
     $extends = empty($extends) ? '' : implode(', ', $extends);
     $implements = ['\\' . MergedSourceInterface::class];
     // Double inclusion safeguard:
     if ($type->isClass()) {
         $safe1 = sprintf(' if(!class_exists(%s, false)) { ', var_export($type->getName(), true));
         $safe2 = ' } ';
     } elseif ($type->isInterface()) {
         $safe1 = sprintf(' if(!interface_exists(%s, false)) { ', var_export($type->getName(), true));
         $safe2 = ' } ';
     } else {
         $safe1 = sprintf(' if(!trait_exists(%s, false)) { ', var_export($type->getName(), true));
         $safe2 = ' } ';
     }
     $generator = new SourceGenerator($buffer);
     $generator->populateTypeMarker($type, ParsedType::MARKER_INTRODUCED_INTERFACES, implode(', ', $implements));
     $generator->populateTypeMarker($type, ParsedType::MARKER_INTRODUCED_NAME, $type->getLocalName());
     $generator->populateTypeMarker($type, ParsedType::MARKER_INTRODUCED_SUPERCLASS, $extends);
     $generator->populateTypeMarker($type, ParsedType::MARKER_INTRODUCED_PREPENDED_CODE, $safe1);
     $generator->populateTypeMarker($type, ParsedType::MARKER_INTRODUCED_EXTERNAL_CODE, $safe2);
     $code = trim($generator->generateCode($file->getPathname(), dirname($file->getPathname())));
     $code = preg_replace("'^<\\?(?:php)?'i", '', $code) . "\n";
     return $code;
 }
Example #4
0
 protected function createNode(ParsedType $type, SourceBuffer $buffer, \SplFileInfo $file)
 {
     $edges = array_map('strtolower', array_merge($type->getSupertypes(), $type->getTraits()));
     return new TopSortNode(strtolower($type->getName()), $edges, [$type, $buffer, $file]);
 }