public function properties() {
        return $this->cache(__METHOD__, function() {
            return array_unique(array_merge(
                $this->publicProperties(),
                $this->protectedProperties(),
                $this->privateProperties(),
                $this->staticProperties()
            ));
        });
    }