Exemple #1
0
 public function __construct(ClassReader $classReader, ClassWriter $classWriter = NULL)
 {
     $this->classWriter = $classWriter ?: new ClassWriter();
     $this->classReader = $classReader;
     $this->gClass = $this->classReader->getClass();
     $this->setUp();
 }
Exemple #2
0
 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());
 }
Exemple #3
0
 /**
  * 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;
 }