public function __construct(ClassReader $classReader, ClassWriter $classWriter = NULL) { $this->classWriter = $classWriter ?: new ClassWriter(); $this->classReader = $classReader; $this->gClass = $this->classReader->getClass(); $this->setUp(); }
public function testGetClass() { $cr = new \ReflectionClass($this->chainClass); $classReader = new ClassReader(new File($cr->getFileName())); // wir testen ob der ClassReader die GClass korrekt setzt, wenn wir nur die Datei übergeben $this->assertInstanceof('Psc\\Code\\Generate\\GClass', $gClass = $classReader->getClass()); $this->assertEquals('Psc\\Code\\Generate\\ClassReader', $gClass->getFQN()); }
/** * Versucht alle Klasen, die importiert werden müssen wenn die Klasse geschrieben würde zu ermitteln * * dies geht natürlich nicht immer komplett fehlerfrei (aber erstmal ein schöner Anfang) * * @param ClassReader $classReader wird der ClassReader übergeben, werden aus diesem die Imports übernommen * @return array */ public function initImports(GClass $gClass, ClassReader $classReader = NULL) { /* Wo haben wir imports? - Funktions-Parameter als Hints - in Bodys von Funktionen (können wir nicht) - beim extend oder implement (es ist höchstwahrscheinlich, dass wenn wir ein interface implementieren wir da auch imports haben) - die GClass selbst hat in usedClasses einen Array von Schlüssel FQN und Wert array(GClass, alias) */ /* classReader */ if (isset($classReader)) { if (!$classReader->getClass()->equals($gClass)) { throw Exception::create("Die Klasse des ClassReaders ist eine andere als die angegebene! '%s' != '%s' ", $classReader->getClass()->getFQN(), $gClass->getFQN()); } $this->foundImports = $classReader->readUseStatements(); } else { // start empty $this->foundImports = array(); } /* zuerst die Parameter */ foreach ($gClass->getMethods() as $method) { foreach ($method->getParameters() as $parameter) { if (($hint = $parameter->getHint()) instanceof GClass) { $this->addImport($hint); } } } /* implement */ foreach ($gClass->getInterfaces() as $interface) { $this->addImport($interface); } /* die Classes aus der GClass */ foreach ($gClass->getUsedClasses() as $list) { list($class, $alias) = $list; $this->addImport($class, $alias); } return $this; }