/** * Returns Field instances for all non-static fields of the given class * and the traits it uses. * * @param lang.mirrors.TypeMirror $mirror * @return php.Generator */ protected function instanceFields($mirror) { $seen = []; foreach ($mirror->fields()->of(Member::$INSTANCE | Member::$DECLARED) as $field) { $seen[$field->name()] = true; (yield $field); } foreach ($mirror->traits() as $trait) { foreach ($trait->fields()->of(Member::$INSTANCE) as $field) { if (!isset($seen[$field->name()])) { (yield $field); } } } }
/** * Returns declaration * * @param lang.mirrors.TypeMirror $mirror * @return string */ protected static function declarationOf($mirror) { switch ($mirror->kind()) { case Kind::$ENUM: return $mirror->modifiers()->names() . ' enum ' . $mirror->name(); break; case Kind::$TRAIT: return 'public trait ' . $mirror->name(); break; case Kind::$INTERFACE: return 'public interface ' . $mirror->name(); break; case Kind::$CLASS: return $mirror->modifiers()->names() . ' class ' . $mirror->name(); break; default: throw new IllegalStateException('Unknown kind ' . $mirror->kind()->name()); } }
/** * Creates trait body * * @param lang.mirrors.TypeMirror $mirror * @return string */ protected function body($mirror) { return '/** @return lang.partial.InstanceCreation */ public static function with() { return \\lang\\partial\\InstanceCreation::of(new \\lang\\XPClass(\'' . strtr($mirror->name(), '.', '\\') . '\')); }'; }