jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/402180 )
Change subject: Turn PropGuard into a trait ...................................................................... Turn PropGuard into a trait This makes it easier to use, as you don't need to copy the __set function into every class to take advantage of it. Change-Id: I8ab0f99d0149f3a04ada6564c3e871775590d722 --- M RemexHtml/PropGuard.php M RemexHtml/Serializer/Serializer.php M RemexHtml/Serializer/SerializerNode.php M RemexHtml/Tokenizer/Attribute.php M RemexHtml/Tokenizer/Tokenizer.php M RemexHtml/TreeBuilder/Element.php M RemexHtml/TreeBuilder/InsertionMode.php M RemexHtml/TreeBuilder/Marker.php M RemexHtml/TreeBuilder/TreeBuilder.php 9 files changed, 20 insertions(+), 36 deletions(-) Approvals: Tim Starling: Looks good to me, approved jenkins-bot: Verified diff --git a/RemexHtml/PropGuard.php b/RemexHtml/PropGuard.php index 00c3c4d..111c09a 100644 --- a/RemexHtml/PropGuard.php +++ b/RemexHtml/PropGuard.php @@ -7,15 +7,15 @@ * undeclared properties on objects. The point of it is to detect programmer * errors. */ -class PropGuard { +trait PropGuard { public static $armed = true; - public static function set( $obj, $name, $value ) { + public function __set( $name, $value ) { if ( self::$armed ) { - throw new \Exception( "Property \"$name\" on object of class " . get_class( $obj ) . + throw new \Exception( "Property \"$name\" on object of class " . get_class( $this ) . " is undeclared" ); } else { - $obj->$name = $value; + $this->$name = $value; } } } diff --git a/RemexHtml/Serializer/Serializer.php b/RemexHtml/Serializer/Serializer.php index 786c969..b46a18e 100644 --- a/RemexHtml/Serializer/Serializer.php +++ b/RemexHtml/Serializer/Serializer.php @@ -14,6 +14,8 @@ * a DOM and then serializing it, even if you use DOMDocument::saveHTML(). */ class Serializer implements AbstractSerializer { + use PropGuard; + /** * A node corresponding to the Document * @var SerializerNode @@ -67,10 +69,6 @@ public function __construct( Formatter $formatter, $errorCallback = null ) { $this->formatter = $formatter; $this->errorCallback = $errorCallback; - } - - public function __set( $name, $value ) { - PropGuard::set( $this, $name, $value ); } /** diff --git a/RemexHtml/Serializer/SerializerNode.php b/RemexHtml/Serializer/SerializerNode.php index 2944732..6739b27 100644 --- a/RemexHtml/Serializer/SerializerNode.php +++ b/RemexHtml/Serializer/SerializerNode.php @@ -4,6 +4,8 @@ use RemexHtml\PropGuard; class SerializerNode { + use PropGuard; + public $id; public $parentId; public $namespace; @@ -24,9 +26,5 @@ $this->name = $name; $this->attrs = $attrs; $this->void = $void; - } - - public function __set( $name, $value ) { - PropGuard::set( $this, $name, $value ); } } diff --git a/RemexHtml/Tokenizer/Attribute.php b/RemexHtml/Tokenizer/Attribute.php index 293b075..9346783 100644 --- a/RemexHtml/Tokenizer/Attribute.php +++ b/RemexHtml/Tokenizer/Attribute.php @@ -7,6 +7,8 @@ * A namespaced attribute, as returned by Attributes::getObjects() */ class Attribute { + use PropGuard; + public $qualifiedName; public $namespaceURI; public $prefix; @@ -19,9 +21,5 @@ $this->prefix = $prefix; $this->localName = $localName; $this->value = $value; - } - - public function __set( $name, $value ) { - PropGuard::set( $this, $name, $value ); } } diff --git a/RemexHtml/Tokenizer/Tokenizer.php b/RemexHtml/Tokenizer/Tokenizer.php index 3567dab..b998f8b 100644 --- a/RemexHtml/Tokenizer/Tokenizer.php +++ b/RemexHtml/Tokenizer/Tokenizer.php @@ -11,6 +11,8 @@ * https://www.w3.org/TR/2016/REC-html51-20161101/ */ class Tokenizer { + use PropGuard; + // States const STATE_START = 1; const STATE_DATA = 2; @@ -111,10 +113,6 @@ $this->ignoreCharRefs = !empty( $options['ignoreCharRefs'] ); $this->ignoreNulls = !empty( $options['ignoreNulls'] ); $this->skipPreprocess = !empty( $options['skipPreprocess'] ); - } - - public function __set( $name, $value ) { - PropGuard::set( $this, $name, $value ); } public function setEnableCdataCallback( $cb ) { diff --git a/RemexHtml/TreeBuilder/Element.php b/RemexHtml/TreeBuilder/Element.php index 18e2166..59029eb 100644 --- a/RemexHtml/TreeBuilder/Element.php +++ b/RemexHtml/TreeBuilder/Element.php @@ -14,6 +14,8 @@ * downstream clients. */ class Element implements FormattingElement { + use PropGuard; + /** * The namespace. This will be the HTML namespace for elements that are not * in foreign content, even if there is a prefix. @@ -123,10 +125,6 @@ $this->htmlName = "$namespace $name"; } $this->attrs = $attrs; - } - - public function __set( $name, $value ) { - PropGuard::set( $this, $name, $value ); } /** diff --git a/RemexHtml/TreeBuilder/InsertionMode.php b/RemexHtml/TreeBuilder/InsertionMode.php index 0029cab..b435aa0 100644 --- a/RemexHtml/TreeBuilder/InsertionMode.php +++ b/RemexHtml/TreeBuilder/InsertionMode.php @@ -6,6 +6,8 @@ use RemexHtml\Tokenizer\TokenHandler; abstract class InsertionMode { + use PropGuard; + const SELF_CLOSE_ERROR = 'unacknowledged self closing tag'; protected $builder; @@ -14,10 +16,6 @@ public function __construct( TreeBuilder $builder, Dispatcher $dispatcher ) { $this->builder = $builder; $this->dispatcher = $dispatcher; - } - - public function __set( $name, $value ) { - PropGuard::set( $this, $name, $value ); } public function doctype( $name, $public, $system, $quirks, $sourceStart, $sourceLength ) { diff --git a/RemexHtml/TreeBuilder/Marker.php b/RemexHtml/TreeBuilder/Marker.php index 3e39c7d..bc2f6c3 100644 --- a/RemexHtml/TreeBuilder/Marker.php +++ b/RemexHtml/TreeBuilder/Marker.php @@ -7,6 +7,8 @@ * A pseudo-element used as a marker or bookmark in the list of active formatting elements */ class Marker implements FormattingElement { + use PropGuard; + public $nextAFE; public $prevAFE; public $nextNoah; @@ -14,9 +16,5 @@ public function __construct( $type ) { $this->type = $type; - } - - public function __set( $name, $value ) { - PropGuard::set( $this, $name, $value ); } } diff --git a/RemexHtml/TreeBuilder/TreeBuilder.php b/RemexHtml/TreeBuilder/TreeBuilder.php index fb490c8..aa45466 100644 --- a/RemexHtml/TreeBuilder/TreeBuilder.php +++ b/RemexHtml/TreeBuilder/TreeBuilder.php @@ -21,6 +21,8 @@ * https://www.w3.org/TR/2016/REC-html51-20161101/syntax.html */ class TreeBuilder { + use PropGuard; + // Quirks const NO_QUIRKS = 0; const LIMITED_QUIRKS = 1; @@ -116,10 +118,6 @@ } else { $this->stack = new SimpleStack; } - } - - public function __set( $name, $value ) { - PropGuard::set( $this, $name, $value ); } public function startDocument( Tokenizer $tokenizer, $namespace, $name ) { -- To view, visit https://gerrit.wikimedia.org/r/402180 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I8ab0f99d0149f3a04ada6564c3e871775590d722 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/libs/RemexHtml Gerrit-Branch: master Gerrit-Owner: Legoktm <lego...@member.fsf.org> Gerrit-Reviewer: Tim Starling <tstarl...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits