/** * Display information * * @param io.StringWriter $out * @return void */ public function display($out) { $out->write(self::declarationOf($this->mirror)); $parent = $this->mirror->parent(); if ('lang.Enum' !== $parent->name()) { $this->displayExtensions([$parent], $out, 'extends'); } $this->displayExtensions($this->mirror->interfaces()->declared(), $out, 'implements'); $separator = false; $out->writeLine(' {'); $this->displayMembers($this->mirror->constants(), $out, $separator); foreach (Enum::valuesOf($this->mirror->type()) as $member) { $out->write(' ', $member->name(), '(', $member->ordinal(), ')'); $mirror = new TypeMirror(typeof($member)); if ($mirror->isSubtypeOf($this->mirror)) { $out->writeLine(' {'); foreach ($mirror->methods()->declared() as $method) { $out->writeLine(' ', (string) $method); } $separator = true; $out->writeLine(' }'); } else { $out->writeLine(); $separator = true; } } $constructor = $this->mirror->constructor(); if ($constructor->present()) { $this->displayMembers([$constructor], $out, $separator); } $this->displayMembers($this->mirror->methods()->all(Methods::ofClass()), $out, $separator); $this->displayMembers($this->mirror->methods()->all(Methods::ofInstance()), $out, $separator); $out->writeLine('}'); }
/** * Handles enums * * @param lang.XPClass class */ protected static function printEnum(XPClass $enum) { Console::write(implode(' ', Modifiers::namesOf($enum->getModifiers()))); Console::write(' enum ', self::displayNameOf($enum)); // Parent class, if not lang.Enum if (!XPClass::forName('lang.Enum')->equals($parent = $enum->getParentClass())) { Console::write(' extends ', self::displayNameOf($parent)); } // Interfaces if ($interfaces = $enum->getInterfaces()) { Console::write(' implements '); $s = sizeof($interfaces) - 1; foreach ($interfaces as $i => $iface) { Console::write(self::displayNameOf($iface)); $i < $s && Console::write(', '); } } // Constants Console::writeLine(' {'); $i = 0; foreach ($enum->getConstants() as $name => $value) { Console::writeLine(' const ', $name, ' = ', \xp::stringOf($value)); $i++; } // Members $i && Console::writeLine(); $i = 0; foreach (\lang\Enum::valuesOf($enum) as $member) { Console::write(' ', $member->ordinal(), ': ', $member->name()); $class = $member->getClass(); if ($class->isSubclassOf($enum)) { Console::writeLine(' {'); foreach ($class->getDeclaredMethods() as $method) { Console::writeLine(' ', $method); $i++; } Console::writeLine(' }'); } else { Console::writeLine(); } $i++; } // Methods $i && Console::writeLine(); self::printMethods($enum->getMethods()); Console::writeLine('}'); }
public function staticPrimitiveMemberNotInEnumValuesOf() { Profiling::$fixture = array($this, $this->name); $this->assertEquals(array(Profiling::$INSTANCE, Profiling::$EXTENSION), \lang\Enum::valuesOf(\lang\XPClass::forName('net.xp_framework.unittest.core.Profiling'))); Profiling::$fixture = NULL; }
public function staticPrimitiveMemberNotInEnumValuesOf() { Profiling::$fixture = [$this, $this->name]; $this->assertEquals([Profiling::$INSTANCE, Profiling::$EXTENSION], Enum::valuesOf(XPClass::forName('net.xp_framework.unittest.core.Profiling'))); Profiling::$fixture = null; }