[MediaWiki-commits] [Gerrit] mediawiki...RemexHtml[master]: Turn PropGuard into a trait
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 cl
[MediaWiki-commits] [Gerrit] mediawiki...RemexHtml[master]: Turn PropGuard into a trait
Legoktm has uploaded a new change for review. ( 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(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/libs/RemexHtml refs/changes/80/402180/1 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 @@ * downstrea