/** * Parse a class member list. * @param PartialNode|null $doc_comment DocBlock associated with method * @param ModifiersNode $modifiers Member modifiers * @return ClassMemberListNode * @throws ParserException */ private function classMemberList($doc_comment, ModifiersNode $modifiers) { // Modifier checks if ($modifiers->getAbstract()) { throw new ParserException($this->filename, $this->iterator->getLineNumber(), $this->iterator->getColumnNumber(), "members can not be declared abstract"); } if ($modifiers->getFinal()) { throw new ParserException($this->filename, $this->iterator->getLineNumber(), $this->iterator->getColumnNumber(), "members can not be declared final"); } $node = new ClassMemberListNode(); $node->mergeNode($doc_comment); $node->mergeNode($modifiers); $members = new CommaListNode(); do { $members->addChild($this->classMember()); } while ($this->tryMatch(',', $members)); $node->addChild($members, 'members'); $this->endStatement($node); return $node; }
/** * Add property to class. * * @param string|ClassMemberListNode $property * @return $this */ public function appendProperty($property) { if (is_string($property)) { $property = ClassMemberListNode::create($property); } $properties = $this->statements->children(Filter::isInstanceOf('\\Pharborist\\ClassMemberListNode')); if ($properties->count() === 0) { $this->statements->firstChild()->after($property); } else { $properties->last()->after($property); } FormatterFactory::format($this); return $this; }
public function testClassProperty() { $property = ClassMemberListNode::create('someProperty'); $this->assertEquals('private $someProperty;', $property->getText()); $property->setVisibility(Token::_protected()); $this->assertEquals('protected $someProperty;', $property->getText()); }