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

Reply via email to